kiki/Readme.rtf0000666000000000000000000000372510336064654012437 0ustar rootroot{\rtf1\ansi\ansicpg10000\deff0{\fonttbl{\f0\fswiss\fcharset77 Helvetica;}{\f1\fswiss\fcharset77 Helvetica-Bold;}{\f2\fswiss\fcharset0 Helvetica;}} \viewkind4\uc1\pard\tx1440\tx2880\tx4320\tx5760\tx7200\lang1031\f0\fs24\par \b\f1 kiki the nano bot\b0\f0\par \par Thanks a lot for downloading this program.\par \par \b\f1 package contents\b0\f0\par \par The package contains beside this Readme\par some documentation in HTML format and\par the binary for \lang1033\f2 Windows, \lang1031\f0 Mac OS X or the complete sources\par (depending on which package you downloaded).\par \par \b\f1 competition\par \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\b0\f0\par \pard\tx1440\tx2880\tx4320\tx5760\tx7200 This game was written for the uDevGame Game \par Programming Competition and has won the categories \par 'Best Overall Game', 'Best Graphics' and 'Best Originality'.\par \par I would like to thank the organizers of this great competition,\par the companies that sponsored the prizes, all the contestants\par and the people who voted and provided valuable feedback for \par the games.\par \par Please visit \par \par http://www.idevgames.com\par \par for more games and/or the postmortem for 'kiki'.\par \par \b\f1 no warranty\b0\f0\par \par As the version number (0.9.0) suggests, \par I didn't manage to finish the game completely.\par It still contains some bugs and may crash \par in rare occasions.\par \par \b\f1 homepage\b0\f0\par \par The homepage for this game is\par \tab\par http://\lang1033\f2 kiki.sourceforge.net\lang1031\f0\par \par Updates and new levels will be published there.\par \par \b\f1 feedback\par \par \b0\f0 It always makes me happy to receive some feedback at\par \par monsterkodi@\lang1033\f2 users.sourceforge.net\lang1031\f0\par \par \b\f1 have fun\b0\f0\par \par I hope you enjoy playing this little game,\par \par yours kodi\par \par \par \par \par } kiki/Readme.txt0000666000000000000000000000273510070562127012454 0ustar rootrootkiki the nano bot ----------------- Thanks a lot for downloading this program. package contents ---------------- The package contains beside this Readme some documentation in HTML format and the binary for Windows, Mac OS X or the complete sources (depending on which package you downloaded). If you donwloaded the sources, please check the documents in the linux or macosx subdirectories for descriptions of the build process on the appropriate platform. competition ----------- This game was written for the uDevGame Game Programming Competition and has won the categories 'Best Overall Game', 'Best Graphics' and 'Best Originality'. I would like to thank the organizers of this great competition, the companies that sponsored the prizes, all the contestants and the people who voted and provided valuable feedback for the games. Please visit http://www.idevgames.com for more games and/or the postmortem for 'kiki'. no warranty ----------- As the version number (0.9.0) suggests, I didn't manage to finish the game completely. It still contains some bugs and may crash in rare occasions. homepage -------- The homepage for this game is http://kiki.sourceforge.net Updates and new levels will be published there. feedback -------- It always makes me happy to receive some feedback at monsterkodi@users.sourceforge.net have fun I hope you enjoy playing this little game, yours kodi kiki/SWIG/0000777000000000000000000000000010336064545011266 5ustar rootrootkiki/SWIG/KConsole.i0000666000000000000000000000121407644706114013156 0ustar rootroot // -------------------------------------------------------------------------------------------------------- %nodefault; class KConsole : public KWindow { public: // ........................................................................ PUBLIC %rename(_print) print; static void print ( const std::string & s ); static void write ( const std::string & s ); static void printError ( const std::string &, bool = false ); static KConsole * getConsole (); void clear (); %pythoncode %{ def out (self, *args): _kiki.KConsole__print(" ".join(map(str, args))) %} }; kiki/SWIG/KEventHandler.i0000666000000000000000000000142610313614100014114 0ustar rootroot // -------------------------------------------------------------------------------------------------------- %nodefault; class KEventHandler { public: // ........................................................................ PUBLIC virtual void quit (); static int getMouseState (); static KPosition getMousePos (); static KPosition getMouseDelta (); static KSize getScreenSize (); static bool setScreenSize ( int width, int height, bool fullscreen = false ); static bool getFullscreen (); static void setFullscreen ( bool ); static unsigned int getTime (); void setWireframeMode ( bool ); void setDisplayFps ( bool ); bool getDisplayFps () const; }; kiki/SWIG/kiki.py0000666000000000000000000024564410334735415012605 0ustar rootroot# This file was created automatically by SWIG. # Don't modify this file, modify the SWIG interface instead. # This file is compatible with both classic and new-style classes. import _kiki def _swig_setattr_nondynamic(self,class_type,name,value,static=1): if (name == "this"): if isinstance(value, class_type): self.__dict__[name] = value.this if hasattr(value,"thisown"): self.__dict__["thisown"] = value.thisown del value.thisown return method = class_type.__swig_setmethods__.get(name,None) if method: return method(self,value) if (not static) or hasattr(self,name) or (name == "thisown"): self.__dict__[name] = value else: raise AttributeError("You cannot add attributes to %s" % self) def _swig_setattr(self,class_type,name,value): return _swig_setattr_nondynamic(self,class_type,name,value,0) def _swig_getattr(self,class_type,name): method = class_type.__swig_getmethods__.get(name,None) if method: return method(self) raise AttributeError,name import types try: _object = types.ObjectType _newclass = 1 except AttributeError: class _object : pass _newclass = 0 del types class KikiPos(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPos, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPos, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiPos instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["x"] = _kiki.KikiPos_x_set __swig_getmethods__["x"] = _kiki.KikiPos_x_get if _newclass:x = property(_kiki.KikiPos_x_get, _kiki.KikiPos_x_set) __swig_setmethods__["y"] = _kiki.KikiPos_y_set __swig_getmethods__["y"] = _kiki.KikiPos_y_get if _newclass:y = property(_kiki.KikiPos_y_get, _kiki.KikiPos_y_set) __swig_setmethods__["z"] = _kiki.KikiPos_z_set __swig_getmethods__["z"] = _kiki.KikiPos_z_get if _newclass:z = property(_kiki.KikiPos_z_get, _kiki.KikiPos_z_set) def __init__(self, *args): _swig_setattr(self, KikiPos, 'this', _kiki.new_KikiPos(*args)) _swig_setattr(self, KikiPos, 'thisown', 1) def __sub__(*args): return _kiki.KikiPos___sub__(*args) def __add__(*args): return _kiki.KikiPos___add__(*args) def __iadd__(*args): return _kiki.KikiPos___iadd__(*args) def __isub__(*args): return _kiki.KikiPos___isub__(*args) def getString(*args): return _kiki.KikiPos_getString(*args) def __eq__(*args): return _kiki.KikiPos___eq__(*args) def __ne__(*args): return _kiki.KikiPos___ne__(*args) def __str__(*args): return _kiki.KikiPos___str__(*args) def __del__(self, destroy=_kiki.delete_KikiPos): try: if self.thisown: destroy(self) except: pass class KikiPosPtr(KikiPos): def __init__(self, this): _swig_setattr(self, KikiPos, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPos, 'thisown', 0) _swig_setattr(self, KikiPos,self.__class__,KikiPos) _kiki.KikiPos_swigregister(KikiPosPtr) class KVector(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KVector, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KVector, name) def __repr__(self): return "<%s.%s; proxy of C++ KVector instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KVector, 'this', _kiki.new_KVector(*args)) _swig_setattr(self, KVector, 'thisown', 1) def reset(*args): return _kiki.KVector_reset(*args) def normalize(*args): return _kiki.KVector_normalize(*args) def __iadd__(*args): return _kiki.KVector___iadd__(*args) def __isub__(*args): return _kiki.KVector___isub__(*args) def __imul__(*args): return _kiki.KVector___imul__(*args) def __idiv__(*args): return _kiki.KVector___idiv__(*args) def cross(*args): return _kiki.KVector_cross(*args) def __sub__(*args): return _kiki.KVector___sub__(*args) def __add__(*args): return _kiki.KVector___add__(*args) def __mul__(*args): return _kiki.KVector___mul__(*args) def __div__(*args): return _kiki.KVector___div__(*args) def perpendicular(*args): return _kiki.KVector_perpendicular(*args) def parallel(*args): return _kiki.KVector_parallel(*args) def reflect(*args): return _kiki.KVector_reflect(*args) def normal(*args): return _kiki.KVector_normal(*args) def length(*args): return _kiki.KVector_length(*args) def angle(*args): return _kiki.KVector_angle(*args) def xyangle(*args): return _kiki.KVector_xyangle(*args) def xyperp(*args): return _kiki.KVector_xyperp(*args) def round(*args): return _kiki.KVector_round(*args) def glVertex(*args): return _kiki.KVector_glVertex(*args) def __getitem__(*args): return _kiki.KVector___getitem__(*args) def __str__(*args): return _kiki.KVector___str__(*args) def __del__(self, destroy=_kiki.delete_KVector): try: if self.thisown: destroy(self) except: pass class KVectorPtr(KVector): def __init__(self, this): _swig_setattr(self, KVector, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KVector, 'thisown', 0) _swig_setattr(self, KVector,self.__class__,KVector) _kiki.KVector_swigregister(KVectorPtr) class KQuaternion(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KQuaternion, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KQuaternion, name) def __repr__(self): return "<%s.%s; proxy of C++ KQuaternion instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["w"] = _kiki.KQuaternion_w_set __swig_getmethods__["w"] = _kiki.KQuaternion_w_get if _newclass:w = property(_kiki.KQuaternion_w_get, _kiki.KQuaternion_w_set) __swig_setmethods__["x"] = _kiki.KQuaternion_x_set __swig_getmethods__["x"] = _kiki.KQuaternion_x_get if _newclass:x = property(_kiki.KQuaternion_x_get, _kiki.KQuaternion_x_set) __swig_setmethods__["y"] = _kiki.KQuaternion_y_set __swig_getmethods__["y"] = _kiki.KQuaternion_y_get if _newclass:y = property(_kiki.KQuaternion_y_get, _kiki.KQuaternion_y_set) __swig_setmethods__["z"] = _kiki.KQuaternion_z_set __swig_getmethods__["z"] = _kiki.KQuaternion_z_get if _newclass:z = property(_kiki.KQuaternion_z_get, _kiki.KQuaternion_z_set) def __init__(self, *args): _swig_setattr(self, KQuaternion, 'this', _kiki.new_KQuaternion(*args)) _swig_setattr(self, KQuaternion, 'thisown', 1) __swig_getmethods__["rotationAroundVector"] = lambda x: _kiki.KQuaternion_rotationAroundVector if _newclass:rotationAroundVector = staticmethod(_kiki.KQuaternion_rotationAroundVector) def rotate(*args): return _kiki.KQuaternion_rotate(*args) def normalize(*args): return _kiki.KQuaternion_normalize(*args) def invert(*args): return _kiki.KQuaternion_invert(*args) def conjugate(*args): return _kiki.KQuaternion_conjugate(*args) def getNormal(*args): return _kiki.KQuaternion_getNormal(*args) def getConjugate(*args): return _kiki.KQuaternion_getConjugate(*args) def getInverse(*args): return _kiki.KQuaternion_getInverse(*args) def length(*args): return _kiki.KQuaternion_length(*args) def glRotate(*args): return _kiki.KQuaternion_glRotate(*args) def slerp(*args): return _kiki.KQuaternion_slerp(*args) def __mul__(*args): return _kiki.KQuaternion___mul__(*args) def __str__(*args): return _kiki.KQuaternion___str__(*args) def __del__(self, destroy=_kiki.delete_KQuaternion): try: if self.thisown: destroy(self) except: pass class KQuaternionPtr(KQuaternion): def __init__(self, this): _swig_setattr(self, KQuaternion, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KQuaternion, 'thisown', 0) _swig_setattr(self, KQuaternion,self.__class__,KQuaternion) _kiki.KQuaternion_swigregister(KQuaternionPtr) KQuaternion_rotationAroundVector = _kiki.KQuaternion_rotationAroundVector class KColor(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KColor, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KColor, name) def __repr__(self): return "<%s.%s; proxy of C++ KColor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KColor, 'this', _kiki.new_KColor(*args)) _swig_setattr(self, KColor, 'thisown', 1) def setValues(*args): return _kiki.KColor_setValues(*args) def setRed(*args): return _kiki.KColor_setRed(*args) def setGreen(*args): return _kiki.KColor_setGreen(*args) def setBlue(*args): return _kiki.KColor_setBlue(*args) def setAlpha(*args): return _kiki.KColor_setAlpha(*args) def getRed(*args): return _kiki.KColor_getRed(*args) def getGreen(*args): return _kiki.KColor_getGreen(*args) def getBlue(*args): return _kiki.KColor_getBlue(*args) def getAlpha(*args): return _kiki.KColor_getAlpha(*args) def glColor(*args): return _kiki.KColor_glColor(*args) def __str__(*args): return _kiki.KColor___str__(*args) def __del__(self, destroy=_kiki.delete_KColor): try: if self.thisown: destroy(self) except: pass class KColorPtr(KColor): def __init__(self, this): _swig_setattr(self, KColor, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KColor, 'thisown', 0) _swig_setattr(self, KColor,self.__class__,KColor) _kiki.KColor_swigregister(KColorPtr) class KProjection(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KProjection, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KProjection, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KProjection instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def focusOn(*args): return _kiki.KProjection_focusOn(*args) def setFov(*args): return _kiki.KProjection_setFov(*args) def getFov(*args): return _kiki.KProjection_getFov(*args) def setViewport(*args): return _kiki.KProjection_setViewport(*args) def setPosition(*args): return _kiki.KProjection_setPosition(*args) class KProjectionPtr(KProjection): def __init__(self, this): _swig_setattr(self, KProjection, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KProjection, 'thisown', 0) _swig_setattr(self, KProjection,self.__class__,KProjection) _kiki.KProjection_swigregister(KProjectionPtr) class KKey(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KKey, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KKey, name) def __repr__(self): return "<%s.%s; proxy of C++ KKey instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KKey, 'this', _kiki.new_KKey(*args)) _swig_setattr(self, KKey, 'thisown', 1) __swig_setmethods__["name"] = _kiki.KKey_name_set __swig_getmethods__["name"] = _kiki.KKey_name_get if _newclass:name = property(_kiki.KKey_name_get, _kiki.KKey_name_set) def getUnmodifiedName(*args): return _kiki.KKey_getUnmodifiedName(*args) def getModifierName(*args): return _kiki.KKey_getModifierName(*args) class KKeyPtr(KKey): def __init__(self, this): _swig_setattr(self, KKey, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KKey, 'thisown', 0) _swig_setattr(self, KKey,self.__class__,KKey) _kiki.KKey_swigregister(KKeyPtr) class KikiAction(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiAction, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiAction, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiAction instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) ONCE = _kiki.KikiAction_ONCE CONTINUOUS = _kiki.KikiAction_CONTINUOUS REPEAT = _kiki.KikiAction_REPEAT def __init__(self, *args): _swig_setattr(self, KikiAction, 'this', _kiki.new_KikiAction(*args)) _swig_setattr(self, KikiAction, 'thisown', 1) def getId(*args): return _kiki.KikiAction_getId(*args) def getName(*args): return _kiki.KikiAction_getName(*args) def getRelativeTime(*args): return _kiki.KikiAction_getRelativeTime(*args) def getRelativeDelta(*args): return _kiki.KikiAction_getRelativeDelta(*args) def getDuration(*args): return _kiki.KikiAction_getDuration(*args) def setDuration(*args): return _kiki.KikiAction_setDuration(*args) class KikiActionPtr(KikiAction): def __init__(self, this): _swig_setattr(self, KikiAction, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiAction, 'thisown', 0) _swig_setattr(self, KikiAction,self.__class__,KikiAction) _kiki.KikiAction_swigregister(KikiActionPtr) class KikiPyAction(KikiAction): __swig_setmethods__ = {} for _s in [KikiAction]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPyAction, name, value) __swig_getmethods__ = {} for _s in [KikiAction]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPyAction, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiPyAction instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiPyAction, 'this', _kiki.new_KikiPyAction(*args)) _swig_setattr(self, KikiPyAction, 'thisown', 1) def __del__(self, destroy=_kiki.delete_KikiPyAction): try: if self.thisown: destroy(self) except: pass def __init__(self,*args): self.this = apply (_kiki.new_KikiPyAction, (self,) + args) self.thisown = 1 class KikiPyActionPtr(KikiPyAction): def __init__(self, this): _swig_setattr(self, KikiPyAction, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPyAction, 'thisown', 0) _swig_setattr(self, KikiPyAction,self.__class__,KikiPyAction) _kiki.KikiPyAction_swigregister(KikiPyActionPtr) class KikiEvent(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiEvent, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiEvent, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiEvent, 'this', _kiki.new_KikiEvent(*args)) _swig_setattr(self, KikiEvent, 'thisown', 1) def addAction(*args): return _kiki.KikiEvent_addAction(*args) def removeAction(*args): return _kiki.KikiEvent_removeAction(*args) def removeAllActions(*args): return _kiki.KikiEvent_removeAllActions(*args) def removeActionsOfObject(*args): return _kiki.KikiEvent_removeActionsOfObject(*args) def removeActionWithName(*args): return _kiki.KikiEvent_removeActionWithName(*args) def triggerActions(*args): return _kiki.KikiEvent_triggerActions(*args) def getTime(*args): return _kiki.KikiEvent_getTime(*args) class KikiEventPtr(KikiEvent): def __init__(self, this): _swig_setattr(self, KikiEvent, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiEvent, 'thisown', 0) _swig_setattr(self, KikiEvent,self.__class__,KikiEvent) _kiki.KikiEvent_swigregister(KikiEventPtr) class KikiActionObject(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiActionObject, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiActionObject, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiActionObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def addAction(*args): return _kiki.KikiActionObject_addAction(*args) def removeAction(*args): return _kiki.KikiActionObject_removeAction(*args) def startTimedAction(*args): return _kiki.KikiActionObject_startTimedAction(*args) def startTimer(*args): return _kiki.KikiActionObject_startTimer(*args) def getActionWithName(*args): return _kiki.KikiActionObject_getActionWithName(*args) def getActionWithId(*args): return _kiki.KikiActionObject_getActionWithId(*args) def addEventWithName(*args): return _kiki.KikiActionObject_addEventWithName(*args) def getEventWithName(*args): return _kiki.KikiActionObject_getEventWithName(*args) def getEventWithId(*args): return _kiki.KikiActionObject_getEventWithId(*args) def getClassName(*args): return _kiki.KikiActionObject_getClassName(*args) class KikiActionObjectPtr(KikiActionObject): def __init__(self, this): _swig_setattr(self, KikiActionObject, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiActionObject, 'thisown', 0) _swig_setattr(self, KikiActionObject,self.__class__,KikiActionObject) _kiki.KikiActionObject_swigregister(KikiActionObjectPtr) class KikiObject(KikiActionObject): __swig_setmethods__ = {} for _s in [KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiObject, name, value) __swig_getmethods__ = {} for _s in [KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiObject, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def setName(*args): return _kiki.KikiObject_setName(*args) def getName(*args): return _kiki.KikiObject_getName(*args) def getPos(*args): return _kiki.KikiObject_getPos(*args) def setPosition(*args): return _kiki.KikiObject_setPosition(*args) def getPosition(*args): return _kiki.KikiObject_getPosition(*args) def setOrientation(*args): return _kiki.KikiObject_setOrientation(*args) def getOrientation(*args): return _kiki.KikiObject_getOrientation(*args) def setCurrentOrientation(*args): return _kiki.KikiObject_setCurrentOrientation(*args) def getCurrentOrientation(*args): return _kiki.KikiObject_getCurrentOrientation(*args) def isSpaceEgoistic(*args): return _kiki.KikiObject_isSpaceEgoistic(*args) def getClassName(*args): return _kiki.KikiObject_getClassName(*args) class KikiObjectPtr(KikiObject): def __init__(self, this): _swig_setattr(self, KikiObject, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiObject, 'thisown', 0) _swig_setattr(self, KikiObject,self.__class__,KikiObject) _kiki.KikiObject_swigregister(KikiObjectPtr) class KikiBotStatus(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBotStatus, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiBotStatus, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBotStatus instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def getMoves(*args): return _kiki.KikiBotStatus_getMoves(*args) def setMoves(*args): return _kiki.KikiBotStatus_setMoves(*args) def addMoves(*args): return _kiki.KikiBotStatus_addMoves(*args) def getMinMoves(*args): return _kiki.KikiBotStatus_getMinMoves(*args) def setMinMoves(*args): return _kiki.KikiBotStatus_setMinMoves(*args) class KikiBotStatusPtr(KikiBotStatus): def __init__(self, this): _swig_setattr(self, KikiBotStatus, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBotStatus, 'thisown', 0) _swig_setattr(self, KikiBotStatus,self.__class__,KikiBotStatus) _kiki.KikiBotStatus_swigregister(KikiBotStatusPtr) class KikiBotFume(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBotFume, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBotFume, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBotFume instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBotFume_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBotFume_setObjectColor) class KikiBotFumePtr(KikiBotFume): def __init__(self, this): _swig_setattr(self, KikiBotFume, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBotFume, 'thisown', 0) _swig_setattr(self, KikiBotFume,self.__class__,KikiBotFume) _kiki.KikiBotFume_swigregister(KikiBotFumePtr) KikiBotFume_setObjectColor = _kiki.KikiBotFume_setObjectColor class KikiBot(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBot, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBot, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBot instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def isDead(*args): return _kiki.KikiBot_isDead(*args) def getDown(*args): return _kiki.KikiBot_getDown(*args) def getUp(*args): return _kiki.KikiBot_getUp(*args) def getDir(*args): return _kiki.KikiBot_getDir(*args) def setMove(*args): return _kiki.KikiBot_setMove(*args) def getStatus(*args): return _kiki.KikiBot_getStatus(*args) class KikiBotPtr(KikiBot): def __init__(self, this): _swig_setattr(self, KikiBot, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBot, 'thisown', 0) _swig_setattr(self, KikiBot,self.__class__,KikiBot) _kiki.KikiBot_swigregister(KikiBotPtr) class KikiStatusDisplay(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiStatusDisplay, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiStatusDisplay, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiStatusDisplay instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def show(*args): return _kiki.KikiStatusDisplay_show(*args) def hide(*args): return _kiki.KikiStatusDisplay_hide(*args) class KikiStatusDisplayPtr(KikiStatusDisplay): def __init__(self, this): _swig_setattr(self, KikiStatusDisplay, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiStatusDisplay, 'thisown', 0) _swig_setattr(self, KikiStatusDisplay,self.__class__,KikiStatusDisplay) _kiki.KikiStatusDisplay_swigregister(KikiStatusDisplayPtr) class KikiPlayback(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPlayback, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPlayback, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPlayback instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["start"] = lambda x: _kiki.KikiPlayback_start if _newclass:start = staticmethod(_kiki.KikiPlayback_start) __swig_getmethods__["stop"] = lambda x: _kiki.KikiPlayback_stop if _newclass:stop = staticmethod(_kiki.KikiPlayback_stop) class KikiPlaybackPtr(KikiPlayback): def __init__(self, this): _swig_setattr(self, KikiPlayback, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPlayback, 'thisown', 0) _swig_setattr(self, KikiPlayback,self.__class__,KikiPlayback) _kiki.KikiPlayback_swigregister(KikiPlaybackPtr) KikiPlayback_start = _kiki.KikiPlayback_start KikiPlayback_stop = _kiki.KikiPlayback_stop class KikiPlayer(KikiBot): __swig_setmethods__ = {} for _s in [KikiBot]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPlayer, name, value) __swig_getmethods__ = {} for _s in [KikiBot]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPlayer, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPlayer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def die(*args): return _kiki.KikiPlayer_die(*args) def reborn(*args): return _kiki.KikiPlayer_reborn(*args) def reset(*args): return _kiki.KikiPlayer_reset(*args) def startRecorder(*args): return _kiki.KikiPlayer_startRecorder(*args) def saveRecorder(*args): return _kiki.KikiPlayer_saveRecorder(*args) def getProjection(*args): return _kiki.KikiPlayer_getProjection(*args) def handleKey(*args): return _kiki.KikiPlayer_handleKey(*args) def handleKeyRelease(*args): return _kiki.KikiPlayer_handleKeyRelease(*args) def recordKeyForAction(*args): return _kiki.KikiPlayer_recordKeyForAction(*args) __swig_getmethods__["getActionForKey"] = lambda x: _kiki.KikiPlayer_getActionForKey if _newclass:getActionForKey = staticmethod(_kiki.KikiPlayer_getActionForKey) __swig_getmethods__["getKeyForAction"] = lambda x: _kiki.KikiPlayer_getKeyForAction if _newclass:getKeyForAction = staticmethod(_kiki.KikiPlayer_getKeyForAction) __swig_getmethods__["setKeyForAction"] = lambda x: _kiki.KikiPlayer_setKeyForAction if _newclass:setKeyForAction = staticmethod(_kiki.KikiPlayer_setKeyForAction) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiPlayer_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiPlayer_setObjectColor) class KikiPlayerPtr(KikiPlayer): def __init__(self, this): _swig_setattr(self, KikiPlayer, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPlayer, 'thisown', 0) _swig_setattr(self, KikiPlayer,self.__class__,KikiPlayer) _kiki.KikiPlayer_swigregister(KikiPlayerPtr) KikiPlayer_getActionForKey = _kiki.KikiPlayer_getActionForKey KikiPlayer_getKeyForAction = _kiki.KikiPlayer_getKeyForAction KikiPlayer_setKeyForAction = _kiki.KikiPlayer_setKeyForAction KikiPlayer_setObjectColor = _kiki.KikiPlayer_setObjectColor class KikiMutant(KikiBot): __swig_setmethods__ = {} for _s in [KikiBot]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMutant, name, value) __swig_getmethods__ = {} for _s in [KikiBot]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMutant, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMutant instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMutant, 'this', _kiki.new_KikiMutant(*args)) _swig_setattr(self, KikiMutant, 'thisown', 1) def die(*args): return _kiki.KikiMutant_die(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMutant_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMutant_setObjectColor) class KikiMutantPtr(KikiMutant): def __init__(self, this): _swig_setattr(self, KikiMutant, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMutant, 'thisown', 0) _swig_setattr(self, KikiMutant,self.__class__,KikiMutant) _kiki.KikiMutant_swigregister(KikiMutantPtr) KikiMutant_setObjectColor = _kiki.KikiMutant_setObjectColor class KikiSound(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSound, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiSound, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiSound instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def toggleMute(*args): return _kiki.KikiSound_toggleMute(*args) def setMute(*args): return _kiki.KikiSound_setMute(*args) def isMute(*args): return _kiki.KikiSound_isMute(*args) def setSoundVolume(*args): return _kiki.KikiSound_setSoundVolume(*args) def getSoundVolume(*args): return _kiki.KikiSound_getSoundVolume(*args) def playSound(*args): return _kiki.KikiSound_playSound(*args) def playSoundAtPos(*args): return _kiki.KikiSound_playSoundAtPos(*args) class KikiSoundPtr(KikiSound): def __init__(self, this): _swig_setattr(self, KikiSound, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSound, 'thisown', 0) _swig_setattr(self, KikiSound,self.__class__,KikiSound) _kiki.KikiSound_swigregister(KikiSoundPtr) class KikiWorld(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWorld, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiWorld, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiWorld instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) CAMERA_INSIDE = _kiki.KikiWorld_CAMERA_INSIDE CAMERA_BEHIND = _kiki.KikiWorld_CAMERA_BEHIND CAMERA_FOLLOW = _kiki.KikiWorld_CAMERA_FOLLOW def setSize(*args): return _kiki.KikiWorld_setSize(*args) def getSize(*args): return _kiki.KikiWorld_getSize(*args) def setName(*args): return _kiki.KikiWorld_setName(*args) def getName(*args): return _kiki.KikiWorld_getName(*args) def init(*args): return _kiki.KikiWorld_init(*args) def setDisplayShadows(*args): return _kiki.KikiWorld_setDisplayShadows(*args) def setDisplayRaster(*args): return _kiki.KikiWorld_setDisplayRaster(*args) def setDisplayBorder(*args): return _kiki.KikiWorld_setDisplayBorder(*args) def setRasterSize(*args): return _kiki.KikiWorld_setRasterSize(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWorld_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWorld_setObjectColor) def changeCameraMode(*args): return _kiki.KikiWorld_changeCameraMode(*args) def getCameraMode(*args): return _kiki.KikiWorld_getCameraMode(*args) def setCameraMode(*args): return _kiki.KikiWorld_setCameraMode(*args) def getProjection(*args): return _kiki.KikiWorld_getProjection(*args) def addObjectAtPos(*args): return _kiki.KikiWorld_addObjectAtPos(*args) def setObjectAtPos(*args): return _kiki.KikiWorld_setObjectAtPos(*args) def unsetObject(*args): return _kiki.KikiWorld_unsetObject(*args) def removeObject(*args): return _kiki.KikiWorld_removeObject(*args) def deleteObject(*args): return _kiki.KikiWorld_deleteObject(*args) def deleteAllObjects(*args): return _kiki.KikiWorld_deleteAllObjects(*args) def deleteObjectsWithClassName(*args): return _kiki.KikiWorld_deleteObjectsWithClassName(*args) def getObjectWithName(*args): return _kiki.KikiWorld_getObjectWithName(*args) def moveObjectToPos(*args): return _kiki.KikiWorld_moveObjectToPos(*args) def objectWillMoveToPos(*args): return _kiki.KikiWorld_objectWillMoveToPos(*args) def objectMovedFromPos(*args): return _kiki.KikiWorld_objectMovedFromPos(*args) def getBotAtPos(*args): return _kiki.KikiWorld_getBotAtPos(*args) def getOccupantAtPos(*args): return _kiki.KikiWorld_getOccupantAtPos(*args) def getRealOccupantAtPos(*args): return _kiki.KikiWorld_getRealOccupantAtPos(*args) def getNearestValidPos(*args): return _kiki.KikiWorld_getNearestValidPos(*args) def isInvalidPos(*args): return _kiki.KikiWorld_isInvalidPos(*args) def isValidPos(*args): return _kiki.KikiWorld_isValidPos(*args) def isUnoccupiedPos(*args): return _kiki.KikiWorld_isUnoccupiedPos(*args) def isOccupiedPos(*args): return _kiki.KikiWorld_isOccupiedPos(*args) def posToIndex(*args): return _kiki.KikiWorld_posToIndex(*args) def indexToPos(*args): return _kiki.KikiWorld_indexToPos(*args) def getPickedPos(*args): return _kiki.KikiWorld_getPickedPos(*args) class KikiWorldPtr(KikiWorld): def __init__(self, this): _swig_setattr(self, KikiWorld, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWorld, 'thisown', 0) _swig_setattr(self, KikiWorld,self.__class__,KikiWorld) _kiki.KikiWorld_swigregister(KikiWorldPtr) KikiWorld_setObjectColor = _kiki.KikiWorld_setObjectColor class KEventHandler(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KEventHandler, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KEventHandler, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KEventHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def quit(*args): return _kiki.KEventHandler_quit(*args) __swig_getmethods__["getMouseState"] = lambda x: _kiki.KEventHandler_getMouseState if _newclass:getMouseState = staticmethod(_kiki.KEventHandler_getMouseState) __swig_getmethods__["getMousePos"] = lambda x: _kiki.KEventHandler_getMousePos if _newclass:getMousePos = staticmethod(_kiki.KEventHandler_getMousePos) __swig_getmethods__["getMouseDelta"] = lambda x: _kiki.KEventHandler_getMouseDelta if _newclass:getMouseDelta = staticmethod(_kiki.KEventHandler_getMouseDelta) __swig_getmethods__["getScreenSize"] = lambda x: _kiki.KEventHandler_getScreenSize if _newclass:getScreenSize = staticmethod(_kiki.KEventHandler_getScreenSize) __swig_getmethods__["setScreenSize"] = lambda x: _kiki.KEventHandler_setScreenSize if _newclass:setScreenSize = staticmethod(_kiki.KEventHandler_setScreenSize) __swig_getmethods__["getFullscreen"] = lambda x: _kiki.KEventHandler_getFullscreen if _newclass:getFullscreen = staticmethod(_kiki.KEventHandler_getFullscreen) __swig_getmethods__["setFullscreen"] = lambda x: _kiki.KEventHandler_setFullscreen if _newclass:setFullscreen = staticmethod(_kiki.KEventHandler_setFullscreen) __swig_getmethods__["getTime"] = lambda x: _kiki.KEventHandler_getTime if _newclass:getTime = staticmethod(_kiki.KEventHandler_getTime) def setWireframeMode(*args): return _kiki.KEventHandler_setWireframeMode(*args) def setDisplayFps(*args): return _kiki.KEventHandler_setDisplayFps(*args) def getDisplayFps(*args): return _kiki.KEventHandler_getDisplayFps(*args) class KEventHandlerPtr(KEventHandler): def __init__(self, this): _swig_setattr(self, KEventHandler, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KEventHandler, 'thisown', 0) _swig_setattr(self, KEventHandler,self.__class__,KEventHandler) _kiki.KEventHandler_swigregister(KEventHandlerPtr) KEventHandler_getMouseState = _kiki.KEventHandler_getMouseState KEventHandler_getMousePos = _kiki.KEventHandler_getMousePos KEventHandler_getMouseDelta = _kiki.KEventHandler_getMouseDelta KEventHandler_getScreenSize = _kiki.KEventHandler_getScreenSize KEventHandler_setScreenSize = _kiki.KEventHandler_setScreenSize KEventHandler_getFullscreen = _kiki.KEventHandler_getFullscreen KEventHandler_setFullscreen = _kiki.KEventHandler_setFullscreen KEventHandler_getTime = _kiki.KEventHandler_getTime class KikiController(KEventHandler,KikiActionObject): __swig_setmethods__ = {} for _s in [KEventHandler,KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiController, name, value) __swig_getmethods__ = {} for _s in [KEventHandler,KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiController, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiController instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["gui"] = _kiki.KikiController_gui_set __swig_getmethods__["gui"] = _kiki.KikiController_gui_get if _newclass:gui = property(_kiki.KikiController_gui_get, _kiki.KikiController_gui_set) __swig_setmethods__["sound"] = _kiki.KikiController_sound_set __swig_getmethods__["sound"] = _kiki.KikiController_sound_get if _newclass:sound = property(_kiki.KikiController_sound_get, _kiki.KikiController_sound_set) __swig_setmethods__["world"] = _kiki.KikiController_world_set __swig_getmethods__["world"] = _kiki.KikiController_world_get if _newclass:world = property(_kiki.KikiController_world_get, _kiki.KikiController_world_set) __swig_setmethods__["player"] = _kiki.KikiController_player_set __swig_getmethods__["player"] = _kiki.KikiController_player_get if _newclass:player = property(_kiki.KikiController_player_get, _kiki.KikiController_player_set) __swig_setmethods__["python"] = _kiki.KikiController_python_set __swig_getmethods__["python"] = _kiki.KikiController_python_get if _newclass:python = property(_kiki.KikiController_python_get, _kiki.KikiController_python_set) __swig_setmethods__["player_status"] = _kiki.KikiController_player_status_set __swig_getmethods__["player_status"] = _kiki.KikiController_player_status_get if _newclass:player_status = property(_kiki.KikiController_player_status_get, _kiki.KikiController_player_status_set) __swig_setmethods__["timer_event"] = _kiki.KikiController_timer_event_set __swig_getmethods__["timer_event"] = _kiki.KikiController_timer_event_get if _newclass:timer_event = property(_kiki.KikiController_timer_event_get, _kiki.KikiController_timer_event_set) def getPlayer(*args): return _kiki.KikiController_getPlayer(*args) def unmapMsTime(*args): return _kiki.KikiController_unmapMsTime(*args) def mapMsTime(*args): return _kiki.KikiController_mapMsTime(*args) def setSpeed(*args): return _kiki.KikiController_setSpeed(*args) def getSpeed(*args): return _kiki.KikiController_getSpeed(*args) def getKikiHome(*args): return _kiki.KikiController_getKikiHome(*args) def setGamma(*args): return _kiki.KikiController_setGamma(*args) def getGamma(*args): return _kiki.KikiController_getGamma(*args) def changeScreenSize(*args): return _kiki.KikiController_changeScreenSize(*args) def displayText(*args): return _kiki.KikiController_displayText(*args) def getLocalizedString(*args): return _kiki.KikiController_getLocalizedString(*args) def isDebugVersion(*args): return _kiki.KikiController_isDebugVersion(*args) class KikiControllerPtr(KikiController): def __init__(self, this): _swig_setattr(self, KikiController, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiController, 'thisown', 0) _swig_setattr(self, KikiController,self.__class__,KikiController) _kiki.KikiController_swigregister(KikiControllerPtr) replaceTabs = _kiki.replaceTabs class KWindow(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KWindow, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KWindow, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def isVisible(*args): return _kiki.KWindow_isVisible(*args) def setVisibility(*args): return _kiki.KWindow_setVisibility(*args) def toggleVisibility(*args): return _kiki.KWindow_toggleVisibility(*args) def maximize(*args): return _kiki.KWindow_maximize(*args) def show(*args): return _kiki.KWindow_show(*args) def hide(*args): return _kiki.KWindow_hide(*args) def close(*args): return _kiki.KWindow_close(*args) def setSize(*args): return _kiki.KWindow_setSize(*args) def setPosition(*args): return _kiki.KWindow_setPosition(*args) class KWindowPtr(KWindow): def __init__(self, this): _swig_setattr(self, KWindow, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KWindow, 'thisown', 0) _swig_setattr(self, KWindow,self.__class__,KWindow) _kiki.KWindow_swigregister(KWindowPtr) kiki = _kiki.kiki class KikiText(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiText, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) base_color = _kiki.KikiText_base_color bright_color = _kiki.KikiText_bright_color dark_color = _kiki.KikiText_dark_color def __init__(self, *args): _swig_setattr(self, KikiText, 'this', _kiki.new_KikiText(*args)) _swig_setattr(self, KikiText, 'thisown', 1) def setText(*args): return _kiki.KikiText_setText(*args) def getText(*args): return _kiki.KikiText_getText(*args) def clear(*args): return _kiki.KikiText_clear(*args) def isEmpty(*args): return _kiki.KikiText_isEmpty(*args) def addText(*args): return _kiki.KikiText_addText(*args) def getColor(*args): return _kiki.KikiText_getColor(*args) def setColor(*args): return _kiki.KikiText_setColor(*args) def setAlpha(*args): return _kiki.KikiText_setAlpha(*args) def isAnimated(*args): return _kiki.KikiText_isAnimated(*args) def setAnimated(*args): return _kiki.KikiText_setAnimated(*args) def isCentered(*args): return _kiki.KikiText_isCentered(*args) def setCentered(*args): return _kiki.KikiText_setCentered(*args) def getWidth(*args): return _kiki.KikiText_getWidth(*args) def getHeight(*args): return _kiki.KikiText_getHeight(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiText_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiText_setObjectColor) class KikiTextPtr(KikiText): def __init__(self, this): _swig_setattr(self, KikiText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiText, 'thisown', 0) _swig_setattr(self, KikiText,self.__class__,KikiText) _kiki.KikiText_swigregister(KikiTextPtr) KikiText_setObjectColor = _kiki.KikiText_setObjectColor class KikiGUI(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGUI, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGUI, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiGUI instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) class KikiGUIPtr(KikiGUI): def __init__(self, this): _swig_setattr(self, KikiGUI, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGUI, 'thisown', 0) _swig_setattr(self, KikiGUI,self.__class__,KikiGUI) _kiki.KikiGUI_swigregister(KikiGUIPtr) class KikiScreenText(KikiText,KikiActionObject): __swig_setmethods__ = {} for _s in [KikiText,KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiScreenText, name, value) __swig_getmethods__ = {} for _s in [KikiText,KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiScreenText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiScreenText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiScreenText, 'this', _kiki.new_KikiScreenText(*args)) _swig_setattr(self, KikiScreenText, 'thisown', 1) def addText(*args): return _kiki.KikiScreenText_addText(*args) def setText(*args): return _kiki.KikiScreenText_setText(*args) def show(*args): return _kiki.KikiScreenText_show(*args) def getProjection(*args): return _kiki.KikiScreenText_getProjection(*args) class KikiScreenTextPtr(KikiScreenText): def __init__(self, this): _swig_setattr(self, KikiScreenText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiScreenText, 'thisown', 0) _swig_setattr(self, KikiScreenText,self.__class__,KikiScreenText) _kiki.KikiScreenText_swigregister(KikiScreenTextPtr) class KikiMenu(KikiScreenText): __swig_setmethods__ = {} for _s in [KikiScreenText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMenu, name, value) __swig_getmethods__ = {} for _s in [KikiScreenText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMenu, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMenu, 'this', _kiki.new_KikiMenu(*args)) _swig_setattr(self, KikiMenu, 'thisown', 1) def addItem(*args): return _kiki.KikiMenu_addItem(*args) def setCurrentIndex(*args): return _kiki.KikiMenu_setCurrentIndex(*args) def setEscapeActive(*args): return _kiki.KikiMenu_setEscapeActive(*args) __swig_setmethods__["circular"] = _kiki.KikiMenu_circular_set __swig_getmethods__["circular"] = _kiki.KikiMenu_circular_get if _newclass:circular = property(_kiki.KikiMenu_circular_get, _kiki.KikiMenu_circular_set) class KikiMenuPtr(KikiMenu): def __init__(self, this): _swig_setattr(self, KikiMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMenu, 'thisown', 0) _swig_setattr(self, KikiMenu,self.__class__,KikiMenu) _kiki.KikiMenu_swigregister(KikiMenuPtr) class KikiColumnMenu(KikiMenu): __swig_setmethods__ = {} for _s in [KikiMenu]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiColumnMenu, name, value) __swig_getmethods__ = {} for _s in [KikiMenu]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiColumnMenu, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiColumnMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiColumnMenu, 'this', _kiki.new_KikiColumnMenu(*args)) _swig_setattr(self, KikiColumnMenu, 'thisown', 1) class KikiColumnMenuPtr(KikiColumnMenu): def __init__(self, this): _swig_setattr(self, KikiColumnMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiColumnMenu, 'thisown', 0) _swig_setattr(self, KikiColumnMenu,self.__class__,KikiColumnMenu) _kiki.KikiColumnMenu_swigregister(KikiColumnMenuPtr) class KikiScrollMenu(KikiColumnMenu): __swig_setmethods__ = {} for _s in [KikiColumnMenu]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiScrollMenu, name, value) __swig_getmethods__ = {} for _s in [KikiColumnMenu]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiScrollMenu, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiScrollMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiScrollMenu, 'this', _kiki.new_KikiScrollMenu(*args)) _swig_setattr(self, KikiScrollMenu, 'thisown', 1) def getCurrentIndex(*args): return _kiki.KikiScrollMenu_getCurrentIndex(*args) def addItem(*args): return _kiki.KikiScrollMenu_addItem(*args) class KikiScrollMenuPtr(KikiScrollMenu): def __init__(self, this): _swig_setattr(self, KikiScrollMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiScrollMenu, 'thisown', 0) _swig_setattr(self, KikiScrollMenu,self.__class__,KikiScrollMenu) _kiki.KikiScrollMenu_swigregister(KikiScrollMenuPtr) class KikiPageText(KikiScreenText): __swig_setmethods__ = {} for _s in [KikiScreenText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPageText, name, value) __swig_getmethods__ = {} for _s in [KikiScreenText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPageText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiPageText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiPageText, 'this', _kiki.new_KikiPageText(*args)) _swig_setattr(self, KikiPageText, 'thisown', 1) class KikiPageTextPtr(KikiPageText): def __init__(self, this): _swig_setattr(self, KikiPageText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPageText, 'thisown', 0) _swig_setattr(self, KikiPageText,self.__class__,KikiPageText) _kiki.KikiPageText_swigregister(KikiPageTextPtr) class KikiFace(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiFace, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiFace, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiFace instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) PX = _kiki.KikiFace_PX X = _kiki.KikiFace_X PY = _kiki.KikiFace_PY Y = _kiki.KikiFace_Y PZ = _kiki.KikiFace_PZ Z = _kiki.KikiFace_Z NX = _kiki.KikiFace_NX NY = _kiki.KikiFace_NY NZ = _kiki.KikiFace_NZ class KikiFacePtr(KikiFace): def __init__(self, this): _swig_setattr(self, KikiFace, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiFace, 'thisown', 0) _swig_setattr(self, KikiFace,self.__class__,KikiFace) _kiki.KikiFace_swigregister(KikiFacePtr) class KikiWire(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWire, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWire, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiWire instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) UP = _kiki.KikiWire_UP RIGHT = _kiki.KikiWire_RIGHT DOWN = _kiki.KikiWire_DOWN VERTICAL = _kiki.KikiWire_VERTICAL LEFT = _kiki.KikiWire_LEFT HORIZONTAL = _kiki.KikiWire_HORIZONTAL ALL = _kiki.KikiWire_ALL def __init__(self, *args): _swig_setattr(self, KikiWire, 'this', _kiki.new_KikiWire(*args)) _swig_setattr(self, KikiWire, 'thisown', 1) def setActive(*args): return _kiki.KikiWire_setActive(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWire_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWire_setObjectColor) class KikiWirePtr(KikiWire): def __init__(self, this): _swig_setattr(self, KikiWire, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWire, 'thisown', 0) _swig_setattr(self, KikiWire,self.__class__,KikiWire) _kiki.KikiWire_swigregister(KikiWirePtr) KikiWire_setObjectColor = _kiki.KikiWire_setObjectColor kikiObjectToWire = _kiki.kikiObjectToWire class KikiGear(KikiObject,KikiFace): __swig_setmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGear, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGear, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiGear instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiGear, 'this', _kiki.new_KikiGear(*args)) _swig_setattr(self, KikiGear, 'thisown', 1) def setActive(*args): return _kiki.KikiGear_setActive(*args) def updateActive(*args): return _kiki.KikiGear_updateActive(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGear_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGear_setObjectColor) class KikiGearPtr(KikiGear): def __init__(self, this): _swig_setattr(self, KikiGear, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGear, 'thisown', 0) _swig_setattr(self, KikiGear,self.__class__,KikiGear) _kiki.KikiGear_swigregister(KikiGearPtr) KikiGear_setObjectColor = _kiki.KikiGear_setObjectColor kikiObjectToGear = _kiki.kikiObjectToGear class KikiValve(KikiObject,KikiFace): __swig_setmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiValve, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiValve, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiValve instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiValve, 'this', _kiki.new_KikiValve(*args)) _swig_setattr(self, KikiValve, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiValve_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiValve_setObjectColor) class KikiValvePtr(KikiValve): def __init__(self, this): _swig_setattr(self, KikiValve, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiValve, 'thisown', 0) _swig_setattr(self, KikiValve,self.__class__,KikiValve) _kiki.KikiValve_swigregister(KikiValvePtr) KikiValve_setObjectColor = _kiki.KikiValve_setObjectColor kikiObjectToValve = _kiki.kikiObjectToValve class KikiMotorCylinder(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMotorCylinder, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMotorCylinder, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMotorCylinder instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMotorCylinder, 'this', _kiki.new_KikiMotorCylinder(*args)) _swig_setattr(self, KikiMotorCylinder, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMotorCylinder_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMotorCylinder_setObjectColor) class KikiMotorCylinderPtr(KikiMotorCylinder): def __init__(self, this): _swig_setattr(self, KikiMotorCylinder, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMotorCylinder, 'thisown', 0) _swig_setattr(self, KikiMotorCylinder,self.__class__,KikiMotorCylinder) _kiki.KikiMotorCylinder_swigregister(KikiMotorCylinderPtr) KikiMotorCylinder_setObjectColor = _kiki.KikiMotorCylinder_setObjectColor class KikiMotorGear(KikiGear): __swig_setmethods__ = {} for _s in [KikiGear]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMotorGear, name, value) __swig_getmethods__ = {} for _s in [KikiGear]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMotorGear, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMotorGear instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMotorGear, 'this', _kiki.new_KikiMotorGear(*args)) _swig_setattr(self, KikiMotorGear, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMotorGear_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMotorGear_setObjectColor) class KikiMotorGearPtr(KikiMotorGear): def __init__(self, this): _swig_setattr(self, KikiMotorGear, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMotorGear, 'thisown', 0) _swig_setattr(self, KikiMotorGear,self.__class__,KikiMotorGear) _kiki.KikiMotorGear_swigregister(KikiMotorGearPtr) KikiMotorGear_setObjectColor = _kiki.KikiMotorGear_setObjectColor class KikiGenerator(KikiGear): __swig_setmethods__ = {} for _s in [KikiGear]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGenerator, name, value) __swig_getmethods__ = {} for _s in [KikiGear]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGenerator, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiGenerator instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiGenerator, 'this', _kiki.new_KikiGenerator(*args)) _swig_setattr(self, KikiGenerator, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGenerator_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGenerator_setObjectColor) class KikiGeneratorPtr(KikiGenerator): def __init__(self, this): _swig_setattr(self, KikiGenerator, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGenerator, 'thisown', 0) _swig_setattr(self, KikiGenerator,self.__class__,KikiGenerator) _kiki.KikiGenerator_swigregister(KikiGeneratorPtr) KikiGenerator_setObjectColor = _kiki.KikiGenerator_setObjectColor class KikiLight(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiLight, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiLight, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiLight instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiLight, 'this', _kiki.new_KikiLight(*args)) _swig_setattr(self, KikiLight, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiLight_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiLight_setObjectColor) class KikiLightPtr(KikiLight): def __init__(self, this): _swig_setattr(self, KikiLight, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiLight, 'thisown', 0) _swig_setattr(self, KikiLight,self.__class__,KikiLight) _kiki.KikiLight_swigregister(KikiLightPtr) KikiLight_setObjectColor = _kiki.KikiLight_setObjectColor kikiObjectToLight = _kiki.kikiObjectToLight class KikiCellText(KikiObject,KikiText): __swig_setmethods__ = {} for _s in [KikiObject,KikiText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiCellText, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiCellText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiCellText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiCellText, 'this', _kiki.new_KikiCellText(*args)) _swig_setattr(self, KikiCellText, 'thisown', 1) def setOffset(*args): return _kiki.KikiCellText_setOffset(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiCellText_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiCellText_setObjectColor) class KikiCellTextPtr(KikiCellText): def __init__(self, this): _swig_setattr(self, KikiCellText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiCellText, 'thisown', 0) _swig_setattr(self, KikiCellText,self.__class__,KikiCellText) _kiki.KikiCellText_swigregister(KikiCellTextPtr) KikiCellText_setObjectColor = _kiki.KikiCellText_setObjectColor kikiObjectToCellText = _kiki.kikiObjectToCellText class KikiStone(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiStone, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiStone, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiStone instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiStone, 'this', _kiki.new_KikiStone(*args)) _swig_setattr(self, KikiStone, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiStone_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiStone_setObjectColor) class KikiStonePtr(KikiStone): def __init__(self, this): _swig_setattr(self, KikiStone, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiStone, 'thisown', 0) _swig_setattr(self, KikiStone,self.__class__,KikiStone) _kiki.KikiStone_swigregister(KikiStonePtr) KikiStone_setObjectColor = _kiki.KikiStone_setObjectColor kikiObjectToStone = _kiki.kikiObjectToStone class KikiWireStone(KikiStone): __swig_setmethods__ = {} for _s in [KikiStone]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWireStone, name, value) __swig_getmethods__ = {} for _s in [KikiStone]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWireStone, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiWireStone instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiWireStone, 'this', _kiki.new_KikiWireStone(*args)) _swig_setattr(self, KikiWireStone, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWireStone_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWireStone_setObjectColor) class KikiWireStonePtr(KikiWireStone): def __init__(self, this): _swig_setattr(self, KikiWireStone, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWireStone, 'thisown', 0) _swig_setattr(self, KikiWireStone,self.__class__,KikiWireStone) _kiki.KikiWireStone_swigregister(KikiWireStonePtr) KikiWireStone_setObjectColor = _kiki.KikiWireStone_setObjectColor kikiObjectToWireStone = _kiki.kikiObjectToWireStone class KikiWall(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWall, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWall, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiWall instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiWall, 'this', _kiki.new_KikiWall(*args)) _swig_setattr(self, KikiWall, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWall_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWall_setObjectColor) class KikiWallPtr(KikiWall): def __init__(self, this): _swig_setattr(self, KikiWall, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWall, 'thisown', 0) _swig_setattr(self, KikiWall,self.__class__,KikiWall) _kiki.KikiWall_swigregister(KikiWallPtr) KikiWall_setObjectColor = _kiki.KikiWall_setObjectColor kikiObjectToWall = _kiki.kikiObjectToWall class KikiBomb(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBomb, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBomb, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiBomb instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiBomb, 'this', _kiki.new_KikiBomb(*args)) _swig_setattr(self, KikiBomb, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBomb_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBomb_setObjectColor) class KikiBombPtr(KikiBomb): def __init__(self, this): _swig_setattr(self, KikiBomb, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBomb, 'thisown', 0) _swig_setattr(self, KikiBomb,self.__class__,KikiBomb) _kiki.KikiBomb_swigregister(KikiBombPtr) KikiBomb_setObjectColor = _kiki.KikiBomb_setObjectColor kikiObjectToBomb = _kiki.kikiObjectToBomb class KikiSwitch(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSwitch, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiSwitch, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiSwitch instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiSwitch, 'this', _kiki.new_KikiSwitch(*args)) _swig_setattr(self, KikiSwitch, 'thisown', 1) def toggle(*args): return _kiki.KikiSwitch_toggle(*args) def setActive(*args): return _kiki.KikiSwitch_setActive(*args) def isActive(*args): return _kiki.KikiSwitch_isActive(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiSwitch_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiSwitch_setObjectColor) class KikiSwitchPtr(KikiSwitch): def __init__(self, this): _swig_setattr(self, KikiSwitch, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSwitch, 'thisown', 0) _swig_setattr(self, KikiSwitch,self.__class__,KikiSwitch) _kiki.KikiSwitch_swigregister(KikiSwitchPtr) KikiSwitch_setObjectColor = _kiki.KikiSwitch_setObjectColor kikiObjectToSwitch = _kiki.kikiObjectToSwitch class KikiGate(KikiSwitch): __swig_setmethods__ = {} for _s in [KikiSwitch]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGate, name, value) __swig_getmethods__ = {} for _s in [KikiSwitch]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGate, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiGate instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiGate, 'this', _kiki.new_KikiGate(*args)) _swig_setattr(self, KikiGate, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGate_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGate_setObjectColor) class KikiGatePtr(KikiGate): def __init__(self, this): _swig_setattr(self, KikiGate, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGate, 'thisown', 0) _swig_setattr(self, KikiGate,self.__class__,KikiGate) _kiki.KikiGate_swigregister(KikiGatePtr) KikiGate_setObjectColor = _kiki.KikiGate_setObjectColor kikiObjectToGate = _kiki.kikiObjectToGate class KikiAtom(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiAtom, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiAtom, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiAtom instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def setValue(*args): return _kiki.KikiAtom_setValue(*args) def getValue(*args): return _kiki.KikiAtom_getValue(*args) class KikiAtomPtr(KikiAtom): def __init__(self, this): _swig_setattr(self, KikiAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiAtom, 'thisown', 0) _swig_setattr(self, KikiAtom,self.__class__,KikiAtom) _kiki.KikiAtom_swigregister(KikiAtomPtr) class KikiMovesAtom(KikiAtom): __swig_setmethods__ = {} for _s in [KikiAtom]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMovesAtom, name, value) __swig_getmethods__ = {} for _s in [KikiAtom]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMovesAtom, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiMovesAtom instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMovesAtom_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMovesAtom_setObjectColor) class KikiMovesAtomPtr(KikiMovesAtom): def __init__(self, this): _swig_setattr(self, KikiMovesAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMovesAtom, 'thisown', 0) _swig_setattr(self, KikiMovesAtom,self.__class__,KikiMovesAtom) _kiki.KikiMovesAtom_swigregister(KikiMovesAtomPtr) KikiMovesAtom_setObjectColor = _kiki.KikiMovesAtom_setObjectColor class KikiValueAtom(KikiAtom): __swig_setmethods__ = {} for _s in [KikiAtom]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiValueAtom, name, value) __swig_getmethods__ = {} for _s in [KikiAtom]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiValueAtom, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiValueAtom instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiValueAtom, 'this', _kiki.new_KikiValueAtom(*args)) _swig_setattr(self, KikiValueAtom, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiValueAtom_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiValueAtom_setObjectColor) class KikiValueAtomPtr(KikiValueAtom): def __init__(self, this): _swig_setattr(self, KikiValueAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiValueAtom, 'thisown', 0) _swig_setattr(self, KikiValueAtom,self.__class__,KikiValueAtom) _kiki.KikiValueAtom_swigregister(KikiValueAtomPtr) KikiValueAtom_setObjectColor = _kiki.KikiValueAtom_setObjectColor class KikiSpikes(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSpikes, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiSpikes, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiSpikes instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiSpikes, 'this', _kiki.new_KikiSpikes(*args)) _swig_setattr(self, KikiSpikes, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiSpikes_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiSpikes_setObjectColor) class KikiSpikesPtr(KikiSpikes): def __init__(self, this): _swig_setattr(self, KikiSpikes, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSpikes, 'thisown', 0) _swig_setattr(self, KikiSpikes,self.__class__,KikiSpikes) _kiki.KikiSpikes_swigregister(KikiSpikesPtr) KikiSpikes_setObjectColor = _kiki.KikiSpikes_setObjectColor kikiObjectToSpikes = _kiki.kikiObjectToSpikes class KikiBullet(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBullet, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBullet, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBullet instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBullet_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBullet_setObjectColor) class KikiBulletPtr(KikiBullet): def __init__(self, this): _swig_setattr(self, KikiBullet, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBullet, 'thisown', 0) _swig_setattr(self, KikiBullet,self.__class__,KikiBullet) _kiki.KikiBullet_swigregister(KikiBulletPtr) KikiBullet_setObjectColor = _kiki.KikiBullet_setObjectColor class KConsole(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KConsole, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KConsole, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KConsole instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["_print"] = lambda x: _kiki.KConsole__print if _newclass:_print = staticmethod(_kiki.KConsole__print) __swig_getmethods__["write"] = lambda x: _kiki.KConsole_write if _newclass:write = staticmethod(_kiki.KConsole_write) __swig_getmethods__["printError"] = lambda x: _kiki.KConsole_printError if _newclass:printError = staticmethod(_kiki.KConsole_printError) __swig_getmethods__["getConsole"] = lambda x: _kiki.KConsole_getConsole if _newclass:getConsole = staticmethod(_kiki.KConsole_getConsole) def clear(*args): return _kiki.KConsole_clear(*args) def out (self, *args): _kiki.KConsole__print(" ".join(map(str, args))) class KConsolePtr(KConsole): def __init__(self, this): _swig_setattr(self, KConsole, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KConsole, 'thisown', 0) _swig_setattr(self, KConsole,self.__class__,KConsole) _kiki.KConsole_swigregister(KConsolePtr) KConsole__print = _kiki.KConsole__print KConsole_write = _kiki.KConsole_write KConsole_printError = _kiki.KConsole_printError KConsole_getConsole = _kiki.KConsole_getConsole class KikiPythonWidget(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPythonWidget, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPythonWidget, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPythonWidget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["cursorPos"] = _kiki.KikiPythonWidget_cursorPos_set __swig_getmethods__["cursorPos"] = _kiki.KikiPythonWidget_cursorPos_get if _newclass:cursorPos = property(_kiki.KikiPythonWidget_cursorPos_get, _kiki.KikiPythonWidget_cursorPos_set) __swig_setmethods__["selectionPos"] = _kiki.KikiPythonWidget_selectionPos_set __swig_getmethods__["selectionPos"] = _kiki.KikiPythonWidget_selectionPos_get if _newclass:selectionPos = property(_kiki.KikiPythonWidget_selectionPos_get, _kiki.KikiPythonWidget_selectionPos_set) def getTextRows(*args): return _kiki.KikiPythonWidget_getTextRows(*args) def getTextCols(*args): return _kiki.KikiPythonWidget_getTextCols(*args) def getTextSize(*args): return _kiki.KikiPythonWidget_getTextSize(*args) def getColumnWidth(*args): return _kiki.KikiPythonWidget_getColumnWidth(*args) def getRowHeight(*args): return _kiki.KikiPythonWidget_getRowHeight(*args) def getPythonWindow(*args): return _kiki.KikiPythonWidget_getPythonWindow(*args) def displayStringAtPos(*args): return _kiki.KikiPythonWidget_displayStringAtPos(*args) class KikiPythonWidgetPtr(KikiPythonWidget): def __init__(self, this): _swig_setattr(self, KikiPythonWidget, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPythonWidget, 'thisown', 0) _swig_setattr(self, KikiPythonWidget,self.__class__,KikiPythonWidget) _kiki.KikiPythonWidget_swigregister(KikiPythonWidgetPtr) class KikiPython(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPython, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPython, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPython instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def getPythonWidget(*args): return _kiki.KikiPython_getPythonWidget(*args) def setScrollBarUnits(*args): return _kiki.KikiPython_setScrollBarUnits(*args) def requestUserInput(*args): return _kiki.KikiPython_requestUserInput(*args) def setTitle(*args): return _kiki.KikiPython_setTitle(*args) def setStatus(*args): return _kiki.KikiPython_setStatus(*args) def setInput(*args): return _kiki.KikiPython_setInput(*args) def executeFile(*args): return _kiki.KikiPython_executeFile(*args) class KikiPythonPtr(KikiPython): def __init__(self, this): _swig_setattr(self, KikiPython, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPython, 'thisown', 0) _swig_setattr(self, KikiPython,self.__class__,KikiPython) _kiki.KikiPython_swigregister(KikiPythonPtr) kiki/SWIG/KikiAction.i0000666000000000000000000000176007644706117013477 0ustar rootroot // -------------------------------------------------------------------------------------------------------- class KikiAction { public: // ........................................................................ PUBLIC enum { ONCE, CONTINUOUS, REPEAT }; KikiAction ( KikiObject * object, int id, const std::string & name, int duration = 0, int mode = KikiAction::ONCE ); KikiAction ( KikiObject * object, int mode = KikiAction::ONCE ); int getId () const; const std::string & getName () const; float getRelativeTime (); float getRelativeDelta (); int getDuration () const; void setDuration ( int d ); }; kiki/SWIG/KikiBot.i0000666000000000000000000000266207644706117013010 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiBotStatus { public: // ........................................................................ PUBLIC int getMoves () const; void setMoves ( int moves ); void addMoves ( int moves ); int getMinMoves () const; void setMinMoves ( int moves ); /* float getEnergy () const; float getHealth () const; void setHealth ( float health ); void setEnergy ( float energy ); void addHealth ( float health ); void addEnergy ( float energy ); */ }; // __________________________________________________________________________________________________ %nodefault; class KikiBotFume : public KikiObject { public: // ........................................................................ PUBLIC static void setObjectColor ( const char * color_name, const KColor & color ); }; // __________________________________________________________________________________________________ %nodefault; class KikiBot : public KikiObject { public: // ........................................................................ PUBLIC bool isDead () const; KikiPos getDown (); KikiPos getUp (); KikiPos getDir (); void setMove ( bool ); KikiBotStatus * getStatus (); };kiki/SWIG/KikiController.i0000666000000000000000000000313110334732244014365 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiController : public KEventHandler, public KikiActionObject { public: // ........................................................................ PUBLIC KikiGUI * gui; KikiSound * sound; KikiWorld * world; KikiPlayer * player; KikiPython * python; KikiStatusDisplay * player_status; KikiEvent * timer_event; KikiPlayer * getPlayer (); int unmapMsTime ( int ms ); int mapMsTime ( int ms ); void setSpeed ( int s ); int getSpeed () const; std::string getKikiHome (); void setGamma ( int g ); int getGamma () const; bool changeScreenSize (int width, int height, bool fullscreen = false); void displayText ( const std::string & text, int color ); std::string getLocalizedString ( const std::string & key ); bool isDebugVersion (); }; // __________________________________________________________________________________________________ extern KikiController Controller; // __________________________________________________________________________________________________ %{ const char * replaceTabs ( const std::string & str, int tabWidth ) { static std::string tmpStr; tmpStr = str; kStringReplaceTabs (tmpStr, tabWidth); return tmpStr.c_str(); } %} const char * replaceTabs ( const std::string & str, int tabWidth ); kiki/SWIG/KikiEvent.i0000666000000000000000000000123407644706117013337 0ustar rootroot // -------------------------------------------------------------------------------------------------------- %nodefault; class KikiEvent { public: // ........................................................................ PUBLIC KikiEvent ( KikiObject *, const std::string & name ); void addAction ( KikiAction * action ); void removeAction ( KikiAction * action ); void removeAllActions (); void removeActionsOfObject ( KikiObject * object ); void removeActionWithName ( const std::string & actionName ); void triggerActions (); unsigned int getTime () const; }; kiki/SWIG/KikiGUI.i0000666000000000000000000000472010326704367012701 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiGUI : public KWindow { }; // __________________________________________________________________________________________________ %nodefault; class KikiScreenText : public KikiText, public KikiActionObject { public: // ........................................................................ PUBLIC KikiScreenText (); void addText ( const std::string & text, float scaleFactor = 1.0 ); void setText ( const std::string & text, int colorIndex = 0 ); void show (); KProjection * getProjection (); }; // __________________________________________________________________________________________________ %nodefault; class KikiMenu : public KikiScreenText { public: // ........................................................................ PUBLIC KikiMenu ( int selectedItem = -1 ); virtual void addItem ( const std::string & itemText, KikiAction * action = NULL, bool option = false ); virtual void setCurrentIndex (int index); void setEscapeActive ( bool active = true ); bool circular; }; // __________________________________________________________________________________________________ %nodefault; class KikiColumnMenu : public KikiMenu { public: // ........................................................................ PUBLIC KikiColumnMenu ( int maxColumnItems = 10, int selectedItem = -1 ); }; // __________________________________________________________________________________________________ %nodefault; class KikiScrollMenu : public KikiColumnMenu { public: // ........................................................................ PUBLIC KikiScrollMenu ( int rows = 5, int columns = 4, int selectedItem = -1 ); int getCurrentIndex(); virtual void addItem ( const std::string & itemText, KikiAction * action = 0, bool option = false ); }; // __________________________________________________________________________________________________ %nodefault; class KikiPageText : public KikiScreenText { public: // ........................................................................ PUBLIC KikiPageText ( const std::string & pageText, bool nextPage, bool previousPage = true ); }; kiki/SWIG/KikiItems.i0000666000000000000000000003021610320250511013312 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiFace { public: // ........................................................................ PUBLIC enum { PX, X=0, PY, Y=1, PZ, Z=2, NX, NY, NZ }; }; // __________________________________________________________________________________________________ %nodefault; class KikiWire : public KikiObject { public: // ........................................................................ PUBLIC enum { UP=1, RIGHT, DOWN=4, VERTICAL, LEFT=8, HORIZONTAL=10, ALL=15 }; KikiWire ( int face = KikiFace::PZ, int directions = ALL ); virtual void setActive ( bool active = true ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiWire * kikiObjectToWire ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiGear : public KikiObject, public KikiFace { public: // ........................................................................ PUBLIC KikiGear ( int face = KikiFace::PZ ); void setActive ( bool active = true ); void updateActive (); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiGear * kikiObjectToGear ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiValve : public KikiObject, public KikiFace { public: // ........................................................................ PUBLIC KikiValve ( int face = KikiFace::PZ ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiValve * kikiObjectToValve ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiMotorCylinder : public KikiObject { public: // ........................................................................ PUBLIC KikiMotorCylinder ( int face = KikiFace::PZ ); static void setObjectColor ( const char * color_name, const KColor & color ); }; // __________________________________________________________________________________________________ %nodefault; class KikiMotorGear : public KikiGear { public: // ........................................................................ PUBLIC KikiMotorGear ( int face = KikiFace::PZ ); static void setObjectColor ( const char * color_name, const KColor & color ); }; // __________________________________________________________________________________________________ %nodefault; class KikiGenerator : public KikiGear { public: // ........................................................................ PUBLIC KikiGenerator ( int face = KikiFace::PZ ); static void setObjectColor ( const char * color_name, const KColor & color ); }; // __________________________________________________________________________________________________ %nodefault; class KikiLight : public KikiObject { public: // ........................................................................ PUBLIC KikiLight (); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiLight * kikiObjectToLight ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiCellText : public KikiObject, public KikiText { public: // ........................................................................ PUBLIC KikiCellText ( const std::string & text, float cell_height = 1.0, bool center = true, int colorIndex = 0 ); void setOffset ( const KVector & ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiCellText * kikiObjectToCellText ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiStone : public KikiObject { public: // ........................................................................ PUBLIC KikiStone (KColor * color = NULL, bool slippery = false); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiStone * kikiObjectToStone ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiWireStone : public KikiStone { public: // ........................................................................ PUBLIC KikiWireStone (); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiWireStone * kikiObjectToWireStone ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiWall : public KikiObject { public: // ........................................................................ PUBLIC KikiWall (); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiWall * kikiObjectToWall ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiBomb : public KikiObject { public: // ........................................................................ PUBLIC KikiBomb (); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiBomb * kikiObjectToBomb ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiSwitch : public KikiObject { public: // ........................................................................ PUBLIC KikiSwitch ( bool on = false ); void toggle (); void setActive ( bool active ); bool isActive () const; static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiSwitch * kikiObjectToSwitch ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiGate : public KikiSwitch { public: // ........................................................................ PUBLIC KikiGate ( bool open = false ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiGate * kikiObjectToGate ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiAtom : public KikiObject { public: // ........................................................................ PUBLIC void setValue ( float value ); float getValue () const; }; // __________________________________________________________________________________________________ %nodefault; class KikiMovesAtom : public KikiAtom { public: // ........................................................................ PUBLIC static void setObjectColor ( const char * color_name, const KColor & color ); }; // __________________________________________________________________________________________________ /* %nodefault; class KikiHealthAtom : public KikiAtom { public: // ........................................................................ PUBLIC KikiHealthAtom ( int neutrons = 9 ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiHealthAtom * kikiObjectToHealthAtom ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiEnergyAtom : public KikiAtom { public: // ........................................................................ PUBLIC KikiEnergyAtom ( int neutrons = 9 ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiEnergyAtom * kikiObjectToEnergyAtom ( KikiObject * o ) { return reinterpret_cast(o); } %} */ // __________________________________________________________________________________________________ class KikiValueAtom : public KikiAtom { public: // ........................................................................ PUBLIC KikiValueAtom ( float range_start = 0.0, float range_end = 1.0, float start_value = 1.0, int levels = 9 ); static void setObjectColor ( const char * color_name, const KColor & color ); }; // __________________________________________________________________________________________________ %nodefault; class KikiSpikes : public KikiObject { public: // ........................................................................ PUBLIC KikiSpikes ( int face = KikiFace::PZ ); static void setObjectColor ( const char * color_name, const KColor & color ); }; %inline %{ KikiSpikes * kikiObjectToSpikes ( KikiObject * o ) { return reinterpret_cast(o); } %} // __________________________________________________________________________________________________ %nodefault; class KikiBullet : public KikiObject { public: // ........................................................................ PUBLIC static void setObjectColor ( const char * color_name, const KColor & color ); }; kiki/SWIG/KikiMutant.i0000666000000000000000000000062207644706117013526 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiMutant : public KikiBot { public: // ........................................................................ PUBLIC KikiMutant (); void die (); static void setObjectColor ( const char * color_name, const KColor & color ); }; kiki/SWIG/KikiObject.i0000666000000000000000000000307407644706117013470 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiActionObject { public: // ........................................................................ PUBLIC void addAction ( KikiAction * action ); void removeAction ( KikiAction * action ); void startTimedAction ( KikiAction * action, int duration = -1 ); void startTimer ( int duration, int mode ); KikiAction * getActionWithName ( const std::string & name ); KikiAction * getActionWithId ( int actionId ); int addEventWithName ( const std::string & ); KikiEvent * getEventWithName ( const std::string & name ); KikiEvent * getEventWithId ( int actionId ); const char * getClassName () const; }; // __________________________________________________________________________________________________ %nodefault; class KikiObject : public KikiActionObject { public: // ........................................................................ PUBLIC void setName ( const std::string & ); std::string getName () const; KikiPos getPos () const; virtual void setPosition ( const KVector & v ); KVector getPosition () const; void setOrientation ( const KQuaternion & q ); KQuaternion getOrientation () const; void setCurrentOrientation ( const KQuaternion & q ); KQuaternion getCurrentOrientation () const; virtual bool isSpaceEgoistic () const; const char * getClassName () const; }; kiki/SWIG/KikiPlayer.i0000666000000000000000000000311207644706117013507 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiStatusDisplay { public: // ........................................................................ PUBLIC void show (); void hide (); }; // __________________________________________________________________________________________________ %nodefault; class KikiPlayback { public: // ........................................................................ PUBLIC static void start ( const std::string filename ); static void stop (); }; // __________________________________________________________________________________________________ %nodefault; class KikiPlayer : public KikiBot { public: // ........................................................................ PUBLIC void die (); void reborn (); void reset (); void startRecorder ( const std::string & file ); void saveRecorder (); KProjection * getProjection (); bool handleKey ( const KKey & key ); bool handleKeyRelease ( const KKey & key ); void recordKeyForAction ( const std::string & actionName ); static std::string getActionForKey ( const std::string & keyName ); static std::string getKeyForAction ( const std::string & actionName ); static void setKeyForAction ( const std::string & keyName, const std::string & actionName ); static void setObjectColor ( const char * color_name, const KColor & color ); }; kiki/SWIG/KikiPy.i0000666000000000000000000000116107644706117012645 0ustar rootroot%module kiki %{ #include "Kiki.h" %} // ......................................................... typemaps %include "KikiPyTypemaps.i" // ......................................................... export %include KikiTypes.i %include KikiAction.i %include KikiPyAction.i %include KikiEvent.i %include KikiObject.i %include KikiBot.i %include KikiPlayer.i %include KikiMutant.i %include KikiSound.i %include KikiWorld.i %include KEventHandler.i %include KikiController.i %include KWindow.i %include KikiText.i %include KikiGUI.i %include KikiItems.i %include KConsole.i %include KikiPython.i kiki/SWIG/KikiPy_wrap.cpp0000666000000000000000000207012610334735415014232 0ustar rootroot/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 1.3.25 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make * changes to this file unless you know what you are doing--modify the SWIG * interface file instead. * ----------------------------------------------------------------------------- */ #define SWIGPYTHON #ifdef __cplusplus template class SwigValueWrapper { T *tt; public: SwigValueWrapper() : tt(0) { } SwigValueWrapper(const SwigValueWrapper& rhs) : tt(new T(*rhs.tt)) { } SwigValueWrapper(const T& t) : tt(new T(t)) { } ~SwigValueWrapper() { delete tt; } SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } operator T&() const { return *tt; } T *operator&() { return tt; } private: SwigValueWrapper& operator=(const SwigValueWrapper& rhs); }; #endif /*********************************************************************** * * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ************************************************************************/ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) || defined(__ICC) # define SWIGUNUSED __attribute__ ((unused)) # else # define SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods for Windows DLLs */ #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # define SWIGEXPORT # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif #include /*********************************************************************** * swigrun.swg * * This file contains generic CAPI SWIG runtime support for pointer * type checking. * ************************************************************************/ /* This should only be incremented when either the layout of swig_type_info changes, or for whatever reason, the runtime changes incompatibly */ #define SWIG_RUNTIME_VERSION "2" /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ #ifdef SWIG_TYPE_TABLE # define SWIG_QUOTE_STRING(x) #x # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) #else # define SWIG_TYPE_TABLE_NAME #endif /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the swig runtime code. In 99.9% of the cases, swig just needs to declare them as 'static'. But only do this if is strictly necessary, ie, if you have problems with your compiler or so. */ #ifndef SWIGRUNTIME # define SWIGRUNTIME SWIGINTERN #endif #ifndef SWIGRUNTIMEINLINE # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE #endif #include #ifdef __cplusplus extern "C" { #endif typedef void *(*swig_converter_func)(void *); typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store inforomation on one type */ typedef struct swig_type_info { const char *name; /* mangled name of this type */ const char *str; /* human readable name of this type */ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ struct swig_cast_info *cast; /* linked list of types that can cast into this type */ void *clientdata; /* language specific type data */ } swig_type_info; /* Structure to store a type and conversion function used for casting */ typedef struct swig_cast_info { swig_type_info *type; /* pointer to type that is equivalent to this type */ swig_converter_func converter; /* function to cast the void pointers */ struct swig_cast_info *next; /* pointer to next cast in linked list */ struct swig_cast_info *prev; /* pointer to the previous cast */ } swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ typedef struct swig_module_info { swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ size_t size; /* Number of types in this module */ struct swig_module_info *next; /* Pointer to next element in circularly linked list */ swig_type_info **type_initial; /* Array of initially generated type structures */ swig_cast_info **cast_initial; /* Array of initially generated casting structures */ void *clientdata; /* Language specific module data */ } swig_module_info; /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { while ((*f1 == ' ') && (f1 != l1)) ++f1; while ((*f2 == ' ') && (f2 != l2)) ++f2; if (*f1 != *f2) return (int)(*f1 - *f2); } return (l1 - f1) - (l2 - f2); } /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; } /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int SWIG_TypeCompare(const char *nb, const char *tb) { int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; } /* think of this as a c++ template<> or a scheme macro */ #define SWIG_TypeCheck_Template(comparison, ty) \ if (ty) { \ swig_cast_info *iter = ty->cast; \ while (iter) { \ if (comparison) { \ if (iter == ty->cast) return iter; \ /* Move iter to the top of the linked list */ \ iter->prev->next = iter->next; \ if (iter->next) \ iter->next->prev = iter->prev; \ iter->next = ty->cast; \ iter->prev = 0; \ if (ty->cast) ty->cast->prev = iter; \ ty->cast = iter; \ return iter; \ } \ iter = iter->next; \ } \ } \ return 0 /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); } /* Same as previous function, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) { SWIG_TypeCheck_Template(iter->type == from, into); } /* Cast a pointer up an inheritance hierarchy */ SWIGRUNTIMEINLINE void * SWIG_TypeCast(swig_cast_info *ty, void *ptr) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr); } /* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; while (ty && (ty->dcast)) { ty = (*ty->dcast)(ptr); if (ty) lastty = ty; } return lastty; } /* Return the name associated with this type */ SWIGRUNTIMEINLINE const char * SWIG_TypeName(const swig_type_info *ty) { return ty->name; } /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ SWIGRUNTIME const char * SWIG_TypePrettyName(const swig_type_info *type) { /* The "str" field contains the equivalent pretty names of the type, separated by vertical-bar characters. We choose to print the last name, as it is often (?) the most specific. */ if (type->str != NULL) { const char *last_name = type->str; const char *s; for (s = type->str; *s; s++) if (*s == '|') last_name = s+1; return last_name; } else return type->name; } /* Set the clientdata field for a type */ SWIGRUNTIME void SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { if (!ti->clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; while (cast) { if (!cast->converter) SWIG_TypeClientData(cast->type, clientdata); cast = cast->next; } } } /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_MangledTypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { register size_t l = 0; register size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ register size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { register int compare = strcmp(name, iname); if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { r = i - 1; } else { break; } } else if (compare > 0) { l = i + 1; } } else { break; /* should never happen */ } } while (l <= r); } iter = iter->next; } while (iter != end); return 0; } /* Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_TypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); if (ret) { return ret; } else { /* STEP 2: If the type hasn't been found, do a complete search of the str field (the human readable name) */ swig_module_info *iter = start; do { register size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; } iter = iter->next; } while (iter != end); } /* neither found a match */ return 0; } /* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; register const unsigned char *u = (unsigned char *) ptr; register const unsigned char *eu = u + sz; for (; u != eu; ++u) { register unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } /* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { register unsigned char *u = (unsigned char *) ptr; register const unsigned char *eu = u + sz; for (; u != eu; ++u) { register char d = *(c++); register unsigned char uu = 0; if ((d >= '0') && (d <= '9')) uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = ((d - ('a'-10)) << 4); else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (d - ('a'-10)); else return (char *) 0; *u = uu; } return c; } /* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { char *r = buff; if ((2*sizeof(void *) + 2) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,&ptr,sizeof(void *)); if (strlen(name) + 1 > (bsz - (r - buff))) return 0; strcpy(r,name); return buff; } SWIGRUNTIME const char * SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { *ptr = (void *) 0; return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sizeof(void *)); } SWIGRUNTIME char * SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { char *r = buff; size_t lname = (name ? strlen(name) : 0); if ((2*sz + 2 + lname) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); if (lname) { strncpy(r,name,lname+1); } else { *r = 0; } return buff; } SWIGRUNTIME const char * SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { memset(ptr,0,sz); return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sz); } #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * SWIG API. Portion that goes into the runtime * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #endif /* ----------------------------------------------------------------------------- * for internal method declarations * ----------------------------------------------------------------------------- */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* Exception handling in wrappers */ #define SWIG_fail goto fail #define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) #define SWIG_append_errmsg(msg) SWIG_Python_AddErrMesg(msg,0) #define SWIG_preppend_errmsg(msg) SWIG_Python_AddErrMesg(msg,1) #define SWIG_type_error(type,obj) SWIG_Python_TypeError(type,obj) #define SWIG_null_ref(type) SWIG_Python_NullRef(type) /* Contract support */ #define SWIG_contract_assert(expr, msg) \ if (!(expr)) { PyErr_SetString(PyExc_RuntimeError, (char *) msg ); goto fail; } else /* ----------------------------------------------------------------------------- * Constant declarations * ----------------------------------------------------------------------------- */ /* Constant Types */ #define SWIG_PY_INT 1 #define SWIG_PY_FLOAT 2 #define SWIG_PY_STRING 3 #define SWIG_PY_POINTER 4 #define SWIG_PY_BINARY 5 /* Constant information structure */ typedef struct swig_const_info { int type; char *name; long lvalue; double dvalue; void *pvalue; swig_type_info **ptype; } swig_const_info; /* ----------------------------------------------------------------------------- * Alloc. memory flags * ----------------------------------------------------------------------------- */ #define SWIG_OLDOBJ 1 #define SWIG_NEWOBJ SWIG_OLDOBJ + 1 #define SWIG_PYSTR SWIG_NEWOBJ + 1 #ifdef __cplusplus } #endif /*********************************************************************** * pyrun.swg * * This file contains the runtime support for Python modules * and includes code for managing global variables and pointer * type checking. * * Author : David Beazley (beazley@cs.uchicago.edu) ************************************************************************/ /* Common SWIG API */ #define SWIG_ConvertPtr(obj, pp, type, flags) SWIG_Python_ConvertPtr(obj, pp, type, flags) #define SWIG_NewPointerObj(p, type, flags) SWIG_Python_NewPointerObj(p, type, flags) #define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) /* Python-specific SWIG API */ #define SWIG_ConvertPacked(obj, ptr, sz, ty, flags) SWIG_Python_ConvertPacked(obj, ptr, sz, ty, flags) #define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) /* Runtime API */ #define SWIG_GetModule(clientdata) SWIG_Python_GetModule() #define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) /* ----------------------------------------------------------------------------- * Pointer declarations * ----------------------------------------------------------------------------- */ /* Use SWIG_NO_COBJECT_TYPES to force the use of strings to represent C/C++ pointers in the python side. Very useful for debugging, but not always safe. */ #if !defined(SWIG_NO_COBJECT_TYPES) && !defined(SWIG_COBJECT_TYPES) # define SWIG_COBJECT_TYPES #endif /* Flags for pointer conversion */ #define SWIG_POINTER_EXCEPTION 0x1 #define SWIG_POINTER_DISOWN 0x2 /* Add PyOS_snprintf for old Pythons */ #if PY_VERSION_HEX < 0x02020000 #define PyOS_snprintf snprintf #endif #ifdef __cplusplus extern "C" { #endif /* ----------------------------------------------------------------------------- * Create a new pointer string * ----------------------------------------------------------------------------- */ #ifndef SWIG_BUFFER_SIZE #define SWIG_BUFFER_SIZE 1024 #endif #if defined(SWIG_COBJECT_TYPES) #if !defined(SWIG_COBJECT_PYTHON) /* ----------------------------------------------------------------------------- * Implements a simple Swig Object type, and use it instead of PyCObject * ----------------------------------------------------------------------------- */ typedef struct { PyObject_HEAD void *ptr; const char *desc; } PySwigObject; /* Declarations for objects of type PySwigObject */ SWIGRUNTIME int PySwigObject_print(PySwigObject *v, FILE *fp, int flags) { char result[SWIG_BUFFER_SIZE]; flags = flags; if (SWIG_PackVoidPtr(result, v->ptr, v->desc, sizeof(result))) { fputs("", fp); return 0; } else { return 1; } } SWIGRUNTIME PyObject * PySwigObject_repr(PySwigObject *v) { char result[SWIG_BUFFER_SIZE]; return SWIG_PackVoidPtr(result, v->ptr, v->desc, sizeof(result)) ? PyString_FromFormat("", result) : 0; } SWIGRUNTIME PyObject * PySwigObject_str(PySwigObject *v) { char result[SWIG_BUFFER_SIZE]; return SWIG_PackVoidPtr(result, v->ptr, v->desc, sizeof(result)) ? PyString_FromString(result) : 0; } SWIGRUNTIME PyObject * PySwigObject_long(PySwigObject *v) { return PyLong_FromVoidPtr(v->ptr); } SWIGRUNTIME PyObject * PySwigObject_format(const char* fmt, PySwigObject *v) { PyObject *res = NULL; PyObject *args = PyTuple_New(1); if (args && (PyTuple_SetItem(args, 0, PySwigObject_long(v)) == 0)) { PyObject *ofmt = PyString_FromString(fmt); if (ofmt) { res = PyString_Format(ofmt,args); Py_DECREF(ofmt); } Py_DECREF(args); } return res; } SWIGRUNTIME PyObject * PySwigObject_oct(PySwigObject *v) { return PySwigObject_format("%o",v); } SWIGRUNTIME PyObject * PySwigObject_hex(PySwigObject *v) { return PySwigObject_format("%x",v); } SWIGRUNTIME int PySwigObject_compare(PySwigObject *v, PySwigObject *w) { int c = strcmp(v->desc, w->desc); if (c) { return (c > 0) ? 1 : -1; } else { void *i = v->ptr; void *j = w->ptr; return (i < j) ? -1 : ((i > j) ? 1 : 0); } } SWIGRUNTIME void PySwigObject_dealloc(PySwigObject *self) { PyObject_DEL(self); } SWIGRUNTIME PyTypeObject* PySwigObject_type(void) { static char pyswigobject_type__doc__[] = "Swig object carries a C/C++ instance pointer"; static PyNumberMethods PySwigObject_as_number = { (binaryfunc)0, /*nb_add*/ (binaryfunc)0, /*nb_subtract*/ (binaryfunc)0, /*nb_multiply*/ (binaryfunc)0, /*nb_divide*/ (binaryfunc)0, /*nb_remainder*/ (binaryfunc)0, /*nb_divmod*/ (ternaryfunc)0,/*nb_power*/ (unaryfunc)0, /*nb_negative*/ (unaryfunc)0, /*nb_positive*/ (unaryfunc)0, /*nb_absolute*/ (inquiry)0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ (coercion)0, /*nb_coerce*/ (unaryfunc)PySwigObject_long, /*nb_int*/ (unaryfunc)PySwigObject_long, /*nb_long*/ (unaryfunc)0, /*nb_float*/ (unaryfunc)PySwigObject_oct, /*nb_oct*/ (unaryfunc)PySwigObject_hex, /*nb_hex*/ #if PY_VERSION_HEX >= 0x02000000 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ #endif }; static PyTypeObject pyswigobject_type #if !defined(__cplusplus) ; static int type_init = 0; if (!type_init) { PyTypeObject tmp #endif = { PyObject_HEAD_INIT(&PyType_Type) 0, /*ob_size*/ (char *)"PySwigObject", /*tp_name*/ sizeof(PySwigObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* methods */ (destructor)PySwigObject_dealloc, /*tp_dealloc*/ (printfunc)PySwigObject_print, /*tp_print*/ (getattrfunc)0, /*tp_getattr*/ (setattrfunc)0, /*tp_setattr*/ (cmpfunc)PySwigObject_compare, /*tp_compare*/ (reprfunc)PySwigObject_repr, /*tp_repr*/ &PySwigObject_as_number, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ (hashfunc)0, /*tp_hash*/ (ternaryfunc)0, /*tp_call*/ (reprfunc)PySwigObject_str, /*tp_str*/ /* Space for future expansion */ 0,0,0,0, pyswigobject_type__doc__, /* Documentation string */ #if PY_VERSION_HEX >= 0x02000000 0, /* tp_traverse */ 0, /* tp_clear */ #endif #if PY_VERSION_HEX >= 0x02010000 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ #endif #if PY_VERSION_HEX >= 0x02020000 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif #ifdef COUNT_ALLOCS 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; #if !defined(__cplusplus) pyswigobject_type = tmp; type_init = 1; } #endif return &pyswigobject_type; } SWIGRUNTIME PyObject * PySwigObject_FromVoidPtrAndDesc(void *ptr, const char *desc) { PySwigObject *self = PyObject_NEW(PySwigObject, PySwigObject_type()); if (self) { self->ptr = ptr; self->desc = desc; } return (PyObject *)self; } SWIGRUNTIMEINLINE void * PySwigObject_AsVoidPtr(PyObject *self) { return ((PySwigObject *)self)->ptr; } SWIGRUNTIMEINLINE const char * PySwigObject_GetDesc(PyObject *self) { return ((PySwigObject *)self)->desc; } SWIGRUNTIMEINLINE int PySwigObject_Check(PyObject *op) { return ((op)->ob_type == PySwigObject_type()) || (strcmp((op)->ob_type->tp_name,"PySwigObject") == 0); } /* ----------------------------------------------------------------------------- * Implements a simple Swig Packed type, and use it instead of string * ----------------------------------------------------------------------------- */ typedef struct { PyObject_HEAD void *pack; const char *desc; size_t size; } PySwigPacked; SWIGRUNTIME int PySwigPacked_print(PySwigPacked *v, FILE *fp, int flags) { char result[SWIG_BUFFER_SIZE]; flags = flags; fputs("pack, v->size, 0, sizeof(result))) { fputs("at ", fp); fputs(result, fp); } fputs(v->desc,fp); fputs(">", fp); return 0; } SWIGRUNTIME PyObject * PySwigPacked_repr(PySwigPacked *v) { char result[SWIG_BUFFER_SIZE]; if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { return PyString_FromFormat("", result, v->desc); } else { return PyString_FromFormat("", v->desc); } } SWIGRUNTIME PyObject * PySwigPacked_str(PySwigPacked *v) { char result[SWIG_BUFFER_SIZE]; if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ return PyString_FromFormat("%s%s", result, v->desc); } else { return PyString_FromFormat("%s", v->desc); } } SWIGRUNTIME int PySwigPacked_compare(PySwigPacked *v, PySwigPacked *w) { int c = strcmp(v->desc, w->desc); if (c) { return (c > 0) ? 1 : -1; } else { size_t i = v->size; size_t j = w->size; int s = (i < j) ? -1 : ((i > j) ? 1 : 0); return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); } } SWIGRUNTIME void PySwigPacked_dealloc(PySwigPacked *self) { free(self->pack); PyObject_DEL(self); } SWIGRUNTIME PyTypeObject* PySwigPacked_type(void) { static char pyswigpacked_type__doc__[] = "Swig object carries a C/C++ instance pointer"; static PyTypeObject pyswigpacked_type #if !defined(__cplusplus) ; static int type_init = 0; if (!type_init) { PyTypeObject tmp #endif = { PyObject_HEAD_INIT(&PyType_Type) 0, /*ob_size*/ (char *)"PySwigPacked", /*tp_name*/ sizeof(PySwigPacked), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* methods */ (destructor)PySwigPacked_dealloc, /*tp_dealloc*/ (printfunc)PySwigPacked_print, /*tp_print*/ (getattrfunc)0, /*tp_getattr*/ (setattrfunc)0, /*tp_setattr*/ (cmpfunc)PySwigPacked_compare, /*tp_compare*/ (reprfunc)PySwigPacked_repr, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ (hashfunc)0, /*tp_hash*/ (ternaryfunc)0, /*tp_call*/ (reprfunc)PySwigPacked_str, /*tp_str*/ /* Space for future expansion */ 0,0,0,0, pyswigpacked_type__doc__, /* Documentation string */ #if PY_VERSION_HEX >= 0x02000000 0, /* tp_traverse */ 0, /* tp_clear */ #endif #if PY_VERSION_HEX >= 0x02010000 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ #endif #if PY_VERSION_HEX >= 0x02020000 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif #ifdef COUNT_ALLOCS 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; #if !defined(__cplusplus) pyswigpacked_type = tmp; type_init = 1; } #endif return &pyswigpacked_type; } SWIGRUNTIME PyObject * PySwigPacked_FromDataAndDesc(void *ptr, size_t size, const char *desc) { PySwigPacked *self = PyObject_NEW(PySwigPacked, PySwigPacked_type()); if (self == NULL) { return NULL; } else { void *pack = malloc(size); if (pack) { memcpy(pack, ptr, size); self->pack = pack; self->desc = desc; self->size = size; return (PyObject *) self; } return NULL; } } SWIGRUNTIMEINLINE const char * PySwigPacked_UnpackData(PyObject *obj, void *ptr, size_t size) { PySwigPacked *self = (PySwigPacked *)obj; if (self->size != size) return 0; memcpy(ptr, self->pack, size); return self->desc; } SWIGRUNTIMEINLINE const char * PySwigPacked_GetDesc(PyObject *self) { return ((PySwigPacked *)self)->desc; } SWIGRUNTIMEINLINE int PySwigPacked_Check(PyObject *op) { return ((op)->ob_type == PySwigPacked_type()) || (strcmp((op)->ob_type->tp_name,"PySwigPacked") == 0); } #else /* ----------------------------------------------------------------------------- * Use the old Python PyCObject instead of PySwigObject * ----------------------------------------------------------------------------- */ #define PySwigObject_GetDesc(obj) PyCObject_GetDesc(obj) #define PySwigObject_Check(obj) PyCObject_Check(obj) #define PySwigObject_AsVoidPtr(obj) PyCObject_AsVoidPtr(obj) #define PySwigObject_FromVoidPtrAndDesc(p, d) PyCObject_FromVoidPtrAndDesc(p, d, NULL) #endif #endif /* ----------------------------------------------------------------------------- * errors manipulation * ----------------------------------------------------------------------------- */ SWIGRUNTIME void SWIG_Python_TypeError(const char *type, PyObject *obj) { if (type) { #if defined(SWIG_COBJECT_TYPES) if (obj && PySwigObject_Check(obj)) { const char *otype = (const char *) PySwigObject_GetDesc(obj); if (otype) { PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'PySwigObject(%s)' is received", type, otype); return; } } else #endif { const char *otype = (obj ? obj->ob_type->tp_name : 0); if (otype) { PyObject *str = PyObject_Str(obj); const char *cstr = str ? PyString_AsString(str) : 0; if (cstr) { PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", type, otype, cstr); } else { PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", type, otype); } Py_XDECREF(str); return; } } PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); } else { PyErr_Format(PyExc_TypeError, "unexpected type is received"); } } SWIGRUNTIMEINLINE void SWIG_Python_NullRef(const char *type) { if (type) { PyErr_Format(PyExc_TypeError, "null reference of type '%s' was received",type); } else { PyErr_Format(PyExc_TypeError, "null reference was received"); } } SWIGRUNTIME int SWIG_Python_AddErrMesg(const char* mesg, int infront) { if (PyErr_Occurred()) { PyObject *type = 0; PyObject *value = 0; PyObject *traceback = 0; PyErr_Fetch(&type, &value, &traceback); if (value) { PyObject *old_str = PyObject_Str(value); Py_XINCREF(type); PyErr_Clear(); if (infront) { PyErr_Format(type, "%s %s", mesg, PyString_AsString(old_str)); } else { PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg); } Py_DECREF(old_str); } return 1; } else { return 0; } } SWIGRUNTIME int SWIG_Python_ArgFail(int argnum) { if (PyErr_Occurred()) { /* add information about failing argument */ char mesg[256]; PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); return SWIG_Python_AddErrMesg(mesg, 1); } else { return 0; } } /* ----------------------------------------------------------------------------- * pointers/data manipulation * ----------------------------------------------------------------------------- */ /* Convert a pointer value */ SWIGRUNTIME int SWIG_Python_ConvertPtr(PyObject *obj, void **ptr, swig_type_info *ty, int flags) { swig_cast_info *tc; const char *c = 0; static PyObject *SWIG_this = 0; int newref = 0; PyObject *pyobj = 0; void *vptr; if (!obj) return 0; if (obj == Py_None) { *ptr = 0; return 0; } #ifdef SWIG_COBJECT_TYPES if (!(PySwigObject_Check(obj))) { if (!SWIG_this) SWIG_this = PyString_FromString("this"); pyobj = obj; obj = PyObject_GetAttr(obj,SWIG_this); newref = 1; if (!obj) goto type_error; if (!PySwigObject_Check(obj)) { Py_DECREF(obj); goto type_error; } } vptr = PySwigObject_AsVoidPtr(obj); c = (const char *) PySwigObject_GetDesc(obj); if (newref) { Py_DECREF(obj); } goto type_check; #else if (!(PyString_Check(obj))) { if (!SWIG_this) SWIG_this = PyString_FromString("this"); pyobj = obj; obj = PyObject_GetAttr(obj,SWIG_this); newref = 1; if (!obj) goto type_error; if (!PyString_Check(obj)) { Py_DECREF(obj); goto type_error; } } c = PyString_AS_STRING(obj); /* Pointer values must start with leading underscore */ c = SWIG_UnpackVoidPtr(c, &vptr, ty->name); if (newref) { Py_DECREF(obj); } if (!c) goto type_error; #endif type_check: if (ty) { tc = SWIG_TypeCheck(c,ty); if (!tc) goto type_error; *ptr = SWIG_TypeCast(tc,vptr); } else { *ptr = vptr; } if ((pyobj) && (flags & SWIG_POINTER_DISOWN)) { PyObject_SetAttrString(pyobj,(char*)"thisown",Py_False); } return 0; type_error: PyErr_Clear(); if (pyobj && !obj) { obj = pyobj; if (PyCFunction_Check(obj)) { /* here we get the method pointer for callbacks */ char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); c = doc ? strstr(doc, "swig_ptr: ") : 0; if (c) { c = ty ? SWIG_UnpackVoidPtr(c + 10, &vptr, ty->name) : 0; if (!c) goto type_error; goto type_check; } } } if (flags & SWIG_POINTER_EXCEPTION) { if (ty) { SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); } else { SWIG_Python_TypeError("C/C++ pointer", obj); } } return -1; } /* Convert a pointer value, signal an exception on a type mismatch */ SWIGRUNTIME void * SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) { void *result; if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { PyErr_Clear(); if (flags & SWIG_POINTER_EXCEPTION) { SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); SWIG_Python_ArgFail(argnum); } } return result; } /* Convert a packed value value */ SWIGRUNTIME int SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty, int flags) { swig_cast_info *tc; const char *c = 0; #if defined(SWIG_COBJECT_TYPES) && !defined(SWIG_COBJECT_PYTHON) c = PySwigPacked_UnpackData(obj, ptr, sz); #else if ((!obj) || (!PyString_Check(obj))) goto type_error; c = PyString_AS_STRING(obj); /* Pointer values must start with leading underscore */ c = SWIG_UnpackDataName(c, ptr, sz, ty->name); #endif if (!c) goto type_error; if (ty) { tc = SWIG_TypeCheck(c,ty); if (!tc) goto type_error; } return 0; type_error: PyErr_Clear(); if (flags & SWIG_POINTER_EXCEPTION) { if (ty) { SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); } else { SWIG_Python_TypeError("C/C++ packed data", obj); } } return -1; } /* Create a new array object */ SWIGRUNTIME PyObject * SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int own) { PyObject *robj = 0; if (!type) { if (!PyErr_Occurred()) { PyErr_Format(PyExc_TypeError, "Swig: null type passed to NewPointerObj"); } return robj; } if (!ptr) { Py_INCREF(Py_None); return Py_None; } #ifdef SWIG_COBJECT_TYPES robj = PySwigObject_FromVoidPtrAndDesc((void *) ptr, (char *)type->name); #else { char result[SWIG_BUFFER_SIZE]; robj = SWIG_PackVoidPtr(result, ptr, type->name, sizeof(result)) ? PyString_FromString(result) : 0; } #endif if (!robj || (robj == Py_None)) return robj; if (type->clientdata) { PyObject *inst; PyObject *args = Py_BuildValue((char*)"(O)", robj); Py_DECREF(robj); inst = PyObject_CallObject((PyObject *) type->clientdata, args); Py_DECREF(args); if (inst) { if (own) { PyObject_SetAttrString(inst,(char*)"thisown",Py_True); } robj = inst; } } return robj; } SWIGRUNTIME PyObject * SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { PyObject *robj = 0; if (!ptr) { Py_INCREF(Py_None); return Py_None; } #if defined(SWIG_COBJECT_TYPES) && !defined(SWIG_COBJECT_PYTHON) robj = PySwigPacked_FromDataAndDesc((void *) ptr, sz, (char *)type->name); #else { char result[SWIG_BUFFER_SIZE]; robj = SWIG_PackDataName(result, ptr, sz, type->name, sizeof(result)) ? PyString_FromString(result) : 0; } #endif return robj; } /* -----------------------------------------------------------------------------* * Get type list * -----------------------------------------------------------------------------*/ #ifdef SWIG_LINK_RUNTIME void *SWIG_ReturnGlobalTypeList(void *); #endif SWIGRUNTIME swig_module_info * SWIG_Python_GetModule(void) { static void *type_pointer = (void *)0; /* first check if module already created */ if (!type_pointer) { #ifdef SWIG_LINK_RUNTIME type_pointer = SWIG_ReturnGlobalTypeList((void *)0); #else type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); if (PyErr_Occurred()) { PyErr_Clear(); type_pointer = (void *)0; } } #endif return (swig_module_info *) type_pointer; } SWIGRUNTIME void SWIG_Python_SetModule(swig_module_info *swig_module) { static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */ PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, NULL); if (pointer && module) { PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); } } #ifdef __cplusplus } #endif /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_KColor swig_types[0] #define SWIGTYPE_p_KConsole swig_types[1] #define SWIGTYPE_p_KEventHandler swig_types[2] #define SWIGTYPE_p_KKey swig_types[3] #define SWIGTYPE_p_KPosition swig_types[4] #define SWIGTYPE_p_KProjection swig_types[5] #define SWIGTYPE_p_KQuaternion swig_types[6] #define SWIGTYPE_p_KSize swig_types[7] #define SWIGTYPE_p_KVector swig_types[8] #define SWIGTYPE_p_KWindow swig_types[9] #define SWIGTYPE_p_KikiAction swig_types[10] #define SWIGTYPE_p_KikiActionObject swig_types[11] #define SWIGTYPE_p_KikiAtom swig_types[12] #define SWIGTYPE_p_KikiBomb swig_types[13] #define SWIGTYPE_p_KikiBot swig_types[14] #define SWIGTYPE_p_KikiBotFume swig_types[15] #define SWIGTYPE_p_KikiBotStatus swig_types[16] #define SWIGTYPE_p_KikiBullet swig_types[17] #define SWIGTYPE_p_KikiCellText swig_types[18] #define SWIGTYPE_p_KikiColumnMenu swig_types[19] #define SWIGTYPE_p_KikiController swig_types[20] #define SWIGTYPE_p_KikiEvent swig_types[21] #define SWIGTYPE_p_KikiFace swig_types[22] #define SWIGTYPE_p_KikiGUI swig_types[23] #define SWIGTYPE_p_KikiGate swig_types[24] #define SWIGTYPE_p_KikiGear swig_types[25] #define SWIGTYPE_p_KikiGenerator swig_types[26] #define SWIGTYPE_p_KikiLight swig_types[27] #define SWIGTYPE_p_KikiMenu swig_types[28] #define SWIGTYPE_p_KikiMotorCylinder swig_types[29] #define SWIGTYPE_p_KikiMotorGear swig_types[30] #define SWIGTYPE_p_KikiMovesAtom swig_types[31] #define SWIGTYPE_p_KikiMutant swig_types[32] #define SWIGTYPE_p_KikiObject swig_types[33] #define SWIGTYPE_p_KikiPageText swig_types[34] #define SWIGTYPE_p_KikiPlayback swig_types[35] #define SWIGTYPE_p_KikiPlayer swig_types[36] #define SWIGTYPE_p_KikiPos swig_types[37] #define SWIGTYPE_p_KikiPyAction swig_types[38] #define SWIGTYPE_p_KikiPython swig_types[39] #define SWIGTYPE_p_KikiPythonWidget swig_types[40] #define SWIGTYPE_p_KikiScreenText swig_types[41] #define SWIGTYPE_p_KikiScrollMenu swig_types[42] #define SWIGTYPE_p_KikiSound swig_types[43] #define SWIGTYPE_p_KikiSpikes swig_types[44] #define SWIGTYPE_p_KikiStatusDisplay swig_types[45] #define SWIGTYPE_p_KikiStone swig_types[46] #define SWIGTYPE_p_KikiSwitch swig_types[47] #define SWIGTYPE_p_KikiText swig_types[48] #define SWIGTYPE_p_KikiValueAtom swig_types[49] #define SWIGTYPE_p_KikiValve swig_types[50] #define SWIGTYPE_p_KikiWall swig_types[51] #define SWIGTYPE_p_KikiWire swig_types[52] #define SWIGTYPE_p_KikiWireStone swig_types[53] #define SWIGTYPE_p_KikiWorld swig_types[54] #define SWIGTYPE_p_char swig_types[55] #define SWIGTYPE_p_std__string swig_types[56] #define SWIGTYPE_ptrdiff_t swig_types[57] #define SWIGTYPE_size_t swig_types[58] #define SWIGTYPE_std__ptrdiff_t swig_types[59] #define SWIGTYPE_std__size_t swig_types[60] static swig_type_info *swig_types[61]; static swig_module_info swig_module = {swig_types, 61, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ /*----------------------------------------------- @(target):= _kiki.so ------------------------------------------------*/ #define SWIG_init init_kiki #define SWIG_name "_kiki" #include "Kiki.h" #include #include SWIGINTERN int SWIG_CheckLongInRange(long value, long min_value, long max_value, const char *errmsg) { if (value < min_value) { if (errmsg) { PyErr_Format(PyExc_OverflowError, "value %ld is less than '%s' minimum %ld", value, errmsg, min_value); } return 0; } else if (value > max_value) { if (errmsg) { PyErr_Format(PyExc_OverflowError, "value %ld is greater than '%s' maximum %ld", value, errmsg, max_value); } return 0; } return 1; } SWIGINTERN int SWIG_AsVal_long(PyObject * obj, long* val) { if (PyInt_Check(obj)) { if (val) *val = PyInt_AS_LONG(obj); return 1; } if (PyLong_Check(obj)) { long v = PyLong_AsLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return 1; } else { if (!val) PyErr_Clear(); return 0; } } if (val) { SWIG_type_error("long", obj); } return 0; } #if INT_MAX != LONG_MAX SWIGINTERN int SWIG_AsVal_int(PyObject *obj, int *val) { const char* errmsg = val ? "int" : (char*)0; long v; if (SWIG_AsVal_long(obj, &v)) { if (SWIG_CheckLongInRange(v, INT_MIN,INT_MAX, errmsg)) { if (val) *val = (int)(v); return 1; } else { return 0; } } else { PyErr_Clear(); } if (val) { SWIG_type_error(errmsg, obj); } return 0; } #else SWIGINTERNINLINE int SWIG_AsVal_int(PyObject *obj, int *val) { return SWIG_AsVal_long(obj,(long*)val); } #endif SWIGINTERNINLINE int SWIG_As_int(PyObject* obj) { int v; if (!SWIG_AsVal_int(obj, &v)) { /* this is needed to make valgrind/purify happier. */ memset((void*)&v, 0, sizeof(int)); } return v; } SWIGINTERNINLINE int SWIG_Check_int(PyObject* obj) { return SWIG_AsVal_int(obj, (int*)0); } /*@c:\\Dokumente und Einstellungen\\kodi\\Eigene Dateien\\projects\\kiki\\win32-vc\\deps\\swigwin-1.3.25\\Lib\\python\\pymacros.swg,66,SWIG_define@*/ #define SWIG_From_int PyInt_FromLong /*@@*/ SWIGINTERNINLINE PyObject * SWIG_FromCharArray(const char* carray, size_t size) { if (size > INT_MAX) { return SWIG_NewPointerObj((char *)(carray), SWIG_TypeQuery("char *"), 0); } else { return PyString_FromStringAndSize(carray, (int)(size)); } } SWIGINTERNINLINE PyObject* SWIG_From_std_string(const std::string& s) { return SWIG_FromCharArray(s.data(), s.size()); } static bool KikiPos___eq__(KikiPos *self,KikiPos const &p){ return (self->x==p.x && self->y==p.y && self->z==p.z); } SWIGINTERNINLINE PyObject* SWIG_From_bool(bool value) { PyObject *obj = value ? Py_True : Py_False; Py_INCREF(obj); return obj; } static bool KikiPos___ne__(KikiPos *self,KikiPos const &p){ return (self->x!=p.x || self->y!=p.y || self->z!=p.z); } static char *KikiPos___str__(KikiPos *self){ static char temp[256]; sprintf(temp,"[ %d, %d, %d ]", self->x,self->y,self->z); return &temp[0]; } SWIGINTERN PyObject * SWIG_FromCharPtr(const char* cptr) { if (cptr) { size_t size = strlen(cptr); if (size > INT_MAX) { return SWIG_NewPointerObj((char*)(cptr), SWIG_TypeQuery("char *"), 0); } else { if (size != 0) { return PyString_FromStringAndSize(cptr, size); } else { return PyString_FromString(cptr); } } } Py_INCREF(Py_None); return Py_None; } #include SWIGINTERN int SWIG_CheckDoubleInRange(double value, double min_value, double max_value, const char* errmsg) { if (value < min_value) { if (errmsg) { PyErr_Format(PyExc_OverflowError, "value %g is less than %s minimum %g", value, errmsg, min_value); } return 0; } else if (value > max_value) { if (errmsg) { PyErr_Format(PyExc_OverflowError, "value %g is greater than %s maximum %g", value, errmsg, max_value); } return 0; } return 1; } SWIGINTERN int SWIG_AsVal_double(PyObject *obj, double *val) { if (PyFloat_Check(obj)) { if (val) *val = PyFloat_AS_DOUBLE(obj); return 1; } if (PyInt_Check(obj)) { if (val) *val = PyInt_AS_LONG(obj); return 1; } if (PyLong_Check(obj)) { double v = PyLong_AsDouble(obj); if (!PyErr_Occurred()) { if (val) *val = v; return 1; } else { if (!val) PyErr_Clear(); return 0; } } if (val) { SWIG_type_error("double", obj); } return 0; } SWIGINTERN int SWIG_AsVal_float(PyObject *obj, float *val) { const char* errmsg = val ? "float" : (char*)0; double v; if (SWIG_AsVal_double(obj, &v)) { if (SWIG_CheckDoubleInRange(v, -FLT_MAX, FLT_MAX, errmsg)) { if (val) *val = (float)(v); return 1; } else { return 0; } } else { PyErr_Clear(); } if (val) { SWIG_type_error(errmsg, obj); } return 0; } SWIGINTERNINLINE float SWIG_As_float(PyObject* obj) { float v; if (!SWIG_AsVal_float(obj, &v)) { /* this is needed to make valgrind/purify happier. */ memset((void*)&v, 0, sizeof(float)); } return v; } SWIGINTERNINLINE int SWIG_Check_float(PyObject* obj) { return SWIG_AsVal_float(obj, (float*)0); } /*@c:\\Dokumente und Einstellungen\\kodi\\Eigene Dateien\\projects\\kiki\\win32-vc\\deps\\swigwin-1.3.25\\Lib\\python\\pymacros.swg,66,SWIG_define@*/ #define SWIG_From_float PyFloat_FromDouble /*@@*/ static bool KVector___getitem__(KVector *self,int key){ return (*self)[key]; } static char *KVector___str__(KVector *self){ static char temp[256]; sprintf(temp,"(%f, %f, %f)", (*self)[0],(*self)[1],(*self)[2]); return &temp[0]; } static char *KQuaternion___str__(KQuaternion *self){ static char temp[256]; sprintf(temp,"[ %f: %f, %f, %f ]", self->w, self->x, self->y, self->z); return &temp[0]; } static char *KColor___str__(KColor *self){ static char temp[256]; sprintf (temp,"( r:%f g:%f b:%f a:%f)", self->getRed(), self->getGreen(), self->getBlue(), self->getAlpha()); return &temp[0]; } /* returns SWIG_OLDOBJ if the input is a raw char*, SWIG_PYSTR if is a PyString */ SWIGINTERN int SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize) { static swig_type_info* pchar_info = 0; char* vptr = 0; if (!pchar_info) pchar_info = SWIG_TypeQuery("char *"); if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_info, 0) != -1) { if (cptr) *cptr = vptr; if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0; return SWIG_OLDOBJ; } else { PyErr_Clear(); if (PyString_Check(obj)) { if (cptr) { *cptr = PyString_AS_STRING(obj); if (psize) { *psize = PyString_GET_SIZE(obj) + 1; } } return SWIG_PYSTR; } } if (cptr) { SWIG_type_error("char *", obj); } return 0; } SWIGINTERN int SWIG_AsPtr_std_string(PyObject* obj, std::string **val) { static swig_type_info* string_info = SWIG_TypeQuery("std::string *"); std::string *vptr; if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) != -1) { if (val) *val = vptr; return SWIG_OLDOBJ; } else { PyErr_Clear(); char* buf = 0 ; size_t size = 0; if (SWIG_AsCharPtrAndSize(obj, &buf, &size)) { if (buf) { if (val) *val = new std::string(buf, size - 1); return SWIG_NEWOBJ; } } else { PyErr_Clear(); } if (val) { PyErr_SetString(PyExc_TypeError,"a string is expected"); } return 0; } } /*@c:\\Dokumente und Einstellungen\\kodi\\Eigene Dateien\\projects\\kiki\\win32-vc\\deps\\swigwin-1.3.25\\Lib\\python\\pymacros.swg,66,SWIG_define@*/ #define SWIG_From_long PyInt_FromLong /*@@*/ SWIGINTERNINLINE PyObject* SWIG_From_unsigned_SS_long(unsigned long value) { return (value > LONG_MAX) ? PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value)); } #if UINT_MAX < LONG_MAX /*@c:\\Dokumente und Einstellungen\\kodi\\Eigene Dateien\\projects\\kiki\\win32-vc\\deps\\swigwin-1.3.25\\Lib\\python\\pymacros.swg,66,SWIG_define@*/ #define SWIG_From_unsigned_SS_int SWIG_From_long /*@@*/ #else /*@c:\\Dokumente und Einstellungen\\kodi\\Eigene Dateien\\projects\\kiki\\win32-vc\\deps\\swigwin-1.3.25\\Lib\\python\\pymacros.swg,66,SWIG_define@*/ #define SWIG_From_unsigned_SS_int SWIG_From_unsigned_SS_long /*@@*/ #endif SWIGINTERNINLINE int SWIG_AsCharPtr(PyObject *obj, char **val) { if (SWIG_AsCharPtrAndSize(obj, val, (size_t*)(0))) { return 1; } if (val) { PyErr_Clear(); SWIG_type_error("char *", obj); } return 0; } SWIGINTERN int SWIG_AsVal_bool(PyObject *obj, bool *val) { if (obj == Py_True) { if (val) *val = true; return 1; } if (obj == Py_False) { if (val) *val = false; return 1; } int res = 0; if (SWIG_AsVal_int(obj, &res)) { if (val) *val = res ? true : false; return 1; } else { PyErr_Clear(); } if (val) { SWIG_type_error("bool", obj); } return 0; } SWIGINTERNINLINE bool SWIG_As_bool(PyObject* obj) { bool v; if (!SWIG_AsVal_bool(obj, &v)) { /* this is needed to make valgrind/purify happier. */ memset((void*)&v, 0, sizeof(bool)); } return v; } SWIGINTERNINLINE int SWIG_Check_bool(PyObject* obj) { return SWIG_AsVal_bool(obj, (bool*)0); } static KikiPos KikiWorld_getPickedPos(KikiWorld *self){ if (self->getPickedPickable()) { return ((KikiObject*)self->getPickedPickable())->getPos(); } return KikiPos (); } extern KikiController Controller; const char * replaceTabs ( const std::string & str, int tabWidth ) { static std::string tmpStr; tmpStr = str; kStringReplaceTabs (tmpStr, tabWidth); return tmpStr.c_str(); } KikiWire * kikiObjectToWire ( KikiObject * o ) { return reinterpret_cast(o); } KikiGear * kikiObjectToGear ( KikiObject * o ) { return reinterpret_cast(o); } KikiValve * kikiObjectToValve ( KikiObject * o ) { return reinterpret_cast(o); } KikiLight * kikiObjectToLight ( KikiObject * o ) { return reinterpret_cast(o); } KikiCellText * kikiObjectToCellText ( KikiObject * o ) { return reinterpret_cast(o); } KikiStone * kikiObjectToStone ( KikiObject * o ) { return reinterpret_cast(o); } KikiWireStone * kikiObjectToWireStone ( KikiObject * o ) { return reinterpret_cast(o); } KikiWall * kikiObjectToWall ( KikiObject * o ) { return reinterpret_cast(o); } KikiBomb * kikiObjectToBomb ( KikiObject * o ) { return reinterpret_cast(o); } KikiSwitch * kikiObjectToSwitch ( KikiObject * o ) { return reinterpret_cast(o); } KikiGate * kikiObjectToGate ( KikiObject * o ) { return reinterpret_cast(o); } KikiSpikes * kikiObjectToSpikes ( KikiObject * o ) { return reinterpret_cast(o); } #ifdef __cplusplus extern "C" { #endif static PyObject *_wrap_KikiPos_x_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos_x_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->x = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos_x_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPos_x_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int) ((arg1)->x); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos_y_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos_y_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->y = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos_y_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPos_y_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int) ((arg1)->y); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos_z_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos_z_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->z = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos_z_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPos_z_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int) ((arg1)->z); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiPos__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiPos")) goto fail; result = (KikiPos *)new KikiPos(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiPos__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; int arg3 ; KikiPos *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiPos",&obj0,&obj1,&obj2)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KikiPos *)new KikiPos(arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiPos__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; KikiPos *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiPos",&obj0,&obj1)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiPos *)new KikiPos(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiPos__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = 0 ; KikiPos *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiPos",&obj0)) goto fail; { SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; if (arg1 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiPos *)new KikiPos((KikiPos const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiPos__SWIG_4(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = 0 ; KikiPos *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiPos",&obj0)) goto fail; { SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; if (arg1 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiPos *)new KikiPos((KVector const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiPos(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiPos__SWIG_0(self,args); } if (argc == 1) { int _v; { void *ptr = 0; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiPos, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_new_KikiPos__SWIG_3(self,args); } } if (argc == 1) { int _v; { void *ptr = 0; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KVector, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_new_KikiPos__SWIG_4(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_new_KikiPos__SWIG_2(self,args); } } } if (argc == 3) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_new_KikiPos__SWIG_1(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiPos'"); return NULL; } static PyObject *_wrap_KikiPos___sub__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; KikiPos *arg2 = 0 ; KikiPos result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos___sub__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KikiPos const *)arg1)->operator -((KikiPos const &)*arg2); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos___add__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; KikiPos *arg2 = 0 ; KikiPos result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos___add__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KikiPos const *)arg1)->operator +((KikiPos const &)*arg2); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos___iadd__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; KikiPos *arg2 = 0 ; KikiPos *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos___iadd__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } { KikiPos &_result_ref = (arg1)->operator +=((KikiPos const &)*arg2); result = (KikiPos *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos___isub__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; KikiPos *arg2 = 0 ; KikiPos *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos___isub__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } { KikiPos &_result_ref = (arg1)->operator -=((KikiPos const &)*arg2); result = (KikiPos *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos_getString(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; std::string result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPos_getString",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiPos const *)arg1)->getString(); { resultobj = SWIG_From_std_string((std::string)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos___eq__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; KikiPos *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos___eq__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)KikiPos___eq__(arg1,(KikiPos const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos___ne__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; KikiPos *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPos___ne__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)KikiPos___ne__(arg1,(KikiPos const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPos___str__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; char *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPos___str__",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (char *)KikiPos___str__(arg1); resultobj = SWIG_FromCharPtr(result); return resultobj; fail: return NULL; } static PyObject *_wrap_delete_KikiPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPos *arg1 = (KikiPos *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:delete_KikiPos",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; delete arg1; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiPos_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPos, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KVector__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *result; if(!PyArg_ParseTuple(args,(char *)":new_KVector")) goto fail; result = (KVector *)new KVector(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KVector__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; float arg4 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KVector",&obj0,&obj1,&obj2,&obj3)) goto fail; { arg1 = (float const)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float const)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (float const)(SWIG_As_float(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KVector *)new KVector(arg1,arg2,arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KVector__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KVector",&obj0,&obj1,&obj2)) goto fail; { arg1 = (float const)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float const)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KVector *)new KVector(arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KVector__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KVector",&obj0,&obj1)) goto fail; { arg1 = (float const)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KVector *)new KVector(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KVector__SWIG_4(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = 0 ; KVector *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KVector",&obj0)) goto fail; { SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; if (arg1 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(1)) SWIG_fail; } result = (KVector *)new KVector((KVector const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KVector(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KVector__SWIG_0(self,args); } if (argc == 1) { int _v; { void *ptr = 0; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KVector, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_new_KVector__SWIG_4(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { return _wrap_new_KVector__SWIG_3(self,args); } } } if (argc == 3) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_new_KVector__SWIG_2(self,args); } } } } if (argc == 4) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_float(argv[3]); if (_v) { return _wrap_new_KVector__SWIG_1(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KVector'"); return NULL; } static PyObject *_wrap_KVector_reset(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_reset",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { KVector &_result_ref = (arg1)->reset(); result = (KVector *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_normalize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_normalize",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { KVector &_result_ref = (arg1)->normalize(); result = (KVector *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___iadd__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___iadd__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } { KVector &_result_ref = (arg1)->operator +=((KVector const &)*arg2); result = (KVector *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___isub__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___isub__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } { KVector &_result_ref = (arg1)->operator -=((KVector const &)*arg2); result = (KVector *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___imul__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; float arg2 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___imul__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { KVector &_result_ref = (arg1)->operator *=(arg2); result = (KVector *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___idiv__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; float arg2 ; KVector *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___idiv__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { KVector &_result_ref = (arg1)->operator /=(arg2); result = (KVector *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KVector, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_cross(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector_cross",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->cross((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___mul____SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; float result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___mul__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (float)((KVector const *)arg1)->operator *((KVector const &)*arg2); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___sub__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___sub__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->operator -((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___add__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___add__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->operator +((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___mul____SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; float arg2 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___mul__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->operator *(arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___mul__(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KVector, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { { void *ptr = 0; if (SWIG_ConvertPtr(argv[1], &ptr, SWIGTYPE_p_KVector, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_KVector___mul____SWIG_0(self,args); } } } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KVector, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { return _wrap_KVector___mul____SWIG_1(self,args); } } } Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } static PyObject *_wrap_KVector___div__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; float arg2 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___div__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->operator /(arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_perpendicular(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector_perpendicular",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->perpendicular((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_parallel(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector_parallel",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->parallel((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_reflect(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector_reflect",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KVector const *)arg1)->reflect((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_normal(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_normal",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KVector const *)arg1)->normal(); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_length(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_length",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KVector const *)arg1)->length(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_angle(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; float result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector_angle",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (float)((KVector const *)arg1)->angle((KVector const &)*arg2); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_xyangle(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector *arg2 = 0 ; float result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector_xyangle",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (float)((KVector const *)arg1)->xyangle((KVector const &)*arg2); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_xyperp(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_xyperp",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KVector const *)arg1)->xyperp(); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_round(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; KVector result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_round",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KVector const *)arg1)->round(); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector_glVertex(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector_glVertex",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; ((KVector const *)arg1)->glVertex(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___getitem__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; int arg2 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KVector___getitem__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)KVector___getitem__(arg1,arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KVector___str__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; char *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KVector___str__",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (char *)KVector___str__(arg1); resultobj = SWIG_FromCharPtr(result); return resultobj; fail: return NULL; } static PyObject *_wrap_delete_KVector(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = (KVector *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:delete_KVector",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; delete arg1; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KVector_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KVector, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KQuaternion_w_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion_w_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->w = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_w_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_w_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float) ((arg1)->w); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_x_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion_x_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->x = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_x_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_x_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float) ((arg1)->x); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_y_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion_y_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->y = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_y_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_y_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float) ((arg1)->y); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_z_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion_z_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->z = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_z_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_z_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float) ((arg1)->z); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; float arg4 ; KQuaternion *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KQuaternion",&obj0,&obj1,&obj2,&obj3)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (float)(SWIG_As_float(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KQuaternion *)new KQuaternion(arg1,arg2,arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; KQuaternion *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KQuaternion",&obj0,&obj1,&obj2)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KQuaternion *)new KQuaternion(arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; KQuaternion *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KQuaternion",&obj0,&obj1)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KQuaternion *)new KQuaternion(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; KQuaternion *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KQuaternion",&obj0)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KQuaternion *)new KQuaternion(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_4(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *result; if(!PyArg_ParseTuple(args,(char *)":new_KQuaternion")) goto fail; result = (KQuaternion *)new KQuaternion(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_5(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = 0 ; KQuaternion *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KQuaternion",&obj0)) goto fail; { SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; if (arg1 == NULL) { SWIG_null_ref("KQuaternion"); } if (SWIG_arg_fail(1)) SWIG_fail; } result = (KQuaternion *)new KQuaternion((KQuaternion const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion__SWIG_6(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KVector *arg1 = 0 ; KQuaternion *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KQuaternion",&obj0)) goto fail; { SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; if (arg1 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(1)) SWIG_fail; } result = (KQuaternion *)new KQuaternion((KVector const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KQuaternion(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KQuaternion__SWIG_4(self,args); } if (argc == 1) { int _v; { void *ptr = 0; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KQuaternion, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_new_KQuaternion__SWIG_5(self,args); } } if (argc == 1) { int _v; { void *ptr = 0; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KVector, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_new_KQuaternion__SWIG_6(self,args); } } if (argc == 1) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { return _wrap_new_KQuaternion__SWIG_3(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { return _wrap_new_KQuaternion__SWIG_2(self,args); } } } if (argc == 3) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_new_KQuaternion__SWIG_1(self,args); } } } } if (argc == 4) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_float(argv[3]); if (_v) { return _wrap_new_KQuaternion__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KQuaternion'"); return NULL; } static PyObject *_wrap_KQuaternion_rotationAroundVector(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; KVector *arg2 = 0 ; KQuaternion result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion_rotationAroundVector",&obj0,&obj1)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = KQuaternion::rotationAroundVector(arg1,(KVector const &)*arg2); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_rotate(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KVector *arg2 = 0 ; KVector result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion_rotate",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KQuaternion const *)arg1)->rotate((KVector const &)*arg2); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_normalize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_normalize",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { KQuaternion &_result_ref = (arg1)->normalize(); result = (KQuaternion *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_invert(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_invert",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { KQuaternion &_result_ref = (arg1)->invert(); result = (KQuaternion *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_conjugate(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_conjugate",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { KQuaternion &_result_ref = (arg1)->conjugate(); result = (KQuaternion *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KQuaternion, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_getNormal(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_getNormal",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KQuaternion const *)arg1)->getNormal(); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_getConjugate(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_getConjugate",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KQuaternion const *)arg1)->getConjugate(); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_getInverse(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_getInverse",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KQuaternion const *)arg1)->getInverse(); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_length(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_length",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KQuaternion const *)arg1)->length(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_glRotate(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion_glRotate",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; ((KQuaternion const *)arg1)->glRotate(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion_slerp(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion *arg2 = 0 ; float arg3 ; KQuaternion result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KQuaternion_slerp",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KQuaternion"); } if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = ((KQuaternion const *)arg1)->slerp((KQuaternion const &)*arg2,arg3); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion___mul__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; KQuaternion *arg2 = 0 ; KQuaternion result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KQuaternion___mul__",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KQuaternion"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KQuaternion const *)arg1)->operator *((KQuaternion const &)*arg2); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KQuaternion___str__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; char *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KQuaternion___str__",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (char *)KQuaternion___str__(arg1); resultobj = SWIG_FromCharPtr(result); return resultobj; fail: return NULL; } static PyObject *_wrap_delete_KQuaternion(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KQuaternion *arg1 = (KQuaternion *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:delete_KQuaternion",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; delete arg1; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KQuaternion_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KQuaternion, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KColor__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *result; if(!PyArg_ParseTuple(args,(char *)":new_KColor")) goto fail; result = (KColor *)new KColor(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KColor, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KColor__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = 0 ; KColor *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KColor",&obj0)) goto fail; { SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; if (arg1 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(1)) SWIG_fail; } result = (KColor *)new KColor((KColor const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KColor, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KColor__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; float arg4 ; KColor *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KColor",&obj0,&obj1,&obj2,&obj3)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (float)(SWIG_As_float(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KColor *)new KColor(arg1,arg2,arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KColor, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KColor__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; KColor *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KColor",&obj0,&obj1,&obj2)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KColor *)new KColor(arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KColor, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KColor(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KColor__SWIG_0(self,args); } if (argc == 1) { int _v; { void *ptr = 0; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KColor, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = (ptr != 0); } } if (_v) { return _wrap_new_KColor__SWIG_1(self,args); } } if (argc == 3) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_new_KColor__SWIG_3(self,args); } } } } if (argc == 4) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_float(argv[3]); if (_v) { return _wrap_new_KColor__SWIG_2(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KColor'"); return NULL; } static PyObject *_wrap_KColor_setValues__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float arg2 ; float arg3 ; float arg4 ; float arg5 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; PyObject * obj4 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOOO:KColor_setValues",&obj0,&obj1,&obj2,&obj3,&obj4)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float const)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (float const)(SWIG_As_float(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } { arg5 = (float const)(SWIG_As_float(obj4)); if (SWIG_arg_fail(5)) SWIG_fail; } (arg1)->setValues(arg2,arg3,arg4,arg5); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_setValues__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float arg2 ; float arg3 ; float arg4 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KColor_setValues",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float const)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (float const)(SWIG_As_float(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } (arg1)->setValues(arg2,arg3,arg4); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_setValues(PyObject *self, PyObject *args) { int argc; PyObject *argv[6]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 5); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KColor, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_float(argv[3]); if (_v) { return _wrap_KColor_setValues__SWIG_1(self,args); } } } } } if (argc == 5) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KColor, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_float(argv[3]); if (_v) { _v = SWIG_Check_float(argv[4]); if (_v) { return _wrap_KColor_setValues__SWIG_0(self,args); } } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KColor_setValues'"); return NULL; } static PyObject *_wrap_KColor_setRed(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KColor_setRed",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setRed(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_setGreen(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KColor_setGreen",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setGreen(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_setBlue(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KColor_setBlue",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setBlue(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_setAlpha(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KColor_setAlpha",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float const)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setAlpha(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_getRed(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KColor_getRed",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KColor const *)arg1)->getRed(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_getGreen(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KColor_getGreen",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KColor const *)arg1)->getGreen(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_getBlue(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KColor_getBlue",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KColor const *)arg1)->getBlue(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_getAlpha(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KColor_getAlpha",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KColor const *)arg1)->getAlpha(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KColor_glColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KColor_glColor",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; ((KColor const *)arg1)->glColor(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KColor___str__(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; char *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KColor___str__",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (char *)KColor___str__(arg1); resultobj = SWIG_FromCharPtr(result); return resultobj; fail: return NULL; } static PyObject *_wrap_delete_KColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:delete_KColor",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; delete arg1; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KColor_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KColor, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KProjection_focusOn(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KProjection *arg1 = (KProjection *) 0 ; KVector *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KProjection_focusOn",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KProjection, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->focusOn((KVector const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KProjection_setFov(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KProjection *arg1 = (KProjection *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KProjection_setFov",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KProjection, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setFov(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KProjection_getFov(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KProjection *arg1 = (KProjection *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KProjection_getFov",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KProjection, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KProjection const *)arg1)->getFov(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KProjection_setViewport(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KProjection *arg1 = (KProjection *) 0 ; float arg2 ; float arg3 ; float arg4 ; float arg5 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; PyObject * obj4 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOOO:KProjection_setViewport",&obj0,&obj1,&obj2,&obj3,&obj4)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KProjection, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (float)(SWIG_As_float(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } { arg5 = (float)(SWIG_As_float(obj4)); if (SWIG_arg_fail(5)) SWIG_fail; } (arg1)->setViewport(arg2,arg3,arg4,arg5); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KProjection_setPosition(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KProjection *arg1 = (KProjection *) 0 ; KVector *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KProjection_setPosition",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KProjection, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setPosition((KVector const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KProjection_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KProjection, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KKey(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string arg1 ; KKey *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KKey",&obj0)) goto fail; { std::string *ptr = (std::string *)0; int res = SWIG_AsPtr_std_string(obj0, &ptr); if (!res) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = *ptr; if (res == SWIG_NEWOBJ) delete ptr; } result = (KKey *)new KKey(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KKey, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KKey_name_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KKey *arg1 = (KKey *) 0 ; std::string *arg2 = (std::string *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KKey_name_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KKey, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_std__string, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->name = *arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KKey_name_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KKey *arg1 = (KKey *) 0 ; std::string *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KKey_name_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KKey, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (std::string *)& ((arg1)->name); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_std__string, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KKey_getUnmodifiedName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KKey *arg1 = (KKey *) 0 ; std::string result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KKey_getUnmodifiedName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KKey, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KKey const *)arg1)->getUnmodifiedName(); { resultobj = SWIG_From_std_string((std::string)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KKey_getModifierName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KKey *arg1 = (KKey *) 0 ; std::string result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KKey_getModifierName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KKey, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KKey const *)arg1)->getModifierName(); { resultobj = SWIG_From_std_string((std::string)(result)); } return resultobj; fail: return NULL; } static PyObject * KKey_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KKey, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiAction__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; int arg2 ; std::string *arg3 = 0 ; int arg4 ; int arg5 ; KikiAction *result; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; PyObject * obj4 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOOO:new_KikiAction",&obj0,&obj1,&obj2,&obj3,&obj4)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { std::string *ptr = (std::string *)0; res3 = SWIG_AsPtr_std_string(obj2, &ptr); if (!res3) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj2); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(3)) SWIG_fail; arg3 = ptr; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } { arg5 = (int)(SWIG_As_int(obj4)); if (SWIG_arg_fail(5)) SWIG_fail; } result = (KikiAction *)new KikiAction(arg1,arg2,(std::string const &)*arg3,arg4,arg5); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 1); if (res3 == SWIG_NEWOBJ) delete arg3; return resultobj; fail: if (res3 == SWIG_NEWOBJ) delete arg3; return NULL; } static PyObject *_wrap_new_KikiAction__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; int arg2 ; std::string *arg3 = 0 ; int arg4 ; KikiAction *result; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KikiAction",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { std::string *ptr = (std::string *)0; res3 = SWIG_AsPtr_std_string(obj2, &ptr); if (!res3) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj2); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(3)) SWIG_fail; arg3 = ptr; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KikiAction *)new KikiAction(arg1,arg2,(std::string const &)*arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 1); if (res3 == SWIG_NEWOBJ) delete arg3; return resultobj; fail: if (res3 == SWIG_NEWOBJ) delete arg3; return NULL; } static PyObject *_wrap_new_KikiAction__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; int arg2 ; std::string *arg3 = 0 ; KikiAction *result; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiAction",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { std::string *ptr = (std::string *)0; res3 = SWIG_AsPtr_std_string(obj2, &ptr); if (!res3) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj2); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(3)) SWIG_fail; arg3 = ptr; } result = (KikiAction *)new KikiAction(arg1,arg2,(std::string const &)*arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 1); if (res3 == SWIG_NEWOBJ) delete arg3; return resultobj; fail: if (res3 == SWIG_NEWOBJ) delete arg3; return NULL; } static PyObject *_wrap_new_KikiAction__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; int arg2 ; KikiAction *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiAction *)new KikiAction(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiAction__SWIG_4(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiAction *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiAction",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiAction *)new KikiAction(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiAction(PyObject *self, PyObject *args) { int argc; PyObject *argv[6]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 5); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 1) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_new_KikiAction__SWIG_4(self,args); } } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_new_KikiAction__SWIG_3(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); if (_v) { return _wrap_new_KikiAction__SWIG_2(self,args); } } } } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { return _wrap_new_KikiAction__SWIG_1(self,args); } } } } } if (argc == 5) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { _v = SWIG_Check_int(argv[4]); if (_v) { return _wrap_new_KikiAction__SWIG_0(self,args); } } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiAction'"); return NULL; } static PyObject *_wrap_KikiAction_getId(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAction *arg1 = (KikiAction *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiAction_getId",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiAction const *)arg1)->getId(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAction_getName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAction *arg1 = (KikiAction *) 0 ; std::string *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiAction_getName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string const &_result_ref = ((KikiAction const *)arg1)->getName(); result = (std::string *) &_result_ref; } { resultobj = SWIG_From_std_string((std::string)(*result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAction_getRelativeTime(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAction *arg1 = (KikiAction *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiAction_getRelativeTime",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)(arg1)->getRelativeTime(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAction_getRelativeDelta(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAction *arg1 = (KikiAction *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiAction_getRelativeDelta",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)(arg1)->getRelativeDelta(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAction_getDuration(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAction *arg1 = (KikiAction *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiAction_getDuration",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiAction const *)arg1)->getDuration(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAction_setDuration(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAction *arg1 = (KikiAction *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiAction_setDuration",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setDuration(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiAction_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiAction, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiPyAction__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; PyObject *arg1 = (PyObject *) 0 ; PyObject *arg2 = (PyObject *) 0 ; std::string *arg3 = 0 ; int arg4 ; int arg5 ; KikiPyAction *result; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; PyObject * obj4 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOOO:new_KikiPyAction",&obj0,&obj1,&obj2,&obj3,&obj4)) goto fail; arg1 = obj0; arg2 = obj1; { std::string *ptr = (std::string *)0; res3 = SWIG_AsPtr_std_string(obj2, &ptr); if (!res3) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj2); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(3)) SWIG_fail; arg3 = ptr; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } { arg5 = (int)(SWIG_As_int(obj4)); if (SWIG_arg_fail(5)) SWIG_fail; } result = (KikiPyAction *)new KikiPyAction(arg1,arg2,(std::string const &)*arg3,arg4,arg5); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPyAction, 1); if (res3 == SWIG_NEWOBJ) delete arg3; return resultobj; fail: if (res3 == SWIG_NEWOBJ) delete arg3; return NULL; } static PyObject *_wrap_new_KikiPyAction__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; PyObject *arg1 = (PyObject *) 0 ; PyObject *arg2 = (PyObject *) 0 ; std::string *arg3 = 0 ; int arg4 ; KikiPyAction *result; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KikiPyAction",&obj0,&obj1,&obj2,&obj3)) goto fail; arg1 = obj0; arg2 = obj1; { std::string *ptr = (std::string *)0; res3 = SWIG_AsPtr_std_string(obj2, &ptr); if (!res3) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj2); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(3)) SWIG_fail; arg3 = ptr; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KikiPyAction *)new KikiPyAction(arg1,arg2,(std::string const &)*arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPyAction, 1); if (res3 == SWIG_NEWOBJ) delete arg3; return resultobj; fail: if (res3 == SWIG_NEWOBJ) delete arg3; return NULL; } static PyObject *_wrap_new_KikiPyAction__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; PyObject *arg1 = (PyObject *) 0 ; PyObject *arg2 = (PyObject *) 0 ; std::string *arg3 = 0 ; KikiPyAction *result; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiPyAction",&obj0,&obj1,&obj2)) goto fail; arg1 = obj0; arg2 = obj1; { std::string *ptr = (std::string *)0; res3 = SWIG_AsPtr_std_string(obj2, &ptr); if (!res3) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj2); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(3)) SWIG_fail; arg3 = ptr; } result = (KikiPyAction *)new KikiPyAction(arg1,arg2,(std::string const &)*arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPyAction, 1); if (res3 == SWIG_NEWOBJ) delete arg3; return resultobj; fail: if (res3 == SWIG_NEWOBJ) delete arg3; return NULL; } static PyObject *_wrap_new_KikiPyAction(PyObject *self, PyObject *args) { int argc; PyObject *argv[6]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 5); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 3) { int _v; _v = (argv[0] != 0); if (_v) { _v = (argv[1] != 0); if (_v) { _v = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); if (_v) { return _wrap_new_KikiPyAction__SWIG_2(self,args); } } } } if (argc == 4) { int _v; _v = (argv[0] != 0); if (_v) { _v = (argv[1] != 0); if (_v) { _v = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { return _wrap_new_KikiPyAction__SWIG_1(self,args); } } } } } if (argc == 5) { int _v; _v = (argv[0] != 0); if (_v) { _v = (argv[1] != 0); if (_v) { _v = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { _v = SWIG_Check_int(argv[4]); if (_v) { return _wrap_new_KikiPyAction__SWIG_0(self,args); } } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiPyAction'"); return NULL; } static PyObject *_wrap_delete_KikiPyAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPyAction *arg1 = (KikiPyAction *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:delete_KikiPyAction",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPyAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; delete arg1; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiPyAction_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPyAction, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiEvent(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; std::string *arg2 = 0 ; KikiEvent *result; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiEvent",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } result = (KikiEvent *)new KikiEvent(arg1,(std::string const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiEvent, 1); if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiEvent_addAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; KikiAction *arg2 = (KikiAction *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiEvent_addAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->addAction(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiEvent_removeAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; KikiAction *arg2 = (KikiAction *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiEvent_removeAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->removeAction(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiEvent_removeAllActions(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiEvent_removeAllActions",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->removeAllActions(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiEvent_removeActionsOfObject(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiEvent_removeActionsOfObject",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->removeActionsOfObject(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiEvent_removeActionWithName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiEvent_removeActionWithName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->removeActionWithName((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiEvent_triggerActions(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiEvent_triggerActions",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->triggerActions(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiEvent_getTime(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiEvent *arg1 = (KikiEvent *) 0 ; unsigned int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiEvent_getTime",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (unsigned int)((KikiEvent const *)arg1)->getTime(); { resultobj = SWIG_From_unsigned_SS_int((unsigned int)(result)); } return resultobj; fail: return NULL; } static PyObject * KikiEvent_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiEvent, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiActionObject_addAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; KikiAction *arg2 = (KikiAction *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_addAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->addAction(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_removeAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; KikiAction *arg2 = (KikiAction *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_removeAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->removeAction(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_startTimedAction__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; KikiAction *arg2 = (KikiAction *) 0 ; int arg3 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiActionObject_startTimedAction",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->startTimedAction(arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_startTimedAction__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; KikiAction *arg2 = (KikiAction *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_startTimedAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->startTimedAction(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_startTimedAction(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiActionObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { { void *ptr; if (SWIG_ConvertPtr(argv[1], &ptr, SWIGTYPE_p_KikiAction, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_KikiActionObject_startTimedAction__SWIG_1(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiActionObject, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { { void *ptr; if (SWIG_ConvertPtr(argv[1], &ptr, SWIGTYPE_p_KikiAction, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_KikiActionObject_startTimedAction__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiActionObject_startTimedAction'"); return NULL; } static PyObject *_wrap_KikiActionObject_startTimer(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; int arg2 ; int arg3 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiActionObject_startTimer",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->startTimer(arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_getActionWithName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; std::string *arg2 = 0 ; KikiAction *result; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_getActionWithName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } result = (KikiAction *)(arg1)->getActionWithName((std::string const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 0); if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiActionObject_getActionWithId(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; int arg2 ; KikiAction *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_getActionWithId",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiAction *)(arg1)->getActionWithId(arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiAction, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_addEventWithName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; std::string *arg2 = 0 ; int result; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_addEventWithName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } result = (int)(arg1)->addEventWithName((std::string const &)*arg2); { resultobj = SWIG_From_int((int)(result)); } if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiActionObject_getEventWithName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; std::string *arg2 = 0 ; KikiEvent *result; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_getEventWithName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } result = (KikiEvent *)(arg1)->getEventWithName((std::string const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiEvent, 0); if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiActionObject_getEventWithId(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; int arg2 ; KikiEvent *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiActionObject_getEventWithId",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiEvent *)(arg1)->getEventWithId(arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiEvent, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiActionObject_getClassName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiActionObject *arg1 = (KikiActionObject *) 0 ; char *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiActionObject_getClassName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiActionObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (char *)((KikiActionObject const *)arg1)->getClassName(); resultobj = SWIG_FromCharPtr(result); return resultobj; fail: return NULL; } static PyObject * KikiActionObject_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiActionObject, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiObject_setName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiObject_setName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setName((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiObject_getName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; std::string result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_getName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiObject const *)arg1)->getName(); { resultobj = SWIG_From_std_string((std::string)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_getPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiPos result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_getPos",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiObject const *)arg1)->getPos(); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_setPosition(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KVector *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiObject_setPosition",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setPosition((KVector const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_getPosition(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KVector result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_getPosition",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiObject const *)arg1)->getPosition(); { KVector * resultptr; resultptr = new KVector((KVector &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KVector, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_setOrientation(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KQuaternion *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiObject_setOrientation",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KQuaternion"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setOrientation((KQuaternion const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_getOrientation(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KQuaternion result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_getOrientation",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiObject const *)arg1)->getOrientation(); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_setCurrentOrientation(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KQuaternion *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiObject_setCurrentOrientation",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KQuaternion, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KQuaternion"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setCurrentOrientation((KQuaternion const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_getCurrentOrientation(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KQuaternion result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_getCurrentOrientation",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiObject const *)arg1)->getCurrentOrientation(); { KQuaternion * resultptr; resultptr = new KQuaternion((KQuaternion &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KQuaternion, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_isSpaceEgoistic(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_isSpaceEgoistic",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiObject const *)arg1)->isSpaceEgoistic(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiObject_getClassName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; char *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiObject_getClassName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (char *)((KikiObject const *)arg1)->getClassName(); resultobj = SWIG_FromCharPtr(result); return resultobj; fail: return NULL; } static PyObject * KikiObject_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiObject, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiBotStatus_getMoves(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBotStatus *arg1 = (KikiBotStatus *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBotStatus_getMoves",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBotStatus, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiBotStatus const *)arg1)->getMoves(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBotStatus_setMoves(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBotStatus *arg1 = (KikiBotStatus *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBotStatus_setMoves",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBotStatus, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setMoves(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBotStatus_addMoves(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBotStatus *arg1 = (KikiBotStatus *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBotStatus_addMoves",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBotStatus, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->addMoves(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBotStatus_getMinMoves(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBotStatus *arg1 = (KikiBotStatus *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBotStatus_getMinMoves",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBotStatus, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiBotStatus const *)arg1)->getMinMoves(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBotStatus_setMinMoves(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBotStatus *arg1 = (KikiBotStatus *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBotStatus_setMinMoves",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBotStatus, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setMinMoves(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiBotStatus_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiBotStatus, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiBotFume_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBotFume_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiBotFume::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiBotFume_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiBotFume, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiBot_isDead(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBot *arg1 = (KikiBot *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBot_isDead",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBot, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiBot const *)arg1)->isDead(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBot_getDown(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBot *arg1 = (KikiBot *) 0 ; KikiPos result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBot_getDown",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBot, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (arg1)->getDown(); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBot_getUp(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBot *arg1 = (KikiBot *) 0 ; KikiPos result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBot_getUp",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBot, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (arg1)->getUp(); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBot_getDir(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBot *arg1 = (KikiBot *) 0 ; KikiPos result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBot_getDir",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBot, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (arg1)->getDir(); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBot_setMove(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBot *arg1 = (KikiBot *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBot_setMove",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBot, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setMove(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBot_getStatus(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBot *arg1 = (KikiBot *) 0 ; KikiBotStatus *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiBot_getStatus",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiBot, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiBotStatus *)(arg1)->getStatus(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiBotStatus, 0); return resultobj; fail: return NULL; } static PyObject * KikiBot_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiBot, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiStatusDisplay_show(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiStatusDisplay *arg1 = (KikiStatusDisplay *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiStatusDisplay_show",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiStatusDisplay, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->show(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiStatusDisplay_hide(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiStatusDisplay *arg1 = (KikiStatusDisplay *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiStatusDisplay_hide",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiStatusDisplay, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->hide(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiStatusDisplay_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiStatusDisplay, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiPlayback_start(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string arg1 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayback_start",&obj0)) goto fail; { std::string *ptr = (std::string *)0; int res = SWIG_AsPtr_std_string(obj0, &ptr); if (!res) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = *ptr; if (res == SWIG_NEWOBJ) delete ptr; } KikiPlayback::start(arg1); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayback_stop(PyObject *, PyObject *args) { PyObject *resultobj = NULL; if(!PyArg_ParseTuple(args,(char *)":KikiPlayback_stop")) goto fail; KikiPlayback::stop(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiPlayback_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPlayback, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiPlayer_die(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_die",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->die(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_reborn(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_reborn",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->reborn(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_reset(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_reset",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->reset(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_startRecorder(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPlayer_startRecorder",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->startRecorder((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPlayer_saveRecorder(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_saveRecorder",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->saveRecorder(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_getProjection(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; KProjection *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_getProjection",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KProjection *)(arg1)->getProjection(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KProjection, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_handleKey(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; KKey *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPlayer_handleKey",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KKey, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KKey"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)(arg1)->handleKey((KKey const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_handleKeyRelease(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; KKey *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPlayer_handleKeyRelease",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KKey, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KKey"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)(arg1)->handleKeyRelease((KKey const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPlayer_recordKeyForAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPlayer *arg1 = (KikiPlayer *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPlayer_recordKeyForAction",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->recordKeyForAction((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPlayer_getActionForKey(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; std::string result; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_getActionForKey",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } result = KikiPlayer::getActionForKey((std::string const &)*arg1); { resultobj = SWIG_From_std_string((std::string)(result)); } if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KikiPlayer_getKeyForAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; std::string result; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPlayer_getKeyForAction",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } result = KikiPlayer::getKeyForAction((std::string const &)*arg1); { resultobj = SWIG_From_std_string((std::string)(result)); } if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KikiPlayer_setKeyForAction(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; std::string *arg2 = 0 ; int res1 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPlayer_setKeyForAction",&obj0,&obj1)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } KikiPlayer::setKeyForAction((std::string const &)*arg1,(std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res1 == SWIG_NEWOBJ) delete arg1; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPlayer_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPlayer_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiPlayer::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiPlayer_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPlayer, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiMutant(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMutant *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiMutant")) goto fail; result = (KikiMutant *)new KikiMutant(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMutant, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiMutant_die(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMutant *arg1 = (KikiMutant *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiMutant_die",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMutant, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->die(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiMutant_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMutant_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiMutant::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiMutant_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiMutant, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiSound_toggleMute(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiSound_toggleMute",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->toggleMute(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_setMute(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiSound_setMute",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setMute(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_isMute(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiSound_isMute",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiSound const *)arg1)->isMute(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_setSoundVolume(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiSound_setSoundVolume",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setSoundVolume(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_getSoundVolume(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiSound_getSoundVolume",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiSound const *)arg1)->getSoundVolume(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_playSound__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; int arg2 ; float arg3 ; int arg4 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KikiSound_playSound",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } (arg1)->playSound(arg2,arg3,arg4); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_playSound__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; int arg2 ; float arg3 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiSound_playSound",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->playSound(arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_playSound__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiSound_playSound",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->playSound(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSound_playSound(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiSound, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_KikiSound_playSound__SWIG_2(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiSound, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_KikiSound_playSound__SWIG_1(self,args); } } } } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiSound, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { return _wrap_KikiSound_playSound__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiSound_playSound'"); return NULL; } static PyObject *_wrap_KikiSound_playSoundAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSound *arg1 = (KikiSound *) 0 ; int arg2 ; KikiPos *arg3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiSound_playSoundAtPos",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->playSoundAtPos(arg2,(KikiPos const &)*arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiSound_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiSound, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiWorld_setSize__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; int arg2 ; int arg3 ; int arg4 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KikiWorld_setSize",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } (arg1)->setSize(arg2,arg3,arg4); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setSize__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; int arg2 ; int arg3 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiWorld_setSize",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->setSize(arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setSize(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiWorld, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_KikiWorld_setSize__SWIG_1(self,args); } } } } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiWorld, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { return _wrap_KikiWorld_setSize__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiWorld_setSize'"); return NULL; } static PyObject *_wrap_KikiWorld_getSize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiSize result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_getSize",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiWorld const *)arg1)->getSize(); { KikiSize * resultptr; resultptr = new KikiSize((KikiSize &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setName((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiWorld_getName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; std::string result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_getName",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiWorld const *)arg1)->getName(); { resultobj = SWIG_From_std_string((std::string)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_init(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_init",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->init(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setDisplayShadows(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setDisplayShadows",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setDisplayShadows(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setDisplayRaster(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setDisplayRaster",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setDisplayRaster(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setDisplayBorder(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setDisplayBorder",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setDisplayBorder(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setRasterSize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setRasterSize",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setRasterSize(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiWorld::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_changeCameraMode(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_changeCameraMode",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->changeCameraMode(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getCameraMode(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_getCameraMode",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiWorld const *)arg1)->getCameraMode(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setCameraMode(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_setCameraMode",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setCameraMode(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getProjection(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KProjection *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_getProjection",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KProjection *)(arg1)->getProjection(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KProjection, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_addObjectAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; KikiPos *arg3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiWorld_addObjectAtPos",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->addObjectAtPos(arg2,(KikiPos const &)*arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_setObjectAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; KikiPos *arg3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiWorld_setObjectAtPos",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->setObjectAtPos(arg2,(KikiPos const &)*arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_unsetObject(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_unsetObject",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->unsetObject(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_removeObject(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_removeObject",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->removeObject(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_deleteObject(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_deleteObject",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; (arg1)->deleteObject(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_deleteAllObjects(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_deleteAllObjects",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->deleteAllObjects(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_deleteObjectsWithClassName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_deleteObjectsWithClassName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->deleteObjectsWithClassName((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiWorld_getObjectWithName(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; std::string *arg2 = 0 ; KikiObject *result; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_getObjectWithName",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } result = (KikiObject *)(arg1)->getObjectWithName((std::string const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiObject, 0); if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiWorld_moveObjectToPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; KikiPos *arg3 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiWorld_moveObjectToPos",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } result = (bool)(arg1)->moveObjectToPos(arg2,(KikiPos const &)*arg3); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_objectWillMoveToPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; KikiPos *arg3 = 0 ; int arg4 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KikiWorld_objectWillMoveToPos",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } (arg1)->objectWillMoveToPos(arg2,(KikiPos const &)*arg3,arg4); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_objectMovedFromPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiObject *arg2 = (KikiObject *) 0 ; KikiPos *arg3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiWorld_objectMovedFromPos",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->objectMovedFromPos(arg2,(KikiPos const &)*arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getBotAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; KikiBot *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_getBotAtPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiBot *)((KikiWorld const *)arg1)->getBotAtPos((KikiPos const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiBot, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getOccupantAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; KikiObject *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_getOccupantAtPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiObject *)((KikiWorld const *)arg1)->getOccupantAtPos((KikiPos const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiObject, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getRealOccupantAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; KikiObject *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_getRealOccupantAtPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiObject *)((KikiWorld const *)arg1)->getRealOccupantAtPos((KikiPos const &)*arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiObject, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getNearestValidPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; KikiPos result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_getNearestValidPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KikiWorld const *)arg1)->getNearestValidPos((KikiPos const &)*arg2); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_isInvalidPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_isInvalidPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)((KikiWorld const *)arg1)->isInvalidPos((KikiPos const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_isValidPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_isValidPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)((KikiWorld const *)arg1)->isValidPos((KikiPos const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_isUnoccupiedPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_isUnoccupiedPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)((KikiWorld const *)arg1)->isUnoccupiedPos((KikiPos const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_isOccupiedPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_isOccupiedPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)((KikiWorld const *)arg1)->isOccupiedPos((KikiPos const &)*arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_posToIndex(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos *arg2 = 0 ; int result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_posToIndex",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(2)) SWIG_fail; } result = (int)((KikiWorld const *)arg1)->posToIndex((KikiPos const &)*arg2); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_indexToPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; int arg2 ; KikiPos result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWorld_indexToPos",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = ((KikiWorld const *)arg1)->indexToPos(arg2); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWorld_getPickedPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWorld *arg1 = (KikiWorld *) 0 ; KikiPos result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWorld_getPickedPos",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = KikiWorld_getPickedPos(arg1); { KikiPos * resultptr; resultptr = new KikiPos((KikiPos &)(result)); resultobj = SWIG_NewPointerObj((void *)(resultptr), SWIGTYPE_p_KikiPos, 1); } return resultobj; fail: return NULL; } static PyObject * KikiWorld_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiWorld, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KEventHandler_quit(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KEventHandler *arg1 = (KEventHandler *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KEventHandler_quit",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KEventHandler, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->quit(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_getMouseState(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int result; if(!PyArg_ParseTuple(args,(char *)":KEventHandler_getMouseState")) goto fail; result = (int)KEventHandler::getMouseState(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_getMousePos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KPosition result; if(!PyArg_ParseTuple(args,(char *)":KEventHandler_getMousePos")) goto fail; result = KEventHandler::getMousePos(); { resultobj = PyTuple_New(2); PyTuple_SetItem(resultobj, 0, PyInt_FromLong((&result)->x)); PyTuple_SetItem(resultobj, 1, PyInt_FromLong((&result)->y)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_getMouseDelta(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KPosition result; if(!PyArg_ParseTuple(args,(char *)":KEventHandler_getMouseDelta")) goto fail; result = KEventHandler::getMouseDelta(); { resultobj = PyTuple_New(2); PyTuple_SetItem(resultobj, 0, PyInt_FromLong((&result)->x)); PyTuple_SetItem(resultobj, 1, PyInt_FromLong((&result)->y)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_getScreenSize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KSize result; if(!PyArg_ParseTuple(args,(char *)":KEventHandler_getScreenSize")) goto fail; result = KEventHandler::getScreenSize(); { resultobj = PyTuple_New(2); PyTuple_SetItem(resultobj, 0, PyInt_FromLong((&result)->w)); PyTuple_SetItem(resultobj, 1, PyInt_FromLong((&result)->h)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_setScreenSize__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; bool arg3 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KEventHandler_setScreenSize",&obj0,&obj1,&obj2)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (bool)(SWIG_As_bool(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (bool)KEventHandler::setScreenSize(arg1,arg2,arg3); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_setScreenSize__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KEventHandler_setScreenSize",&obj0,&obj1)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (bool)KEventHandler::setScreenSize(arg1,arg2); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_setScreenSize(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_KEventHandler_setScreenSize__SWIG_1(self,args); } } } if (argc == 3) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_bool(argv[2]); if (_v) { return _wrap_KEventHandler_setScreenSize__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KEventHandler_setScreenSize'"); return NULL; } static PyObject *_wrap_KEventHandler_getFullscreen(PyObject *, PyObject *args) { PyObject *resultobj = NULL; bool result; if(!PyArg_ParseTuple(args,(char *)":KEventHandler_getFullscreen")) goto fail; result = (bool)KEventHandler::getFullscreen(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_setFullscreen(PyObject *, PyObject *args) { PyObject *resultobj = NULL; bool arg1 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KEventHandler_setFullscreen",&obj0)) goto fail; { arg1 = (bool)(SWIG_As_bool(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } KEventHandler::setFullscreen(arg1); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_getTime(PyObject *, PyObject *args) { PyObject *resultobj = NULL; unsigned int result; if(!PyArg_ParseTuple(args,(char *)":KEventHandler_getTime")) goto fail; result = (unsigned int)KEventHandler::getTime(); { resultobj = SWIG_From_unsigned_SS_int((unsigned int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_setWireframeMode(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KEventHandler *arg1 = (KEventHandler *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KEventHandler_setWireframeMode",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KEventHandler, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setWireframeMode(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_setDisplayFps(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KEventHandler *arg1 = (KEventHandler *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KEventHandler_setDisplayFps",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KEventHandler, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setDisplayFps(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KEventHandler_getDisplayFps(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KEventHandler *arg1 = (KEventHandler *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KEventHandler_getDisplayFps",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KEventHandler, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KEventHandler const *)arg1)->getDisplayFps(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject * KEventHandler_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KEventHandler, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiController_gui_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiGUI *arg2 = (KikiGUI *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_gui_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiGUI, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->gui = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_gui_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiGUI *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_gui_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiGUI *) ((arg1)->gui); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGUI, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_sound_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiSound *arg2 = (KikiSound *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_sound_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiSound, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->sound = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_sound_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiSound *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_sound_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiSound *) ((arg1)->sound); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSound, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_world_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiWorld *arg2 = (KikiWorld *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_world_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiWorld, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->world = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_world_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiWorld *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_world_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiWorld *) ((arg1)->world); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWorld, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_player_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiPlayer *arg2 = (KikiPlayer *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_player_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPlayer, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->player = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_player_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiPlayer *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_player_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPlayer *) ((arg1)->player); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPlayer, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_python_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiPython *arg2 = (KikiPython *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_python_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->python = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_python_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiPython *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_python_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPython *) ((arg1)->python); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPython, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_player_status_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiStatusDisplay *arg2 = (KikiStatusDisplay *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_player_status_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiStatusDisplay, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->player_status = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_player_status_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiStatusDisplay *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_player_status_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiStatusDisplay *) ((arg1)->player_status); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiStatusDisplay, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_timer_event_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiEvent *arg2 = (KikiEvent *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_timer_event_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiEvent, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->timer_event = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_timer_event_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiEvent *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_timer_event_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiEvent *) ((arg1)->timer_event); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiEvent, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_getPlayer(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; KikiPlayer *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_getPlayer",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPlayer *)(arg1)->getPlayer(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPlayer, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_unmapMsTime(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int arg2 ; int result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_unmapMsTime",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (int)(arg1)->unmapMsTime(arg2); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_mapMsTime(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int arg2 ; int result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_mapMsTime",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (int)(arg1)->mapMsTime(arg2); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_setSpeed(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_setSpeed",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setSpeed(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_getSpeed(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_getSpeed",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiController const *)arg1)->getSpeed(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_getKikiHome(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; std::string result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_getKikiHome",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (arg1)->getKikiHome(); { resultobj = SWIG_From_std_string((std::string)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_setGamma(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_setGamma",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setGamma(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_getGamma(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_getGamma",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiController const *)arg1)->getGamma(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_changeScreenSize__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int arg2 ; int arg3 ; bool arg4 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KikiController_changeScreenSize",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (bool)(SWIG_As_bool(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (bool)(arg1)->changeScreenSize(arg2,arg3,arg4); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_changeScreenSize__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; int arg2 ; int arg3 ; bool result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiController_changeScreenSize",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (bool)(arg1)->changeScreenSize(arg2,arg3); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiController_changeScreenSize(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiController, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_KikiController_changeScreenSize__SWIG_1(self,args); } } } } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiController, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { _v = SWIG_Check_bool(argv[3]); if (_v) { return _wrap_KikiController_changeScreenSize__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiController_changeScreenSize'"); return NULL; } static PyObject *_wrap_KikiController_displayText(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; std::string *arg2 = 0 ; int arg3 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiController_displayText",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->displayText((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiController_getLocalizedString(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; std::string *arg2 = 0 ; std::string result; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiController_getLocalizedString",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } result = (arg1)->getLocalizedString((std::string const &)*arg2); { resultobj = SWIG_From_std_string((std::string)(result)); } if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiController_isDebugVersion(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiController *arg1 = (KikiController *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiController_isDebugVersion",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)(arg1)->isDebugVersion(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject * KikiController_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiController, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static int _wrap_Controller_set(PyObject *_val) { { KikiController * temp; if ((SWIG_ConvertPtr(_val, (void **)(&temp), SWIGTYPE_p_KikiController, SWIG_POINTER_EXCEPTION)) == -1) { SWIG_append_errmsg("C/C++ variable 'Controller'"); return 1; } Controller = *((KikiController *) temp); } return 0; } static PyObject *_wrap_Controller_get(void) { PyObject *pyobj = NULL; pyobj = SWIG_NewPointerObj((void *)(&Controller), SWIGTYPE_p_KikiController, 0); return pyobj; } static PyObject *_wrap_replaceTabs(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; int arg2 ; char *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:replaceTabs",&obj0,&obj1)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (char *)replaceTabs((std::string const &)*arg1,arg2); resultobj = SWIG_FromCharPtr(result); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KWindow_isVisible(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KWindow_isVisible",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KWindow const *)arg1)->isVisible(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_setVisibility(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KWindow_setVisibility",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setVisibility(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_toggleVisibility(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KWindow_toggleVisibility",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->toggleVisibility(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_maximize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KWindow_maximize",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->maximize(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_show(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KWindow_show",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->show(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_hide(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KWindow_hide",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->hide(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_close(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KWindow_close",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->close(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_setSize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; KSize arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KWindow_setSize",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = KSize(PyInt_AsLong(PyTuple_GetItem(obj1, 0)), PyInt_AsLong(PyTuple_GetItem(obj1, 1))); if (PyErr_Occurred()) return NULL; } (arg1)->setSize(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KWindow_setPosition(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KWindow *arg1 = (KWindow *) 0 ; KPosition *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KWindow_setPosition",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KWindow, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = new KPosition(PyInt_AsLong(PyTuple_GetItem(obj1, 0)), PyInt_AsLong(PyTuple_GetItem(obj1, 1))); if (PyErr_Occurred()) return NULL; } (arg1)->setPosition((KPosition const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; { if (arg2) delete arg2; } return resultobj; fail: { if (arg2) delete arg2; } return NULL; } static PyObject * KWindow_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KWindow, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; bool arg2 ; int arg3 ; KikiText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiText",&obj0,&obj1,&obj2)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KikiText *)new KikiText((std::string const &)*arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; bool arg2 ; KikiText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiText",&obj0,&obj1)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiText *)new KikiText((std::string const &)*arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiText__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; KikiText *result; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiText",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } result = (KikiText *)new KikiText((std::string const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiText__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiText")) goto fail; result = (KikiText *)new KikiText(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiText, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiText(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiText__SWIG_3(self,args); } if (argc == 1) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { return _wrap_new_KikiText__SWIG_2(self,args); } } if (argc == 2) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_new_KikiText__SWIG_1(self,args); } } } if (argc == 3) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_new_KikiText__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiText'"); return NULL; } static PyObject *_wrap_KikiText_setText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; std::string *arg2 = 0 ; int arg3 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiText_setText",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->setText((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiText_setText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_setText",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setText((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiText_setText(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { return _wrap_KikiText_setText__SWIG_1(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_KikiText_setText__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiText_setText'"); return NULL; } static PyObject *_wrap_KikiText_getText(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; std::string *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_getText",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string const &_result_ref = ((KikiText const *)arg1)->getText(); result = (std::string *) &_result_ref; } { resultobj = SWIG_From_std_string((std::string)(*result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_clear(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_clear",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->clear(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_isEmpty(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_isEmpty",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiText const *)arg1)->isEmpty(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_addText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; std::string *arg2 = 0 ; float arg3 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiText_addText",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->addText((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiText_addText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_addText",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->addText((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiText_addText(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { return _wrap_KikiText_addText__SWIG_1(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_KikiText_addText__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiText_addText'"); return NULL; } static PyObject *_wrap_KikiText_getColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; KColor *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_getColor",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { KColor const &_result_ref = ((KikiText const *)arg1)->getColor(); result = (KColor *) &_result_ref; } resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KColor, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_setColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_setColor",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setColor((KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_setAlpha(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_setAlpha",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setAlpha(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_isAnimated(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_isAnimated",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiText const *)arg1)->isAnimated(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_setAnimated(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_setAnimated",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setAnimated(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_isCentered(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_isCentered",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiText const *)arg1)->isCentered(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_setCentered(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_setCentered",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setCentered(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_getWidth(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_getWidth",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KikiText const *)arg1)->getWidth(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_getHeight(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiText *arg1 = (KikiText *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiText_getHeight",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KikiText const *)arg1)->getHeight(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiText_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiText_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiText::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiText_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiText, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject * KikiGUI_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiGUI, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiScreenText(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiScreenText")) goto fail; result = (KikiScreenText *)new KikiScreenText(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiScreenText, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiScreenText_addText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *arg1 = (KikiScreenText *) 0 ; std::string *arg2 = 0 ; float arg3 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiScreenText_addText",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScreenText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->addText((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScreenText_addText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *arg1 = (KikiScreenText *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiScreenText_addText",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScreenText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->addText((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScreenText_addText(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScreenText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { return _wrap_KikiScreenText_addText__SWIG_1(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScreenText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_KikiScreenText_addText__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiScreenText_addText'"); return NULL; } static PyObject *_wrap_KikiScreenText_setText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *arg1 = (KikiScreenText *) 0 ; std::string *arg2 = 0 ; int arg3 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiScreenText_setText",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScreenText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->setText((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScreenText_setText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *arg1 = (KikiScreenText *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiScreenText_setText",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScreenText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setText((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScreenText_setText(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScreenText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { return _wrap_KikiScreenText_setText__SWIG_1(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScreenText, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_KikiScreenText_setText__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiScreenText_setText'"); return NULL; } static PyObject *_wrap_KikiScreenText_show(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *arg1 = (KikiScreenText *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiScreenText_show",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScreenText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->show(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiScreenText_getProjection(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScreenText *arg1 = (KikiScreenText *) 0 ; KProjection *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiScreenText_getProjection",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScreenText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KProjection *)(arg1)->getProjection(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KProjection, 0); return resultobj; fail: return NULL; } static PyObject * KikiScreenText_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiScreenText, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiMenu__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiMenu *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiMenu",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiMenu *)new KikiMenu(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMenu__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiMenu")) goto fail; result = (KikiMenu *)new KikiMenu(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMenu(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiMenu__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiMenu__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiMenu'"); return NULL; } static PyObject *_wrap_KikiMenu_addItem__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; std::string *arg2 = 0 ; KikiAction *arg3 = (KikiAction *) 0 ; bool arg4 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KikiMenu_addItem",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; { arg4 = (bool)(SWIG_As_bool(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } (arg1)->addItem((std::string const &)*arg2,arg3,arg4); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiMenu_addItem__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; std::string *arg2 = 0 ; KikiAction *arg3 = (KikiAction *) 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiMenu_addItem",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; (arg1)->addItem((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiMenu_addItem__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMenu_addItem",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->addItem((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiMenu_addItem(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { return _wrap_KikiMenu_addItem__SWIG_2(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { { void *ptr; if (SWIG_ConvertPtr(argv[2], &ptr, SWIGTYPE_p_KikiAction, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_KikiMenu_addItem__SWIG_1(self,args); } } } } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { { void *ptr; if (SWIG_ConvertPtr(argv[2], &ptr, SWIGTYPE_p_KikiAction, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_bool(argv[3]); if (_v) { return _wrap_KikiMenu_addItem__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiMenu_addItem'"); return NULL; } static PyObject *_wrap_KikiMenu_setCurrentIndex(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; int arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMenu_setCurrentIndex",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setCurrentIndex(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiMenu_setEscapeActive__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMenu_setEscapeActive",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setEscapeActive(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiMenu_setEscapeActive__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiMenu_setEscapeActive",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->setEscapeActive(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiMenu_setEscapeActive(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 1) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_KikiMenu_setEscapeActive__SWIG_1(self,args); } } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_KikiMenu_setEscapeActive__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiMenu_setEscapeActive'"); return NULL; } static PyObject *_wrap_KikiMenu_circular_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMenu_circular_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } if (arg1) (arg1)->circular = arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiMenu_circular_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMenu *arg1 = (KikiMenu *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiMenu_circular_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool) ((arg1)->circular); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject * KikiMenu_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiMenu, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiColumnMenu__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; KikiColumnMenu *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiColumnMenu",&obj0,&obj1)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiColumnMenu *)new KikiColumnMenu(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiColumnMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiColumnMenu__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiColumnMenu *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiColumnMenu",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiColumnMenu *)new KikiColumnMenu(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiColumnMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiColumnMenu__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiColumnMenu *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiColumnMenu")) goto fail; result = (KikiColumnMenu *)new KikiColumnMenu(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiColumnMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiColumnMenu(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiColumnMenu__SWIG_2(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiColumnMenu__SWIG_1(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_new_KikiColumnMenu__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiColumnMenu'"); return NULL; } static PyObject * KikiColumnMenu_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiColumnMenu, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiScrollMenu__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; int arg3 ; KikiScrollMenu *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiScrollMenu",&obj0,&obj1,&obj2)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KikiScrollMenu *)new KikiScrollMenu(arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiScrollMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiScrollMenu__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; KikiScrollMenu *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiScrollMenu",&obj0,&obj1)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiScrollMenu *)new KikiScrollMenu(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiScrollMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiScrollMenu__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiScrollMenu *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiScrollMenu",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiScrollMenu *)new KikiScrollMenu(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiScrollMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiScrollMenu__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScrollMenu *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiScrollMenu")) goto fail; result = (KikiScrollMenu *)new KikiScrollMenu(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiScrollMenu, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiScrollMenu(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiScrollMenu__SWIG_3(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiScrollMenu__SWIG_2(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_new_KikiScrollMenu__SWIG_1(self,args); } } } if (argc == 3) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { _v = SWIG_Check_int(argv[2]); if (_v) { return _wrap_new_KikiScrollMenu__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiScrollMenu'"); return NULL; } static PyObject *_wrap_KikiScrollMenu_getCurrentIndex(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScrollMenu *arg1 = (KikiScrollMenu *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiScrollMenu_getCurrentIndex",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScrollMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)(arg1)->getCurrentIndex(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiScrollMenu_addItem__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScrollMenu *arg1 = (KikiScrollMenu *) 0 ; std::string *arg2 = 0 ; KikiAction *arg3 = (KikiAction *) 0 ; bool arg4 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:KikiScrollMenu_addItem",&obj0,&obj1,&obj2,&obj3)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScrollMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; { arg4 = (bool)(SWIG_As_bool(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } (arg1)->addItem((std::string const &)*arg2,arg3,arg4); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScrollMenu_addItem__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScrollMenu *arg1 = (KikiScrollMenu *) 0 ; std::string *arg2 = 0 ; KikiAction *arg3 = (KikiAction *) 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiScrollMenu_addItem",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScrollMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiAction, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; (arg1)->addItem((std::string const &)*arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScrollMenu_addItem__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiScrollMenu *arg1 = (KikiScrollMenu *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiScrollMenu_addItem",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiScrollMenu, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->addItem((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiScrollMenu_addItem(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScrollMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { return _wrap_KikiScrollMenu_addItem__SWIG_2(self,args); } } } if (argc == 3) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScrollMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { { void *ptr; if (SWIG_ConvertPtr(argv[2], &ptr, SWIGTYPE_p_KikiAction, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_KikiScrollMenu_addItem__SWIG_1(self,args); } } } } if (argc == 4) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiScrollMenu, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); if (_v) { { void *ptr; if (SWIG_ConvertPtr(argv[2], &ptr, SWIGTYPE_p_KikiAction, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_bool(argv[3]); if (_v) { return _wrap_KikiScrollMenu_addItem__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiScrollMenu_addItem'"); return NULL; } static PyObject * KikiScrollMenu_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiScrollMenu, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiPageText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; bool arg2 ; bool arg3 ; KikiPageText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiPageText",&obj0,&obj1,&obj2)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (bool)(SWIG_As_bool(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KikiPageText *)new KikiPageText((std::string const &)*arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPageText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiPageText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; bool arg2 ; KikiPageText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiPageText",&obj0,&obj1)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiPageText *)new KikiPageText((std::string const &)*arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPageText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiPageText(PyObject *self, PyObject *args) { int argc; PyObject *argv[4]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 3); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 2) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_new_KikiPageText__SWIG_1(self,args); } } } if (argc == 3) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { _v = SWIG_Check_bool(argv[2]); if (_v) { return _wrap_new_KikiPageText__SWIG_0(self,args); } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiPageText'"); return NULL; } static PyObject * KikiPageText_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPageText, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject * KikiFace_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiFace, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiWire__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; int arg2 ; KikiWire *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiWire",&obj0,&obj1)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiWire *)new KikiWire(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWire, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiWire__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiWire *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiWire",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiWire *)new KikiWire(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWire, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiWire__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWire *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiWire")) goto fail; result = (KikiWire *)new KikiWire(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWire, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiWire(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiWire__SWIG_2(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiWire__SWIG_1(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { _v = SWIG_Check_int(argv[1]); if (_v) { return _wrap_new_KikiWire__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiWire'"); return NULL; } static PyObject *_wrap_KikiWire_setActive__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWire *arg1 = (KikiWire *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWire_setActive",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWire, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setActive(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWire_setActive__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWire *arg1 = (KikiWire *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiWire_setActive",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiWire, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->setActive(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWire_setActive(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 1) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiWire, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_KikiWire_setActive__SWIG_1(self,args); } } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiWire, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_KikiWire_setActive__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiWire_setActive'"); return NULL; } static PyObject *_wrap_KikiWire_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWire_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiWire::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiWire_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiWire, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToWire(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiWire *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToWire",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiWire *)kikiObjectToWire(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWire, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGear__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiGear *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiGear",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiGear *)new KikiGear(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGear, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGear__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiGear *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiGear")) goto fail; result = (KikiGear *)new KikiGear(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGear, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGear(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiGear__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiGear__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiGear'"); return NULL; } static PyObject *_wrap_KikiGear_setActive__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiGear *arg1 = (KikiGear *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiGear_setActive",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiGear, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setActive(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiGear_setActive__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiGear *arg1 = (KikiGear *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiGear_setActive",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiGear, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->setActive(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiGear_setActive(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 1) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiGear, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_KikiGear_setActive__SWIG_1(self,args); } } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KikiGear, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_KikiGear_setActive__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KikiGear_setActive'"); return NULL; } static PyObject *_wrap_KikiGear_updateActive(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiGear *arg1 = (KikiGear *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiGear_updateActive",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiGear, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->updateActive(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiGear_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiGear_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiGear::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiGear_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiGear, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToGear(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiGear *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToGear",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiGear *)kikiObjectToGear(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGear, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValve__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiValve *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiValve",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiValve *)new KikiValve(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValve, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValve__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiValve *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiValve")) goto fail; result = (KikiValve *)new KikiValve(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValve, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValve(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiValve__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiValve__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiValve'"); return NULL; } static PyObject *_wrap_KikiValve_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiValve_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiValve::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiValve_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiValve, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToValve(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiValve *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToValve",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiValve *)kikiObjectToValve(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValve, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMotorCylinder__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiMotorCylinder *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiMotorCylinder",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiMotorCylinder *)new KikiMotorCylinder(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMotorCylinder, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMotorCylinder__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMotorCylinder *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiMotorCylinder")) goto fail; result = (KikiMotorCylinder *)new KikiMotorCylinder(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMotorCylinder, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMotorCylinder(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiMotorCylinder__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiMotorCylinder__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiMotorCylinder'"); return NULL; } static PyObject *_wrap_KikiMotorCylinder_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMotorCylinder_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiMotorCylinder::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiMotorCylinder_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiMotorCylinder, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiMotorGear__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiMotorGear *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiMotorGear",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiMotorGear *)new KikiMotorGear(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMotorGear, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMotorGear__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiMotorGear *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiMotorGear")) goto fail; result = (KikiMotorGear *)new KikiMotorGear(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiMotorGear, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiMotorGear(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiMotorGear__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiMotorGear__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiMotorGear'"); return NULL; } static PyObject *_wrap_KikiMotorGear_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMotorGear_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiMotorGear::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiMotorGear_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiMotorGear, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiGenerator__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiGenerator *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiGenerator",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiGenerator *)new KikiGenerator(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGenerator, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGenerator__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiGenerator *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiGenerator")) goto fail; result = (KikiGenerator *)new KikiGenerator(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGenerator, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGenerator(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiGenerator__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiGenerator__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiGenerator'"); return NULL; } static PyObject *_wrap_KikiGenerator_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiGenerator_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiGenerator::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiGenerator_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiGenerator, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiLight(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiLight *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiLight")) goto fail; result = (KikiLight *)new KikiLight(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiLight, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiLight_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiLight_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiLight::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiLight_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiLight, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToLight(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiLight *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToLight",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiLight *)kikiObjectToLight(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiLight, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiCellText__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; float arg2 ; bool arg3 ; int arg4 ; KikiCellText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KikiCellText",&obj0,&obj1,&obj2,&obj3)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (bool)(SWIG_As_bool(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KikiCellText *)new KikiCellText((std::string const &)*arg1,arg2,arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiCellText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiCellText__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; float arg2 ; bool arg3 ; KikiCellText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiCellText",&obj0,&obj1,&obj2)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (bool)(SWIG_As_bool(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KikiCellText *)new KikiCellText((std::string const &)*arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiCellText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiCellText__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; float arg2 ; KikiCellText *result; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiCellText",&obj0,&obj1)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiCellText *)new KikiCellText((std::string const &)*arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiCellText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiCellText__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; KikiCellText *result; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiCellText",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } result = (KikiCellText *)new KikiCellText((std::string const &)*arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiCellText, 1); if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_new_KikiCellText(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 1) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { return _wrap_new_KikiCellText__SWIG_3(self,args); } } if (argc == 2) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { return _wrap_new_KikiCellText__SWIG_2(self,args); } } } if (argc == 3) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_bool(argv[2]); if (_v) { return _wrap_new_KikiCellText__SWIG_1(self,args); } } } } if (argc == 4) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_bool(argv[2]); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { return _wrap_new_KikiCellText__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiCellText'"); return NULL; } static PyObject *_wrap_KikiCellText_setOffset(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiCellText *arg1 = (KikiCellText *) 0 ; KVector *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiCellText_setOffset",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiCellText, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KVector, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KVector"); } if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setOffset((KVector const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiCellText_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiCellText_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiCellText::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiCellText_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiCellText, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToCellText(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiCellText *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToCellText",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiCellText *)kikiObjectToCellText(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiCellText, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiStone__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; bool arg2 ; KikiStone *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiStone",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiStone *)new KikiStone(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiStone, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiStone__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KColor *arg1 = (KColor *) 0 ; KikiStone *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiStone",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiStone *)new KikiStone(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiStone, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiStone__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiStone *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiStone")) goto fail; result = (KikiStone *)new KikiStone(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiStone, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiStone(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiStone__SWIG_2(self,args); } if (argc == 1) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KColor, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { return _wrap_new_KikiStone__SWIG_1(self,args); } } if (argc == 2) { int _v; { void *ptr; if (SWIG_ConvertPtr(argv[0], &ptr, SWIGTYPE_p_KColor, 0) == -1) { _v = 0; PyErr_Clear(); } else { _v = 1; } } if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_new_KikiStone__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiStone'"); return NULL; } static PyObject *_wrap_KikiStone_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiStone_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiStone::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiStone_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiStone, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToStone(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiStone *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToStone",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiStone *)kikiObjectToStone(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiStone, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiWireStone(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWireStone *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiWireStone")) goto fail; result = (KikiWireStone *)new KikiWireStone(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWireStone, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWireStone_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWireStone_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiWireStone::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiWireStone_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiWireStone, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToWireStone(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiWireStone *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToWireStone",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiWireStone *)kikiObjectToWireStone(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWireStone, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiWall(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiWall *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiWall")) goto fail; result = (KikiWall *)new KikiWall(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWall, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiWall_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiWall_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiWall::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiWall_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiWall, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToWall(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiWall *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToWall",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiWall *)kikiObjectToWall(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiWall, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiBomb(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiBomb *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiBomb")) goto fail; result = (KikiBomb *)new KikiBomb(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiBomb, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBomb_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBomb_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiBomb::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiBomb_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiBomb, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToBomb(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiBomb *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToBomb",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiBomb *)kikiObjectToBomb(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiBomb, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiSwitch__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; bool arg1 ; KikiSwitch *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiSwitch",&obj0)) goto fail; { arg1 = (bool)(SWIG_As_bool(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiSwitch *)new KikiSwitch(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSwitch, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiSwitch__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSwitch *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiSwitch")) goto fail; result = (KikiSwitch *)new KikiSwitch(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSwitch, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiSwitch(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiSwitch__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_bool(argv[0]); if (_v) { return _wrap_new_KikiSwitch__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiSwitch'"); return NULL; } static PyObject *_wrap_KikiSwitch_toggle(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSwitch *arg1 = (KikiSwitch *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiSwitch_toggle",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSwitch, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->toggle(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSwitch_setActive(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSwitch *arg1 = (KikiSwitch *) 0 ; bool arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiSwitch_setActive",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSwitch, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setActive(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSwitch_isActive(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSwitch *arg1 = (KikiSwitch *) 0 ; bool result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiSwitch_isActive",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiSwitch, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (bool)((KikiSwitch const *)arg1)->isActive(); { resultobj = SWIG_From_bool((bool)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiSwitch_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiSwitch_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiSwitch::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiSwitch_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiSwitch, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToSwitch(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiSwitch *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToSwitch",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiSwitch *)kikiObjectToSwitch(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSwitch, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGate__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; bool arg1 ; KikiGate *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiGate",&obj0)) goto fail; { arg1 = (bool)(SWIG_As_bool(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiGate *)new KikiGate(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGate, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGate__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiGate *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiGate")) goto fail; result = (KikiGate *)new KikiGate(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGate, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiGate(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiGate__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_bool(argv[0]); if (_v) { return _wrap_new_KikiGate__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiGate'"); return NULL; } static PyObject *_wrap_KikiGate_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiGate_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiGate::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiGate_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiGate, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToGate(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiGate *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToGate",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiGate *)kikiObjectToGate(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiGate, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAtom_setValue(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAtom *arg1 = (KikiAtom *) 0 ; float arg2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiAtom_setValue",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAtom, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } (arg1)->setValue(arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiAtom_getValue(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiAtom *arg1 = (KikiAtom *) 0 ; float result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiAtom_getValue",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiAtom, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (float)((KikiAtom const *)arg1)->getValue(); { resultobj = SWIG_From_float((float)(result)); } return resultobj; fail: return NULL; } static PyObject * KikiAtom_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiAtom, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiMovesAtom_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiMovesAtom_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiMovesAtom::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiMovesAtom_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiMovesAtom, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiValueAtom__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; int arg4 ; KikiValueAtom *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOOO:new_KikiValueAtom",&obj0,&obj1,&obj2,&obj3)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } { arg4 = (int)(SWIG_As_int(obj3)); if (SWIG_arg_fail(4)) SWIG_fail; } result = (KikiValueAtom *)new KikiValueAtom(arg1,arg2,arg3,arg4); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValueAtom, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValueAtom__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; float arg3 ; KikiValueAtom *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:new_KikiValueAtom",&obj0,&obj1,&obj2)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (float)(SWIG_As_float(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } result = (KikiValueAtom *)new KikiValueAtom(arg1,arg2,arg3); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValueAtom, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValueAtom__SWIG_2(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; float arg2 ; KikiValueAtom *result; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:new_KikiValueAtom",&obj0,&obj1)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } { arg2 = (float)(SWIG_As_float(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } result = (KikiValueAtom *)new KikiValueAtom(arg1,arg2); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValueAtom, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValueAtom__SWIG_3(PyObject *, PyObject *args) { PyObject *resultobj = NULL; float arg1 ; KikiValueAtom *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiValueAtom",&obj0)) goto fail; { arg1 = (float)(SWIG_As_float(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiValueAtom *)new KikiValueAtom(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValueAtom, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValueAtom__SWIG_4(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiValueAtom *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiValueAtom")) goto fail; result = (KikiValueAtom *)new KikiValueAtom(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiValueAtom, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiValueAtom(PyObject *self, PyObject *args) { int argc; PyObject *argv[5]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 4); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiValueAtom__SWIG_4(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { return _wrap_new_KikiValueAtom__SWIG_3(self,args); } } if (argc == 2) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { return _wrap_new_KikiValueAtom__SWIG_2(self,args); } } } if (argc == 3) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { return _wrap_new_KikiValueAtom__SWIG_1(self,args); } } } } if (argc == 4) { int _v; _v = SWIG_Check_float(argv[0]); if (_v) { _v = SWIG_Check_float(argv[1]); if (_v) { _v = SWIG_Check_float(argv[2]); if (_v) { _v = SWIG_Check_int(argv[3]); if (_v) { return _wrap_new_KikiValueAtom__SWIG_0(self,args); } } } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiValueAtom'"); return NULL; } static PyObject *_wrap_KikiValueAtom_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiValueAtom_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiValueAtom::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiValueAtom_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiValueAtom, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_new_KikiSpikes__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; int arg1 ; KikiSpikes *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:new_KikiSpikes",&obj0)) goto fail; { arg1 = (int)(SWIG_As_int(obj0)); if (SWIG_arg_fail(1)) SWIG_fail; } result = (KikiSpikes *)new KikiSpikes(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSpikes, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiSpikes__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiSpikes *result; if(!PyArg_ParseTuple(args,(char *)":new_KikiSpikes")) goto fail; result = (KikiSpikes *)new KikiSpikes(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSpikes, 1); return resultobj; fail: return NULL; } static PyObject *_wrap_new_KikiSpikes(PyObject *self, PyObject *args) { int argc; PyObject *argv[2]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 1); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 0) { return _wrap_new_KikiSpikes__SWIG_1(self,args); } if (argc == 1) { int _v; _v = SWIG_Check_int(argv[0]); if (_v) { return _wrap_new_KikiSpikes__SWIG_0(self,args); } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'new_KikiSpikes'"); return NULL; } static PyObject *_wrap_KikiSpikes_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiSpikes_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiSpikes::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiSpikes_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiSpikes, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_kikiObjectToSpikes(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiObject *arg1 = (KikiObject *) 0 ; KikiSpikes *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:kikiObjectToSpikes",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiObject, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiSpikes *)kikiObjectToSpikes(arg1); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiSpikes, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiBullet_setObjectColor(PyObject *, PyObject *args) { PyObject *resultobj = NULL; char *arg1 = (char *) 0 ; KColor *arg2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiBullet_setObjectColor",&obj0,&obj1)) goto fail; if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { SWIG_arg_fail(1);SWIG_fail; } { SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KColor, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg2 == NULL) { SWIG_null_ref("KColor"); } if (SWIG_arg_fail(2)) SWIG_fail; } KikiBullet::setObjectColor((char const *)arg1,(KColor const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KikiBullet_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiBullet, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KConsole__print(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KConsole__print",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } KConsole::print((std::string const &)*arg1); Py_INCREF(Py_None); resultobj = Py_None; if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KConsole_write(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KConsole_write",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } KConsole::write((std::string const &)*arg1); Py_INCREF(Py_None); resultobj = Py_None; if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KConsole_printError__SWIG_0(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; bool arg2 ; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KConsole_printError",&obj0,&obj1)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } { arg2 = (bool)(SWIG_As_bool(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } KConsole::printError((std::string const &)*arg1,arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KConsole_printError__SWIG_1(PyObject *, PyObject *args) { PyObject *resultobj = NULL; std::string *arg1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KConsole_printError",&obj0)) goto fail; { std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(obj0, &ptr); if (!res1) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj0); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(1)) SWIG_fail; arg1 = ptr; } KConsole::printError((std::string const &)*arg1); Py_INCREF(Py_None); resultobj = Py_None; if (res1 == SWIG_NEWOBJ) delete arg1; return resultobj; fail: if (res1 == SWIG_NEWOBJ) delete arg1; return NULL; } static PyObject *_wrap_KConsole_printError(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; argc = PyObject_Length(args); for (ii = 0; (ii < argc) && (ii < 2); ii++) { argv[ii] = PyTuple_GetItem(args,ii); } if (argc == 1) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { return _wrap_KConsole_printError__SWIG_1(self,args); } } if (argc == 2) { int _v; _v = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); if (_v) { _v = SWIG_Check_bool(argv[1]); if (_v) { return _wrap_KConsole_printError__SWIG_0(self,args); } } } PyErr_SetString(PyExc_NotImplementedError,"No matching function for overloaded 'KConsole_printError'"); return NULL; } static PyObject *_wrap_KConsole_getConsole(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KConsole *result; if(!PyArg_ParseTuple(args,(char *)":KConsole_getConsole")) goto fail; result = (KConsole *)KConsole::getConsole(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KConsole, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KConsole_clear(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KConsole *arg1 = (KConsole *) 0 ; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KConsole_clear",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KConsole, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; (arg1)->clear(); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject * KConsole_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KConsole, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiPythonWidget_cursorPos_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; KikiPos *arg2 = (KikiPos *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPythonWidget_cursorPos_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->cursorPos = *arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_cursorPos_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; KikiPos *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_cursorPos_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPos *)& ((arg1)->cursorPos); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_selectionPos_set(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; KikiPos *arg2 = (KikiPos *) 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPythonWidget_selectionPos_set",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(2)) SWIG_fail; if (arg1) (arg1)->selectionPos = *arg2; Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_selectionPos_get(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; KikiPos *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_selectionPos_get",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPos *)& ((arg1)->selectionPos); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPos, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_getTextRows(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_getTextRows",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiPythonWidget const *)arg1)->getTextRows(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_getTextCols(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_getTextCols",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiPythonWidget const *)arg1)->getTextCols(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_getTextSize(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; KSize result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_getTextSize",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = ((KikiPythonWidget const *)arg1)->getTextSize(); { resultobj = PyTuple_New(2); PyTuple_SetItem(resultobj, 0, PyInt_FromLong((&result)->w)); PyTuple_SetItem(resultobj, 1, PyInt_FromLong((&result)->h)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_getColumnWidth(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_getColumnWidth",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiPythonWidget const *)arg1)->getColumnWidth(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_getRowHeight(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; int result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_getRowHeight",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (int)((KikiPythonWidget const *)arg1)->getRowHeight(); { resultobj = SWIG_From_int((int)(result)); } return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_getPythonWindow(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; KikiPython *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPythonWidget_getPythonWindow",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPython *)((KikiPythonWidget const *)arg1)->getPythonWindow(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPython, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPythonWidget_displayStringAtPos(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPythonWidget *arg1 = (KikiPythonWidget *) 0 ; std::string *arg2 = 0 ; KikiPos *arg3 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiPythonWidget_displayStringAtPos",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPythonWidget, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } { SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_KikiPos, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(3)) SWIG_fail; if (arg3 == NULL) { SWIG_null_ref("KikiPos"); } if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->displayStringAtPos((std::string const &)*arg2,(KikiPos const &)*arg3); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject * KikiPythonWidget_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPythonWidget, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyObject *_wrap_KikiPython_getPythonWidget(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; KikiPythonWidget *result; PyObject * obj0 = 0 ; if(!PyArg_ParseTuple(args,(char *)"O:KikiPython_getPythonWidget",&obj0)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; result = (KikiPythonWidget *)(arg1)->getPythonWidget(); resultobj = SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_KikiPythonWidget, 0); return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPython_setScrollBarUnits(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; int arg2 ; int arg3 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OOO:KikiPython_setScrollBarUnits",&obj0,&obj1,&obj2)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { arg2 = (int)(SWIG_As_int(obj1)); if (SWIG_arg_fail(2)) SWIG_fail; } { arg3 = (int)(SWIG_As_int(obj2)); if (SWIG_arg_fail(3)) SWIG_fail; } (arg1)->setScrollBarUnits(arg2,arg3); Py_INCREF(Py_None); resultobj = Py_None; return resultobj; fail: return NULL; } static PyObject *_wrap_KikiPython_requestUserInput(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPython_requestUserInput",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->requestUserInput((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPython_setTitle(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPython_setTitle",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setTitle((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPython_setStatus(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPython_setStatus",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setStatus((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPython_setInput(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPython_setInput",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->setInput((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject *_wrap_KikiPython_executeFile(PyObject *, PyObject *args) { PyObject *resultobj = NULL; KikiPython *arg1 = (KikiPython *) 0 ; std::string *arg2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"OO:KikiPython_executeFile",&obj0,&obj1)) goto fail; SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_KikiPython, SWIG_POINTER_EXCEPTION | 0); if (SWIG_arg_fail(1)) SWIG_fail; { std::string *ptr = (std::string *)0; res2 = SWIG_AsPtr_std_string(obj1, &ptr); if (!res2) { if (!PyErr_Occurred()) SWIG_type_error("std::string", obj1); } else if (!ptr) { SWIG_null_ref("std::string"); } if (SWIG_arg_fail(2)) SWIG_fail; arg2 = ptr; } (arg1)->executeFile((std::string const &)*arg2); Py_INCREF(Py_None); resultobj = Py_None; if (res2 == SWIG_NEWOBJ) delete arg2; return resultobj; fail: if (res2 == SWIG_NEWOBJ) delete arg2; return NULL; } static PyObject * KikiPython_swigregister(PyObject *, PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; SWIG_TypeClientData(SWIGTYPE_p_KikiPython, obj); Py_INCREF(obj); return Py_BuildValue((char *)""); } static PyMethodDef SwigMethods[] = { { (char *)"KikiPos_x_set", _wrap_KikiPos_x_set, METH_VARARGS, NULL}, { (char *)"KikiPos_x_get", _wrap_KikiPos_x_get, METH_VARARGS, NULL}, { (char *)"KikiPos_y_set", _wrap_KikiPos_y_set, METH_VARARGS, NULL}, { (char *)"KikiPos_y_get", _wrap_KikiPos_y_get, METH_VARARGS, NULL}, { (char *)"KikiPos_z_set", _wrap_KikiPos_z_set, METH_VARARGS, NULL}, { (char *)"KikiPos_z_get", _wrap_KikiPos_z_get, METH_VARARGS, NULL}, { (char *)"new_KikiPos", _wrap_new_KikiPos, METH_VARARGS, NULL}, { (char *)"KikiPos___sub__", _wrap_KikiPos___sub__, METH_VARARGS, NULL}, { (char *)"KikiPos___add__", _wrap_KikiPos___add__, METH_VARARGS, NULL}, { (char *)"KikiPos___iadd__", _wrap_KikiPos___iadd__, METH_VARARGS, NULL}, { (char *)"KikiPos___isub__", _wrap_KikiPos___isub__, METH_VARARGS, NULL}, { (char *)"KikiPos_getString", _wrap_KikiPos_getString, METH_VARARGS, NULL}, { (char *)"KikiPos___eq__", _wrap_KikiPos___eq__, METH_VARARGS, NULL}, { (char *)"KikiPos___ne__", _wrap_KikiPos___ne__, METH_VARARGS, NULL}, { (char *)"KikiPos___str__", _wrap_KikiPos___str__, METH_VARARGS, NULL}, { (char *)"delete_KikiPos", _wrap_delete_KikiPos, METH_VARARGS, NULL}, { (char *)"KikiPos_swigregister", KikiPos_swigregister, METH_VARARGS, NULL}, { (char *)"new_KVector", _wrap_new_KVector, METH_VARARGS, NULL}, { (char *)"KVector_reset", _wrap_KVector_reset, METH_VARARGS, NULL}, { (char *)"KVector_normalize", _wrap_KVector_normalize, METH_VARARGS, NULL}, { (char *)"KVector___iadd__", _wrap_KVector___iadd__, METH_VARARGS, NULL}, { (char *)"KVector___isub__", _wrap_KVector___isub__, METH_VARARGS, NULL}, { (char *)"KVector___imul__", _wrap_KVector___imul__, METH_VARARGS, NULL}, { (char *)"KVector___idiv__", _wrap_KVector___idiv__, METH_VARARGS, NULL}, { (char *)"KVector_cross", _wrap_KVector_cross, METH_VARARGS, NULL}, { (char *)"KVector___sub__", _wrap_KVector___sub__, METH_VARARGS, NULL}, { (char *)"KVector___add__", _wrap_KVector___add__, METH_VARARGS, NULL}, { (char *)"KVector___mul__", _wrap_KVector___mul__, METH_VARARGS, NULL}, { (char *)"KVector___div__", _wrap_KVector___div__, METH_VARARGS, NULL}, { (char *)"KVector_perpendicular", _wrap_KVector_perpendicular, METH_VARARGS, NULL}, { (char *)"KVector_parallel", _wrap_KVector_parallel, METH_VARARGS, NULL}, { (char *)"KVector_reflect", _wrap_KVector_reflect, METH_VARARGS, NULL}, { (char *)"KVector_normal", _wrap_KVector_normal, METH_VARARGS, NULL}, { (char *)"KVector_length", _wrap_KVector_length, METH_VARARGS, NULL}, { (char *)"KVector_angle", _wrap_KVector_angle, METH_VARARGS, NULL}, { (char *)"KVector_xyangle", _wrap_KVector_xyangle, METH_VARARGS, NULL}, { (char *)"KVector_xyperp", _wrap_KVector_xyperp, METH_VARARGS, NULL}, { (char *)"KVector_round", _wrap_KVector_round, METH_VARARGS, NULL}, { (char *)"KVector_glVertex", _wrap_KVector_glVertex, METH_VARARGS, NULL}, { (char *)"KVector___getitem__", _wrap_KVector___getitem__, METH_VARARGS, NULL}, { (char *)"KVector___str__", _wrap_KVector___str__, METH_VARARGS, NULL}, { (char *)"delete_KVector", _wrap_delete_KVector, METH_VARARGS, NULL}, { (char *)"KVector_swigregister", KVector_swigregister, METH_VARARGS, NULL}, { (char *)"KQuaternion_w_set", _wrap_KQuaternion_w_set, METH_VARARGS, NULL}, { (char *)"KQuaternion_w_get", _wrap_KQuaternion_w_get, METH_VARARGS, NULL}, { (char *)"KQuaternion_x_set", _wrap_KQuaternion_x_set, METH_VARARGS, NULL}, { (char *)"KQuaternion_x_get", _wrap_KQuaternion_x_get, METH_VARARGS, NULL}, { (char *)"KQuaternion_y_set", _wrap_KQuaternion_y_set, METH_VARARGS, NULL}, { (char *)"KQuaternion_y_get", _wrap_KQuaternion_y_get, METH_VARARGS, NULL}, { (char *)"KQuaternion_z_set", _wrap_KQuaternion_z_set, METH_VARARGS, NULL}, { (char *)"KQuaternion_z_get", _wrap_KQuaternion_z_get, METH_VARARGS, NULL}, { (char *)"new_KQuaternion", _wrap_new_KQuaternion, METH_VARARGS, NULL}, { (char *)"KQuaternion_rotationAroundVector", _wrap_KQuaternion_rotationAroundVector, METH_VARARGS, NULL}, { (char *)"KQuaternion_rotate", _wrap_KQuaternion_rotate, METH_VARARGS, NULL}, { (char *)"KQuaternion_normalize", _wrap_KQuaternion_normalize, METH_VARARGS, NULL}, { (char *)"KQuaternion_invert", _wrap_KQuaternion_invert, METH_VARARGS, NULL}, { (char *)"KQuaternion_conjugate", _wrap_KQuaternion_conjugate, METH_VARARGS, NULL}, { (char *)"KQuaternion_getNormal", _wrap_KQuaternion_getNormal, METH_VARARGS, NULL}, { (char *)"KQuaternion_getConjugate", _wrap_KQuaternion_getConjugate, METH_VARARGS, NULL}, { (char *)"KQuaternion_getInverse", _wrap_KQuaternion_getInverse, METH_VARARGS, NULL}, { (char *)"KQuaternion_length", _wrap_KQuaternion_length, METH_VARARGS, NULL}, { (char *)"KQuaternion_glRotate", _wrap_KQuaternion_glRotate, METH_VARARGS, NULL}, { (char *)"KQuaternion_slerp", _wrap_KQuaternion_slerp, METH_VARARGS, NULL}, { (char *)"KQuaternion___mul__", _wrap_KQuaternion___mul__, METH_VARARGS, NULL}, { (char *)"KQuaternion___str__", _wrap_KQuaternion___str__, METH_VARARGS, NULL}, { (char *)"delete_KQuaternion", _wrap_delete_KQuaternion, METH_VARARGS, NULL}, { (char *)"KQuaternion_swigregister", KQuaternion_swigregister, METH_VARARGS, NULL}, { (char *)"new_KColor", _wrap_new_KColor, METH_VARARGS, NULL}, { (char *)"KColor_setValues", _wrap_KColor_setValues, METH_VARARGS, NULL}, { (char *)"KColor_setRed", _wrap_KColor_setRed, METH_VARARGS, NULL}, { (char *)"KColor_setGreen", _wrap_KColor_setGreen, METH_VARARGS, NULL}, { (char *)"KColor_setBlue", _wrap_KColor_setBlue, METH_VARARGS, NULL}, { (char *)"KColor_setAlpha", _wrap_KColor_setAlpha, METH_VARARGS, NULL}, { (char *)"KColor_getRed", _wrap_KColor_getRed, METH_VARARGS, NULL}, { (char *)"KColor_getGreen", _wrap_KColor_getGreen, METH_VARARGS, NULL}, { (char *)"KColor_getBlue", _wrap_KColor_getBlue, METH_VARARGS, NULL}, { (char *)"KColor_getAlpha", _wrap_KColor_getAlpha, METH_VARARGS, NULL}, { (char *)"KColor_glColor", _wrap_KColor_glColor, METH_VARARGS, NULL}, { (char *)"KColor___str__", _wrap_KColor___str__, METH_VARARGS, NULL}, { (char *)"delete_KColor", _wrap_delete_KColor, METH_VARARGS, NULL}, { (char *)"KColor_swigregister", KColor_swigregister, METH_VARARGS, NULL}, { (char *)"KProjection_focusOn", _wrap_KProjection_focusOn, METH_VARARGS, NULL}, { (char *)"KProjection_setFov", _wrap_KProjection_setFov, METH_VARARGS, NULL}, { (char *)"KProjection_getFov", _wrap_KProjection_getFov, METH_VARARGS, NULL}, { (char *)"KProjection_setViewport", _wrap_KProjection_setViewport, METH_VARARGS, NULL}, { (char *)"KProjection_setPosition", _wrap_KProjection_setPosition, METH_VARARGS, NULL}, { (char *)"KProjection_swigregister", KProjection_swigregister, METH_VARARGS, NULL}, { (char *)"new_KKey", _wrap_new_KKey, METH_VARARGS, NULL}, { (char *)"KKey_name_set", _wrap_KKey_name_set, METH_VARARGS, NULL}, { (char *)"KKey_name_get", _wrap_KKey_name_get, METH_VARARGS, NULL}, { (char *)"KKey_getUnmodifiedName", _wrap_KKey_getUnmodifiedName, METH_VARARGS, NULL}, { (char *)"KKey_getModifierName", _wrap_KKey_getModifierName, METH_VARARGS, NULL}, { (char *)"KKey_swigregister", KKey_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiAction", _wrap_new_KikiAction, METH_VARARGS, NULL}, { (char *)"KikiAction_getId", _wrap_KikiAction_getId, METH_VARARGS, NULL}, { (char *)"KikiAction_getName", _wrap_KikiAction_getName, METH_VARARGS, NULL}, { (char *)"KikiAction_getRelativeTime", _wrap_KikiAction_getRelativeTime, METH_VARARGS, NULL}, { (char *)"KikiAction_getRelativeDelta", _wrap_KikiAction_getRelativeDelta, METH_VARARGS, NULL}, { (char *)"KikiAction_getDuration", _wrap_KikiAction_getDuration, METH_VARARGS, NULL}, { (char *)"KikiAction_setDuration", _wrap_KikiAction_setDuration, METH_VARARGS, NULL}, { (char *)"KikiAction_swigregister", KikiAction_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiPyAction", _wrap_new_KikiPyAction, METH_VARARGS, NULL}, { (char *)"delete_KikiPyAction", _wrap_delete_KikiPyAction, METH_VARARGS, NULL}, { (char *)"KikiPyAction_swigregister", KikiPyAction_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiEvent", _wrap_new_KikiEvent, METH_VARARGS, NULL}, { (char *)"KikiEvent_addAction", _wrap_KikiEvent_addAction, METH_VARARGS, NULL}, { (char *)"KikiEvent_removeAction", _wrap_KikiEvent_removeAction, METH_VARARGS, NULL}, { (char *)"KikiEvent_removeAllActions", _wrap_KikiEvent_removeAllActions, METH_VARARGS, NULL}, { (char *)"KikiEvent_removeActionsOfObject", _wrap_KikiEvent_removeActionsOfObject, METH_VARARGS, NULL}, { (char *)"KikiEvent_removeActionWithName", _wrap_KikiEvent_removeActionWithName, METH_VARARGS, NULL}, { (char *)"KikiEvent_triggerActions", _wrap_KikiEvent_triggerActions, METH_VARARGS, NULL}, { (char *)"KikiEvent_getTime", _wrap_KikiEvent_getTime, METH_VARARGS, NULL}, { (char *)"KikiEvent_swigregister", KikiEvent_swigregister, METH_VARARGS, NULL}, { (char *)"KikiActionObject_addAction", _wrap_KikiActionObject_addAction, METH_VARARGS, NULL}, { (char *)"KikiActionObject_removeAction", _wrap_KikiActionObject_removeAction, METH_VARARGS, NULL}, { (char *)"KikiActionObject_startTimedAction", _wrap_KikiActionObject_startTimedAction, METH_VARARGS, NULL}, { (char *)"KikiActionObject_startTimer", _wrap_KikiActionObject_startTimer, METH_VARARGS, NULL}, { (char *)"KikiActionObject_getActionWithName", _wrap_KikiActionObject_getActionWithName, METH_VARARGS, NULL}, { (char *)"KikiActionObject_getActionWithId", _wrap_KikiActionObject_getActionWithId, METH_VARARGS, NULL}, { (char *)"KikiActionObject_addEventWithName", _wrap_KikiActionObject_addEventWithName, METH_VARARGS, NULL}, { (char *)"KikiActionObject_getEventWithName", _wrap_KikiActionObject_getEventWithName, METH_VARARGS, NULL}, { (char *)"KikiActionObject_getEventWithId", _wrap_KikiActionObject_getEventWithId, METH_VARARGS, NULL}, { (char *)"KikiActionObject_getClassName", _wrap_KikiActionObject_getClassName, METH_VARARGS, NULL}, { (char *)"KikiActionObject_swigregister", KikiActionObject_swigregister, METH_VARARGS, NULL}, { (char *)"KikiObject_setName", _wrap_KikiObject_setName, METH_VARARGS, NULL}, { (char *)"KikiObject_getName", _wrap_KikiObject_getName, METH_VARARGS, NULL}, { (char *)"KikiObject_getPos", _wrap_KikiObject_getPos, METH_VARARGS, NULL}, { (char *)"KikiObject_setPosition", _wrap_KikiObject_setPosition, METH_VARARGS, NULL}, { (char *)"KikiObject_getPosition", _wrap_KikiObject_getPosition, METH_VARARGS, NULL}, { (char *)"KikiObject_setOrientation", _wrap_KikiObject_setOrientation, METH_VARARGS, NULL}, { (char *)"KikiObject_getOrientation", _wrap_KikiObject_getOrientation, METH_VARARGS, NULL}, { (char *)"KikiObject_setCurrentOrientation", _wrap_KikiObject_setCurrentOrientation, METH_VARARGS, NULL}, { (char *)"KikiObject_getCurrentOrientation", _wrap_KikiObject_getCurrentOrientation, METH_VARARGS, NULL}, { (char *)"KikiObject_isSpaceEgoistic", _wrap_KikiObject_isSpaceEgoistic, METH_VARARGS, NULL}, { (char *)"KikiObject_getClassName", _wrap_KikiObject_getClassName, METH_VARARGS, NULL}, { (char *)"KikiObject_swigregister", KikiObject_swigregister, METH_VARARGS, NULL}, { (char *)"KikiBotStatus_getMoves", _wrap_KikiBotStatus_getMoves, METH_VARARGS, NULL}, { (char *)"KikiBotStatus_setMoves", _wrap_KikiBotStatus_setMoves, METH_VARARGS, NULL}, { (char *)"KikiBotStatus_addMoves", _wrap_KikiBotStatus_addMoves, METH_VARARGS, NULL}, { (char *)"KikiBotStatus_getMinMoves", _wrap_KikiBotStatus_getMinMoves, METH_VARARGS, NULL}, { (char *)"KikiBotStatus_setMinMoves", _wrap_KikiBotStatus_setMinMoves, METH_VARARGS, NULL}, { (char *)"KikiBotStatus_swigregister", KikiBotStatus_swigregister, METH_VARARGS, NULL}, { (char *)"KikiBotFume_setObjectColor", _wrap_KikiBotFume_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiBotFume_swigregister", KikiBotFume_swigregister, METH_VARARGS, NULL}, { (char *)"KikiBot_isDead", _wrap_KikiBot_isDead, METH_VARARGS, NULL}, { (char *)"KikiBot_getDown", _wrap_KikiBot_getDown, METH_VARARGS, NULL}, { (char *)"KikiBot_getUp", _wrap_KikiBot_getUp, METH_VARARGS, NULL}, { (char *)"KikiBot_getDir", _wrap_KikiBot_getDir, METH_VARARGS, NULL}, { (char *)"KikiBot_setMove", _wrap_KikiBot_setMove, METH_VARARGS, NULL}, { (char *)"KikiBot_getStatus", _wrap_KikiBot_getStatus, METH_VARARGS, NULL}, { (char *)"KikiBot_swigregister", KikiBot_swigregister, METH_VARARGS, NULL}, { (char *)"KikiStatusDisplay_show", _wrap_KikiStatusDisplay_show, METH_VARARGS, NULL}, { (char *)"KikiStatusDisplay_hide", _wrap_KikiStatusDisplay_hide, METH_VARARGS, NULL}, { (char *)"KikiStatusDisplay_swigregister", KikiStatusDisplay_swigregister, METH_VARARGS, NULL}, { (char *)"KikiPlayback_start", _wrap_KikiPlayback_start, METH_VARARGS, NULL}, { (char *)"KikiPlayback_stop", _wrap_KikiPlayback_stop, METH_VARARGS, NULL}, { (char *)"KikiPlayback_swigregister", KikiPlayback_swigregister, METH_VARARGS, NULL}, { (char *)"KikiPlayer_die", _wrap_KikiPlayer_die, METH_VARARGS, NULL}, { (char *)"KikiPlayer_reborn", _wrap_KikiPlayer_reborn, METH_VARARGS, NULL}, { (char *)"KikiPlayer_reset", _wrap_KikiPlayer_reset, METH_VARARGS, NULL}, { (char *)"KikiPlayer_startRecorder", _wrap_KikiPlayer_startRecorder, METH_VARARGS, NULL}, { (char *)"KikiPlayer_saveRecorder", _wrap_KikiPlayer_saveRecorder, METH_VARARGS, NULL}, { (char *)"KikiPlayer_getProjection", _wrap_KikiPlayer_getProjection, METH_VARARGS, NULL}, { (char *)"KikiPlayer_handleKey", _wrap_KikiPlayer_handleKey, METH_VARARGS, NULL}, { (char *)"KikiPlayer_handleKeyRelease", _wrap_KikiPlayer_handleKeyRelease, METH_VARARGS, NULL}, { (char *)"KikiPlayer_recordKeyForAction", _wrap_KikiPlayer_recordKeyForAction, METH_VARARGS, NULL}, { (char *)"KikiPlayer_getActionForKey", _wrap_KikiPlayer_getActionForKey, METH_VARARGS, NULL}, { (char *)"KikiPlayer_getKeyForAction", _wrap_KikiPlayer_getKeyForAction, METH_VARARGS, NULL}, { (char *)"KikiPlayer_setKeyForAction", _wrap_KikiPlayer_setKeyForAction, METH_VARARGS, NULL}, { (char *)"KikiPlayer_setObjectColor", _wrap_KikiPlayer_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiPlayer_swigregister", KikiPlayer_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiMutant", _wrap_new_KikiMutant, METH_VARARGS, NULL}, { (char *)"KikiMutant_die", _wrap_KikiMutant_die, METH_VARARGS, NULL}, { (char *)"KikiMutant_setObjectColor", _wrap_KikiMutant_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiMutant_swigregister", KikiMutant_swigregister, METH_VARARGS, NULL}, { (char *)"KikiSound_toggleMute", _wrap_KikiSound_toggleMute, METH_VARARGS, NULL}, { (char *)"KikiSound_setMute", _wrap_KikiSound_setMute, METH_VARARGS, NULL}, { (char *)"KikiSound_isMute", _wrap_KikiSound_isMute, METH_VARARGS, NULL}, { (char *)"KikiSound_setSoundVolume", _wrap_KikiSound_setSoundVolume, METH_VARARGS, NULL}, { (char *)"KikiSound_getSoundVolume", _wrap_KikiSound_getSoundVolume, METH_VARARGS, NULL}, { (char *)"KikiSound_playSound", _wrap_KikiSound_playSound, METH_VARARGS, NULL}, { (char *)"KikiSound_playSoundAtPos", _wrap_KikiSound_playSoundAtPos, METH_VARARGS, NULL}, { (char *)"KikiSound_swigregister", KikiSound_swigregister, METH_VARARGS, NULL}, { (char *)"KikiWorld_setSize", _wrap_KikiWorld_setSize, METH_VARARGS, NULL}, { (char *)"KikiWorld_getSize", _wrap_KikiWorld_getSize, METH_VARARGS, NULL}, { (char *)"KikiWorld_setName", _wrap_KikiWorld_setName, METH_VARARGS, NULL}, { (char *)"KikiWorld_getName", _wrap_KikiWorld_getName, METH_VARARGS, NULL}, { (char *)"KikiWorld_init", _wrap_KikiWorld_init, METH_VARARGS, NULL}, { (char *)"KikiWorld_setDisplayShadows", _wrap_KikiWorld_setDisplayShadows, METH_VARARGS, NULL}, { (char *)"KikiWorld_setDisplayRaster", _wrap_KikiWorld_setDisplayRaster, METH_VARARGS, NULL}, { (char *)"KikiWorld_setDisplayBorder", _wrap_KikiWorld_setDisplayBorder, METH_VARARGS, NULL}, { (char *)"KikiWorld_setRasterSize", _wrap_KikiWorld_setRasterSize, METH_VARARGS, NULL}, { (char *)"KikiWorld_setObjectColor", _wrap_KikiWorld_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiWorld_changeCameraMode", _wrap_KikiWorld_changeCameraMode, METH_VARARGS, NULL}, { (char *)"KikiWorld_getCameraMode", _wrap_KikiWorld_getCameraMode, METH_VARARGS, NULL}, { (char *)"KikiWorld_setCameraMode", _wrap_KikiWorld_setCameraMode, METH_VARARGS, NULL}, { (char *)"KikiWorld_getProjection", _wrap_KikiWorld_getProjection, METH_VARARGS, NULL}, { (char *)"KikiWorld_addObjectAtPos", _wrap_KikiWorld_addObjectAtPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_setObjectAtPos", _wrap_KikiWorld_setObjectAtPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_unsetObject", _wrap_KikiWorld_unsetObject, METH_VARARGS, NULL}, { (char *)"KikiWorld_removeObject", _wrap_KikiWorld_removeObject, METH_VARARGS, NULL}, { (char *)"KikiWorld_deleteObject", _wrap_KikiWorld_deleteObject, METH_VARARGS, NULL}, { (char *)"KikiWorld_deleteAllObjects", _wrap_KikiWorld_deleteAllObjects, METH_VARARGS, NULL}, { (char *)"KikiWorld_deleteObjectsWithClassName", _wrap_KikiWorld_deleteObjectsWithClassName, METH_VARARGS, NULL}, { (char *)"KikiWorld_getObjectWithName", _wrap_KikiWorld_getObjectWithName, METH_VARARGS, NULL}, { (char *)"KikiWorld_moveObjectToPos", _wrap_KikiWorld_moveObjectToPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_objectWillMoveToPos", _wrap_KikiWorld_objectWillMoveToPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_objectMovedFromPos", _wrap_KikiWorld_objectMovedFromPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_getBotAtPos", _wrap_KikiWorld_getBotAtPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_getOccupantAtPos", _wrap_KikiWorld_getOccupantAtPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_getRealOccupantAtPos", _wrap_KikiWorld_getRealOccupantAtPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_getNearestValidPos", _wrap_KikiWorld_getNearestValidPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_isInvalidPos", _wrap_KikiWorld_isInvalidPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_isValidPos", _wrap_KikiWorld_isValidPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_isUnoccupiedPos", _wrap_KikiWorld_isUnoccupiedPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_isOccupiedPos", _wrap_KikiWorld_isOccupiedPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_posToIndex", _wrap_KikiWorld_posToIndex, METH_VARARGS, NULL}, { (char *)"KikiWorld_indexToPos", _wrap_KikiWorld_indexToPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_getPickedPos", _wrap_KikiWorld_getPickedPos, METH_VARARGS, NULL}, { (char *)"KikiWorld_swigregister", KikiWorld_swigregister, METH_VARARGS, NULL}, { (char *)"KEventHandler_quit", _wrap_KEventHandler_quit, METH_VARARGS, NULL}, { (char *)"KEventHandler_getMouseState", _wrap_KEventHandler_getMouseState, METH_VARARGS, NULL}, { (char *)"KEventHandler_getMousePos", _wrap_KEventHandler_getMousePos, METH_VARARGS, NULL}, { (char *)"KEventHandler_getMouseDelta", _wrap_KEventHandler_getMouseDelta, METH_VARARGS, NULL}, { (char *)"KEventHandler_getScreenSize", _wrap_KEventHandler_getScreenSize, METH_VARARGS, NULL}, { (char *)"KEventHandler_setScreenSize", _wrap_KEventHandler_setScreenSize, METH_VARARGS, NULL}, { (char *)"KEventHandler_getFullscreen", _wrap_KEventHandler_getFullscreen, METH_VARARGS, NULL}, { (char *)"KEventHandler_setFullscreen", _wrap_KEventHandler_setFullscreen, METH_VARARGS, NULL}, { (char *)"KEventHandler_getTime", _wrap_KEventHandler_getTime, METH_VARARGS, NULL}, { (char *)"KEventHandler_setWireframeMode", _wrap_KEventHandler_setWireframeMode, METH_VARARGS, NULL}, { (char *)"KEventHandler_setDisplayFps", _wrap_KEventHandler_setDisplayFps, METH_VARARGS, NULL}, { (char *)"KEventHandler_getDisplayFps", _wrap_KEventHandler_getDisplayFps, METH_VARARGS, NULL}, { (char *)"KEventHandler_swigregister", KEventHandler_swigregister, METH_VARARGS, NULL}, { (char *)"KikiController_gui_set", _wrap_KikiController_gui_set, METH_VARARGS, NULL}, { (char *)"KikiController_gui_get", _wrap_KikiController_gui_get, METH_VARARGS, NULL}, { (char *)"KikiController_sound_set", _wrap_KikiController_sound_set, METH_VARARGS, NULL}, { (char *)"KikiController_sound_get", _wrap_KikiController_sound_get, METH_VARARGS, NULL}, { (char *)"KikiController_world_set", _wrap_KikiController_world_set, METH_VARARGS, NULL}, { (char *)"KikiController_world_get", _wrap_KikiController_world_get, METH_VARARGS, NULL}, { (char *)"KikiController_player_set", _wrap_KikiController_player_set, METH_VARARGS, NULL}, { (char *)"KikiController_player_get", _wrap_KikiController_player_get, METH_VARARGS, NULL}, { (char *)"KikiController_python_set", _wrap_KikiController_python_set, METH_VARARGS, NULL}, { (char *)"KikiController_python_get", _wrap_KikiController_python_get, METH_VARARGS, NULL}, { (char *)"KikiController_player_status_set", _wrap_KikiController_player_status_set, METH_VARARGS, NULL}, { (char *)"KikiController_player_status_get", _wrap_KikiController_player_status_get, METH_VARARGS, NULL}, { (char *)"KikiController_timer_event_set", _wrap_KikiController_timer_event_set, METH_VARARGS, NULL}, { (char *)"KikiController_timer_event_get", _wrap_KikiController_timer_event_get, METH_VARARGS, NULL}, { (char *)"KikiController_getPlayer", _wrap_KikiController_getPlayer, METH_VARARGS, NULL}, { (char *)"KikiController_unmapMsTime", _wrap_KikiController_unmapMsTime, METH_VARARGS, NULL}, { (char *)"KikiController_mapMsTime", _wrap_KikiController_mapMsTime, METH_VARARGS, NULL}, { (char *)"KikiController_setSpeed", _wrap_KikiController_setSpeed, METH_VARARGS, NULL}, { (char *)"KikiController_getSpeed", _wrap_KikiController_getSpeed, METH_VARARGS, NULL}, { (char *)"KikiController_getKikiHome", _wrap_KikiController_getKikiHome, METH_VARARGS, NULL}, { (char *)"KikiController_setGamma", _wrap_KikiController_setGamma, METH_VARARGS, NULL}, { (char *)"KikiController_getGamma", _wrap_KikiController_getGamma, METH_VARARGS, NULL}, { (char *)"KikiController_changeScreenSize", _wrap_KikiController_changeScreenSize, METH_VARARGS, NULL}, { (char *)"KikiController_displayText", _wrap_KikiController_displayText, METH_VARARGS, NULL}, { (char *)"KikiController_getLocalizedString", _wrap_KikiController_getLocalizedString, METH_VARARGS, NULL}, { (char *)"KikiController_isDebugVersion", _wrap_KikiController_isDebugVersion, METH_VARARGS, NULL}, { (char *)"KikiController_swigregister", KikiController_swigregister, METH_VARARGS, NULL}, { (char *)"replaceTabs", _wrap_replaceTabs, METH_VARARGS, NULL}, { (char *)"KWindow_isVisible", _wrap_KWindow_isVisible, METH_VARARGS, NULL}, { (char *)"KWindow_setVisibility", _wrap_KWindow_setVisibility, METH_VARARGS, NULL}, { (char *)"KWindow_toggleVisibility", _wrap_KWindow_toggleVisibility, METH_VARARGS, NULL}, { (char *)"KWindow_maximize", _wrap_KWindow_maximize, METH_VARARGS, NULL}, { (char *)"KWindow_show", _wrap_KWindow_show, METH_VARARGS, NULL}, { (char *)"KWindow_hide", _wrap_KWindow_hide, METH_VARARGS, NULL}, { (char *)"KWindow_close", _wrap_KWindow_close, METH_VARARGS, NULL}, { (char *)"KWindow_setSize", _wrap_KWindow_setSize, METH_VARARGS, NULL}, { (char *)"KWindow_setPosition", _wrap_KWindow_setPosition, METH_VARARGS, NULL}, { (char *)"KWindow_swigregister", KWindow_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiText", _wrap_new_KikiText, METH_VARARGS, NULL}, { (char *)"KikiText_setText", _wrap_KikiText_setText, METH_VARARGS, NULL}, { (char *)"KikiText_getText", _wrap_KikiText_getText, METH_VARARGS, NULL}, { (char *)"KikiText_clear", _wrap_KikiText_clear, METH_VARARGS, NULL}, { (char *)"KikiText_isEmpty", _wrap_KikiText_isEmpty, METH_VARARGS, NULL}, { (char *)"KikiText_addText", _wrap_KikiText_addText, METH_VARARGS, NULL}, { (char *)"KikiText_getColor", _wrap_KikiText_getColor, METH_VARARGS, NULL}, { (char *)"KikiText_setColor", _wrap_KikiText_setColor, METH_VARARGS, NULL}, { (char *)"KikiText_setAlpha", _wrap_KikiText_setAlpha, METH_VARARGS, NULL}, { (char *)"KikiText_isAnimated", _wrap_KikiText_isAnimated, METH_VARARGS, NULL}, { (char *)"KikiText_setAnimated", _wrap_KikiText_setAnimated, METH_VARARGS, NULL}, { (char *)"KikiText_isCentered", _wrap_KikiText_isCentered, METH_VARARGS, NULL}, { (char *)"KikiText_setCentered", _wrap_KikiText_setCentered, METH_VARARGS, NULL}, { (char *)"KikiText_getWidth", _wrap_KikiText_getWidth, METH_VARARGS, NULL}, { (char *)"KikiText_getHeight", _wrap_KikiText_getHeight, METH_VARARGS, NULL}, { (char *)"KikiText_setObjectColor", _wrap_KikiText_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiText_swigregister", KikiText_swigregister, METH_VARARGS, NULL}, { (char *)"KikiGUI_swigregister", KikiGUI_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiScreenText", _wrap_new_KikiScreenText, METH_VARARGS, NULL}, { (char *)"KikiScreenText_addText", _wrap_KikiScreenText_addText, METH_VARARGS, NULL}, { (char *)"KikiScreenText_setText", _wrap_KikiScreenText_setText, METH_VARARGS, NULL}, { (char *)"KikiScreenText_show", _wrap_KikiScreenText_show, METH_VARARGS, NULL}, { (char *)"KikiScreenText_getProjection", _wrap_KikiScreenText_getProjection, METH_VARARGS, NULL}, { (char *)"KikiScreenText_swigregister", KikiScreenText_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiMenu", _wrap_new_KikiMenu, METH_VARARGS, NULL}, { (char *)"KikiMenu_addItem", _wrap_KikiMenu_addItem, METH_VARARGS, NULL}, { (char *)"KikiMenu_setCurrentIndex", _wrap_KikiMenu_setCurrentIndex, METH_VARARGS, NULL}, { (char *)"KikiMenu_setEscapeActive", _wrap_KikiMenu_setEscapeActive, METH_VARARGS, NULL}, { (char *)"KikiMenu_circular_set", _wrap_KikiMenu_circular_set, METH_VARARGS, NULL}, { (char *)"KikiMenu_circular_get", _wrap_KikiMenu_circular_get, METH_VARARGS, NULL}, { (char *)"KikiMenu_swigregister", KikiMenu_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiColumnMenu", _wrap_new_KikiColumnMenu, METH_VARARGS, NULL}, { (char *)"KikiColumnMenu_swigregister", KikiColumnMenu_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiScrollMenu", _wrap_new_KikiScrollMenu, METH_VARARGS, NULL}, { (char *)"KikiScrollMenu_getCurrentIndex", _wrap_KikiScrollMenu_getCurrentIndex, METH_VARARGS, NULL}, { (char *)"KikiScrollMenu_addItem", _wrap_KikiScrollMenu_addItem, METH_VARARGS, NULL}, { (char *)"KikiScrollMenu_swigregister", KikiScrollMenu_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiPageText", _wrap_new_KikiPageText, METH_VARARGS, NULL}, { (char *)"KikiPageText_swigregister", KikiPageText_swigregister, METH_VARARGS, NULL}, { (char *)"KikiFace_swigregister", KikiFace_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiWire", _wrap_new_KikiWire, METH_VARARGS, NULL}, { (char *)"KikiWire_setActive", _wrap_KikiWire_setActive, METH_VARARGS, NULL}, { (char *)"KikiWire_setObjectColor", _wrap_KikiWire_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiWire_swigregister", KikiWire_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToWire", _wrap_kikiObjectToWire, METH_VARARGS, NULL}, { (char *)"new_KikiGear", _wrap_new_KikiGear, METH_VARARGS, NULL}, { (char *)"KikiGear_setActive", _wrap_KikiGear_setActive, METH_VARARGS, NULL}, { (char *)"KikiGear_updateActive", _wrap_KikiGear_updateActive, METH_VARARGS, NULL}, { (char *)"KikiGear_setObjectColor", _wrap_KikiGear_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiGear_swigregister", KikiGear_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToGear", _wrap_kikiObjectToGear, METH_VARARGS, NULL}, { (char *)"new_KikiValve", _wrap_new_KikiValve, METH_VARARGS, NULL}, { (char *)"KikiValve_setObjectColor", _wrap_KikiValve_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiValve_swigregister", KikiValve_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToValve", _wrap_kikiObjectToValve, METH_VARARGS, NULL}, { (char *)"new_KikiMotorCylinder", _wrap_new_KikiMotorCylinder, METH_VARARGS, NULL}, { (char *)"KikiMotorCylinder_setObjectColor", _wrap_KikiMotorCylinder_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiMotorCylinder_swigregister", KikiMotorCylinder_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiMotorGear", _wrap_new_KikiMotorGear, METH_VARARGS, NULL}, { (char *)"KikiMotorGear_setObjectColor", _wrap_KikiMotorGear_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiMotorGear_swigregister", KikiMotorGear_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiGenerator", _wrap_new_KikiGenerator, METH_VARARGS, NULL}, { (char *)"KikiGenerator_setObjectColor", _wrap_KikiGenerator_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiGenerator_swigregister", KikiGenerator_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiLight", _wrap_new_KikiLight, METH_VARARGS, NULL}, { (char *)"KikiLight_setObjectColor", _wrap_KikiLight_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiLight_swigregister", KikiLight_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToLight", _wrap_kikiObjectToLight, METH_VARARGS, NULL}, { (char *)"new_KikiCellText", _wrap_new_KikiCellText, METH_VARARGS, NULL}, { (char *)"KikiCellText_setOffset", _wrap_KikiCellText_setOffset, METH_VARARGS, NULL}, { (char *)"KikiCellText_setObjectColor", _wrap_KikiCellText_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiCellText_swigregister", KikiCellText_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToCellText", _wrap_kikiObjectToCellText, METH_VARARGS, NULL}, { (char *)"new_KikiStone", _wrap_new_KikiStone, METH_VARARGS, NULL}, { (char *)"KikiStone_setObjectColor", _wrap_KikiStone_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiStone_swigregister", KikiStone_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToStone", _wrap_kikiObjectToStone, METH_VARARGS, NULL}, { (char *)"new_KikiWireStone", _wrap_new_KikiWireStone, METH_VARARGS, NULL}, { (char *)"KikiWireStone_setObjectColor", _wrap_KikiWireStone_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiWireStone_swigregister", KikiWireStone_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToWireStone", _wrap_kikiObjectToWireStone, METH_VARARGS, NULL}, { (char *)"new_KikiWall", _wrap_new_KikiWall, METH_VARARGS, NULL}, { (char *)"KikiWall_setObjectColor", _wrap_KikiWall_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiWall_swigregister", KikiWall_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToWall", _wrap_kikiObjectToWall, METH_VARARGS, NULL}, { (char *)"new_KikiBomb", _wrap_new_KikiBomb, METH_VARARGS, NULL}, { (char *)"KikiBomb_setObjectColor", _wrap_KikiBomb_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiBomb_swigregister", KikiBomb_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToBomb", _wrap_kikiObjectToBomb, METH_VARARGS, NULL}, { (char *)"new_KikiSwitch", _wrap_new_KikiSwitch, METH_VARARGS, NULL}, { (char *)"KikiSwitch_toggle", _wrap_KikiSwitch_toggle, METH_VARARGS, NULL}, { (char *)"KikiSwitch_setActive", _wrap_KikiSwitch_setActive, METH_VARARGS, NULL}, { (char *)"KikiSwitch_isActive", _wrap_KikiSwitch_isActive, METH_VARARGS, NULL}, { (char *)"KikiSwitch_setObjectColor", _wrap_KikiSwitch_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiSwitch_swigregister", KikiSwitch_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToSwitch", _wrap_kikiObjectToSwitch, METH_VARARGS, NULL}, { (char *)"new_KikiGate", _wrap_new_KikiGate, METH_VARARGS, NULL}, { (char *)"KikiGate_setObjectColor", _wrap_KikiGate_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiGate_swigregister", KikiGate_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToGate", _wrap_kikiObjectToGate, METH_VARARGS, NULL}, { (char *)"KikiAtom_setValue", _wrap_KikiAtom_setValue, METH_VARARGS, NULL}, { (char *)"KikiAtom_getValue", _wrap_KikiAtom_getValue, METH_VARARGS, NULL}, { (char *)"KikiAtom_swigregister", KikiAtom_swigregister, METH_VARARGS, NULL}, { (char *)"KikiMovesAtom_setObjectColor", _wrap_KikiMovesAtom_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiMovesAtom_swigregister", KikiMovesAtom_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiValueAtom", _wrap_new_KikiValueAtom, METH_VARARGS, NULL}, { (char *)"KikiValueAtom_setObjectColor", _wrap_KikiValueAtom_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiValueAtom_swigregister", KikiValueAtom_swigregister, METH_VARARGS, NULL}, { (char *)"new_KikiSpikes", _wrap_new_KikiSpikes, METH_VARARGS, NULL}, { (char *)"KikiSpikes_setObjectColor", _wrap_KikiSpikes_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiSpikes_swigregister", KikiSpikes_swigregister, METH_VARARGS, NULL}, { (char *)"kikiObjectToSpikes", _wrap_kikiObjectToSpikes, METH_VARARGS, NULL}, { (char *)"KikiBullet_setObjectColor", _wrap_KikiBullet_setObjectColor, METH_VARARGS, NULL}, { (char *)"KikiBullet_swigregister", KikiBullet_swigregister, METH_VARARGS, NULL}, { (char *)"KConsole__print", _wrap_KConsole__print, METH_VARARGS, NULL}, { (char *)"KConsole_write", _wrap_KConsole_write, METH_VARARGS, NULL}, { (char *)"KConsole_printError", _wrap_KConsole_printError, METH_VARARGS, NULL}, { (char *)"KConsole_getConsole", _wrap_KConsole_getConsole, METH_VARARGS, NULL}, { (char *)"KConsole_clear", _wrap_KConsole_clear, METH_VARARGS, NULL}, { (char *)"KConsole_swigregister", KConsole_swigregister, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_cursorPos_set", _wrap_KikiPythonWidget_cursorPos_set, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_cursorPos_get", _wrap_KikiPythonWidget_cursorPos_get, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_selectionPos_set", _wrap_KikiPythonWidget_selectionPos_set, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_selectionPos_get", _wrap_KikiPythonWidget_selectionPos_get, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_getTextRows", _wrap_KikiPythonWidget_getTextRows, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_getTextCols", _wrap_KikiPythonWidget_getTextCols, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_getTextSize", _wrap_KikiPythonWidget_getTextSize, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_getColumnWidth", _wrap_KikiPythonWidget_getColumnWidth, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_getRowHeight", _wrap_KikiPythonWidget_getRowHeight, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_getPythonWindow", _wrap_KikiPythonWidget_getPythonWindow, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_displayStringAtPos", _wrap_KikiPythonWidget_displayStringAtPos, METH_VARARGS, NULL}, { (char *)"KikiPythonWidget_swigregister", KikiPythonWidget_swigregister, METH_VARARGS, NULL}, { (char *)"KikiPython_getPythonWidget", _wrap_KikiPython_getPythonWidget, METH_VARARGS, NULL}, { (char *)"KikiPython_setScrollBarUnits", _wrap_KikiPython_setScrollBarUnits, METH_VARARGS, NULL}, { (char *)"KikiPython_requestUserInput", _wrap_KikiPython_requestUserInput, METH_VARARGS, NULL}, { (char *)"KikiPython_setTitle", _wrap_KikiPython_setTitle, METH_VARARGS, NULL}, { (char *)"KikiPython_setStatus", _wrap_KikiPython_setStatus, METH_VARARGS, NULL}, { (char *)"KikiPython_setInput", _wrap_KikiPython_setInput, METH_VARARGS, NULL}, { (char *)"KikiPython_executeFile", _wrap_KikiPython_executeFile, METH_VARARGS, NULL}, { (char *)"KikiPython_swigregister", KikiPython_swigregister, METH_VARARGS, NULL}, { NULL, NULL, 0, NULL } }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ static void *_p_KikiColumnMenuTo_p_KikiMenu(void *x) { return (void *)((KikiMenu *) ((KikiColumnMenu *) x)); } static void *_p_KikiScrollMenuTo_p_KikiMenu(void *x) { return (void *)((KikiMenu *) (KikiColumnMenu *) ((KikiScrollMenu *) x)); } static void *_p_KikiValveTo_p_KikiFace(void *x) { return (void *)((KikiFace *) ((KikiValve *) x)); } static void *_p_KikiMotorGearTo_p_KikiFace(void *x) { return (void *)((KikiFace *) (KikiGear *) ((KikiMotorGear *) x)); } static void *_p_KikiGeneratorTo_p_KikiFace(void *x) { return (void *)((KikiFace *) (KikiGear *) ((KikiGenerator *) x)); } static void *_p_KikiGearTo_p_KikiFace(void *x) { return (void *)((KikiFace *) ((KikiGear *) x)); } static void *_p_KikiPyActionTo_p_KikiAction(void *x) { return (void *)((KikiAction *) ((KikiPyAction *) x)); } static void *_p_KikiColumnMenuTo_p_KikiScreenText(void *x) { return (void *)((KikiScreenText *) (KikiMenu *) ((KikiColumnMenu *) x)); } static void *_p_KikiMenuTo_p_KikiScreenText(void *x) { return (void *)((KikiScreenText *) ((KikiMenu *) x)); } static void *_p_KikiScrollMenuTo_p_KikiScreenText(void *x) { return (void *)((KikiScreenText *) (KikiMenu *)(KikiColumnMenu *) ((KikiScrollMenu *) x)); } static void *_p_KikiPageTextTo_p_KikiScreenText(void *x) { return (void *)((KikiScreenText *) ((KikiPageText *) x)); } static void *_p_KikiMutantTo_p_KikiBot(void *x) { return (void *)((KikiBot *) ((KikiMutant *) x)); } static void *_p_KikiPlayerTo_p_KikiBot(void *x) { return (void *)((KikiBot *) ((KikiPlayer *) x)); } static void *_p_KikiValueAtomTo_p_KikiAtom(void *x) { return (void *)((KikiAtom *) ((KikiValueAtom *) x)); } static void *_p_KikiMovesAtomTo_p_KikiAtom(void *x) { return (void *)((KikiAtom *) ((KikiMovesAtom *) x)); } static void *_p_KikiLightTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiLight *) x)); } static void *_p_KikiCellTextTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiCellText *) x)); } static void *_p_KikiWireStoneTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiStone *) ((KikiWireStone *) x)); } static void *_p_KikiScreenTextTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) ((KikiScreenText *) x)); } static void *_p_KikiSpikesTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiSpikes *) x)); } static void *_p_KikiBombTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiBomb *) x)); } static void *_p_KikiAtomTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiAtom *) x)); } static void *_p_KikiSwitchTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiSwitch *) x)); } static void *_p_KikiValueAtomTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiAtom *) ((KikiValueAtom *) x)); } static void *_p_KikiBotFumeTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiBotFume *) x)); } static void *_p_KikiWireTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiWire *) x)); } static void *_p_KikiMotorGearTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiGear *) ((KikiMotorGear *) x)); } static void *_p_KikiScrollMenuTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiScreenText *)(KikiMenu *)(KikiColumnMenu *) ((KikiScrollMenu *) x)); } static void *_p_KikiMutantTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiBot *) ((KikiMutant *) x)); } static void *_p_KikiColumnMenuTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiScreenText *)(KikiMenu *) ((KikiColumnMenu *) x)); } static void *_p_KikiMenuTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiScreenText *) ((KikiMenu *) x)); } static void *_p_KikiBotTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiBot *) x)); } static void *_p_KikiWallTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiWall *) x)); } static void *_p_KikiMovesAtomTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiAtom *) ((KikiMovesAtom *) x)); } static void *_p_KikiBulletTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiBullet *) x)); } static void *_p_KikiStoneTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiStone *) x)); } static void *_p_KikiGearTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiGear *) x)); } static void *_p_KikiControllerTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) ((KikiController *) x)); } static void *_p_KikiPageTextTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiScreenText *) ((KikiPageText *) x)); } static void *_p_KikiObjectTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) ((KikiObject *) x)); } static void *_p_KikiValveTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiValve *) x)); } static void *_p_KikiMotorCylinderTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *) ((KikiMotorCylinder *) x)); } static void *_p_KikiGateTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiSwitch *) ((KikiGate *) x)); } static void *_p_KikiPlayerTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiBot *) ((KikiPlayer *) x)); } static void *_p_KikiGeneratorTo_p_KikiActionObject(void *x) { return (void *)((KikiActionObject *) (KikiObject *)(KikiGear *) ((KikiGenerator *) x)); } static void *_p_KikiControllerTo_p_KEventHandler(void *x) { return (void *)((KEventHandler *) ((KikiController *) x)); } static void *_p_KikiScrollMenuTo_p_KikiColumnMenu(void *x) { return (void *)((KikiColumnMenu *) ((KikiScrollMenu *) x)); } static void *_p_KikiGUITo_p_KWindow(void *x) { return (void *)((KWindow *) ((KikiGUI *) x)); } static void *_p_KikiPythonTo_p_KWindow(void *x) { return (void *)((KWindow *) ((KikiPython *) x)); } static void *_p_KConsoleTo_p_KWindow(void *x) { return (void *)((KWindow *) ((KConsole *) x)); } static void *_p_KikiWireStoneTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiStone *) ((KikiWireStone *) x)); } static void *_p_KikiLightTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiLight *) x)); } static void *_p_KikiCellTextTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiCellText *) x)); } static void *_p_KikiSpikesTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiSpikes *) x)); } static void *_p_KikiBombTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiBomb *) x)); } static void *_p_KikiAtomTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiAtom *) x)); } static void *_p_KikiSwitchTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiSwitch *) x)); } static void *_p_KikiValueAtomTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiAtom *) ((KikiValueAtom *) x)); } static void *_p_KikiBotFumeTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiBotFume *) x)); } static void *_p_KikiWireTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiWire *) x)); } static void *_p_KikiMotorGearTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiGear *) ((KikiMotorGear *) x)); } static void *_p_KikiMutantTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiBot *) ((KikiMutant *) x)); } static void *_p_KikiBotTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiBot *) x)); } static void *_p_KikiWallTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiWall *) x)); } static void *_p_KikiMovesAtomTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiAtom *) ((KikiMovesAtom *) x)); } static void *_p_KikiBulletTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiBullet *) x)); } static void *_p_KikiStoneTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiStone *) x)); } static void *_p_KikiGearTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiGear *) x)); } static void *_p_KikiMotorCylinderTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiMotorCylinder *) x)); } static void *_p_KikiValveTo_p_KikiObject(void *x) { return (void *)((KikiObject *) ((KikiValve *) x)); } static void *_p_KikiGateTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiSwitch *) ((KikiGate *) x)); } static void *_p_KikiPlayerTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiBot *) ((KikiPlayer *) x)); } static void *_p_KikiGeneratorTo_p_KikiObject(void *x) { return (void *)((KikiObject *) (KikiGear *) ((KikiGenerator *) x)); } static void *_p_KikiGateTo_p_KikiSwitch(void *x) { return (void *)((KikiSwitch *) ((KikiGate *) x)); } static void *_p_KikiWireStoneTo_p_KikiStone(void *x) { return (void *)((KikiStone *) ((KikiWireStone *) x)); } static void *_p_KikiMotorGearTo_p_KikiGear(void *x) { return (void *)((KikiGear *) ((KikiMotorGear *) x)); } static void *_p_KikiGeneratorTo_p_KikiGear(void *x) { return (void *)((KikiGear *) ((KikiGenerator *) x)); } static void *_p_KikiColumnMenuTo_p_KikiText(void *x) { return (void *)((KikiText *) (KikiScreenText *)(KikiMenu *) ((KikiColumnMenu *) x)); } static void *_p_KikiCellTextTo_p_KikiText(void *x) { return (void *)((KikiText *) ((KikiCellText *) x)); } static void *_p_KikiScreenTextTo_p_KikiText(void *x) { return (void *)((KikiText *) ((KikiScreenText *) x)); } static void *_p_KikiMenuTo_p_KikiText(void *x) { return (void *)((KikiText *) (KikiScreenText *) ((KikiMenu *) x)); } static void *_p_KikiScrollMenuTo_p_KikiText(void *x) { return (void *)((KikiText *) (KikiScreenText *)(KikiMenu *)(KikiColumnMenu *) ((KikiScrollMenu *) x)); } static void *_p_KikiPageTextTo_p_KikiText(void *x) { return (void *)((KikiText *) (KikiScreenText *) ((KikiPageText *) x)); } static swig_type_info _swigt__p_KColor = {"_p_KColor", "KColor *", 0, 0, 0}; static swig_type_info _swigt__p_KConsole = {"_p_KConsole", "KConsole *", 0, 0, 0}; static swig_type_info _swigt__p_KEventHandler = {"_p_KEventHandler", "KEventHandler *", 0, 0, 0}; static swig_type_info _swigt__p_KKey = {"_p_KKey", "KKey *", 0, 0, 0}; static swig_type_info _swigt__p_KPosition = {"_p_KPosition", "KPosition *", 0, 0, 0}; static swig_type_info _swigt__p_KProjection = {"_p_KProjection", "KProjection *", 0, 0, 0}; static swig_type_info _swigt__p_KQuaternion = {"_p_KQuaternion", "KQuaternion *", 0, 0, 0}; static swig_type_info _swigt__p_KSize = {"_p_KSize", "KSize *", 0, 0, 0}; static swig_type_info _swigt__p_KVector = {"_p_KVector", "KVector *", 0, 0, 0}; static swig_type_info _swigt__p_KWindow = {"_p_KWindow", "KWindow *", 0, 0, 0}; static swig_type_info _swigt__p_KikiAction = {"_p_KikiAction", "KikiAction *", 0, 0, 0}; static swig_type_info _swigt__p_KikiActionObject = {"_p_KikiActionObject", "KikiActionObject *", 0, 0, 0}; static swig_type_info _swigt__p_KikiAtom = {"_p_KikiAtom", "KikiAtom *", 0, 0, 0}; static swig_type_info _swigt__p_KikiBomb = {"_p_KikiBomb", "KikiBomb *", 0, 0, 0}; static swig_type_info _swigt__p_KikiBot = {"_p_KikiBot", "KikiBot *", 0, 0, 0}; static swig_type_info _swigt__p_KikiBotFume = {"_p_KikiBotFume", "KikiBotFume *", 0, 0, 0}; static swig_type_info _swigt__p_KikiBotStatus = {"_p_KikiBotStatus", "KikiBotStatus *", 0, 0, 0}; static swig_type_info _swigt__p_KikiBullet = {"_p_KikiBullet", "KikiBullet *", 0, 0, 0}; static swig_type_info _swigt__p_KikiCellText = {"_p_KikiCellText", "KikiCellText *", 0, 0, 0}; static swig_type_info _swigt__p_KikiColumnMenu = {"_p_KikiColumnMenu", "KikiColumnMenu *", 0, 0, 0}; static swig_type_info _swigt__p_KikiController = {"_p_KikiController", "KikiController *", 0, 0, 0}; static swig_type_info _swigt__p_KikiEvent = {"_p_KikiEvent", "KikiEvent *", 0, 0, 0}; static swig_type_info _swigt__p_KikiFace = {"_p_KikiFace", "KikiFace *", 0, 0, 0}; static swig_type_info _swigt__p_KikiGUI = {"_p_KikiGUI", "KikiGUI *", 0, 0, 0}; static swig_type_info _swigt__p_KikiGate = {"_p_KikiGate", "KikiGate *", 0, 0, 0}; static swig_type_info _swigt__p_KikiGear = {"_p_KikiGear", "KikiGear *", 0, 0, 0}; static swig_type_info _swigt__p_KikiGenerator = {"_p_KikiGenerator", "KikiGenerator *", 0, 0, 0}; static swig_type_info _swigt__p_KikiLight = {"_p_KikiLight", "KikiLight *", 0, 0, 0}; static swig_type_info _swigt__p_KikiMenu = {"_p_KikiMenu", "KikiMenu *", 0, 0, 0}; static swig_type_info _swigt__p_KikiMotorCylinder = {"_p_KikiMotorCylinder", "KikiMotorCylinder *", 0, 0, 0}; static swig_type_info _swigt__p_KikiMotorGear = {"_p_KikiMotorGear", "KikiMotorGear *", 0, 0, 0}; static swig_type_info _swigt__p_KikiMovesAtom = {"_p_KikiMovesAtom", "KikiMovesAtom *", 0, 0, 0}; static swig_type_info _swigt__p_KikiMutant = {"_p_KikiMutant", "KikiMutant *", 0, 0, 0}; static swig_type_info _swigt__p_KikiObject = {"_p_KikiObject", "KikiObject *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPageText = {"_p_KikiPageText", "KikiPageText *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPlayback = {"_p_KikiPlayback", "KikiPlayback *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPlayer = {"_p_KikiPlayer", "KikiPlayer *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPos = {"_p_KikiPos", "KikiPos *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPyAction = {"_p_KikiPyAction", "KikiPyAction *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPython = {"_p_KikiPython", "KikiPython *", 0, 0, 0}; static swig_type_info _swigt__p_KikiPythonWidget = {"_p_KikiPythonWidget", "KikiPythonWidget *", 0, 0, 0}; static swig_type_info _swigt__p_KikiScreenText = {"_p_KikiScreenText", "KikiScreenText *", 0, 0, 0}; static swig_type_info _swigt__p_KikiScrollMenu = {"_p_KikiScrollMenu", "KikiScrollMenu *", 0, 0, 0}; static swig_type_info _swigt__p_KikiSound = {"_p_KikiSound", "KikiSound *", 0, 0, 0}; static swig_type_info _swigt__p_KikiSpikes = {"_p_KikiSpikes", "KikiSpikes *", 0, 0, 0}; static swig_type_info _swigt__p_KikiStatusDisplay = {"_p_KikiStatusDisplay", "KikiStatusDisplay *", 0, 0, 0}; static swig_type_info _swigt__p_KikiStone = {"_p_KikiStone", "KikiStone *", 0, 0, 0}; static swig_type_info _swigt__p_KikiSwitch = {"_p_KikiSwitch", "KikiSwitch *", 0, 0, 0}; static swig_type_info _swigt__p_KikiText = {"_p_KikiText", "KikiText *", 0, 0, 0}; static swig_type_info _swigt__p_KikiValueAtom = {"_p_KikiValueAtom", "KikiValueAtom *", 0, 0, 0}; static swig_type_info _swigt__p_KikiValve = {"_p_KikiValve", "KikiValve *", 0, 0, 0}; static swig_type_info _swigt__p_KikiWall = {"_p_KikiWall", "KikiWall *", 0, 0, 0}; static swig_type_info _swigt__p_KikiWire = {"_p_KikiWire", "KikiWire *", 0, 0, 0}; static swig_type_info _swigt__p_KikiWireStone = {"_p_KikiWireStone", "KikiWireStone *", 0, 0, 0}; static swig_type_info _swigt__p_KikiWorld = {"_p_KikiWorld", "KikiWorld *", 0, 0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, 0}; static swig_type_info _swigt__p_std__string = {"_p_std__string", "std::string *", 0, 0, 0}; static swig_type_info _swigt__ptrdiff_t = {"_ptrdiff_t", "ptrdiff_t", 0, 0, 0}; static swig_type_info _swigt__size_t = {"_size_t", "size_t", 0, 0, 0}; static swig_type_info _swigt__std__ptrdiff_t = {"_std__ptrdiff_t", "std::ptrdiff_t", 0, 0, 0}; static swig_type_info _swigt__std__size_t = {"_std__size_t", "std::size_t", 0, 0, 0}; static swig_type_info *swig_type_initial[] = { &_swigt__p_KColor, &_swigt__p_KConsole, &_swigt__p_KEventHandler, &_swigt__p_KKey, &_swigt__p_KPosition, &_swigt__p_KProjection, &_swigt__p_KQuaternion, &_swigt__p_KSize, &_swigt__p_KVector, &_swigt__p_KWindow, &_swigt__p_KikiAction, &_swigt__p_KikiActionObject, &_swigt__p_KikiAtom, &_swigt__p_KikiBomb, &_swigt__p_KikiBot, &_swigt__p_KikiBotFume, &_swigt__p_KikiBotStatus, &_swigt__p_KikiBullet, &_swigt__p_KikiCellText, &_swigt__p_KikiColumnMenu, &_swigt__p_KikiController, &_swigt__p_KikiEvent, &_swigt__p_KikiFace, &_swigt__p_KikiGUI, &_swigt__p_KikiGate, &_swigt__p_KikiGear, &_swigt__p_KikiGenerator, &_swigt__p_KikiLight, &_swigt__p_KikiMenu, &_swigt__p_KikiMotorCylinder, &_swigt__p_KikiMotorGear, &_swigt__p_KikiMovesAtom, &_swigt__p_KikiMutant, &_swigt__p_KikiObject, &_swigt__p_KikiPageText, &_swigt__p_KikiPlayback, &_swigt__p_KikiPlayer, &_swigt__p_KikiPos, &_swigt__p_KikiPyAction, &_swigt__p_KikiPython, &_swigt__p_KikiPythonWidget, &_swigt__p_KikiScreenText, &_swigt__p_KikiScrollMenu, &_swigt__p_KikiSound, &_swigt__p_KikiSpikes, &_swigt__p_KikiStatusDisplay, &_swigt__p_KikiStone, &_swigt__p_KikiSwitch, &_swigt__p_KikiText, &_swigt__p_KikiValueAtom, &_swigt__p_KikiValve, &_swigt__p_KikiWall, &_swigt__p_KikiWire, &_swigt__p_KikiWireStone, &_swigt__p_KikiWorld, &_swigt__p_char, &_swigt__p_std__string, &_swigt__ptrdiff_t, &_swigt__size_t, &_swigt__std__ptrdiff_t, &_swigt__std__size_t, }; static swig_cast_info _swigc__p_KColor[] = { {&_swigt__p_KColor, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KConsole[] = { {&_swigt__p_KConsole, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KEventHandler[] = { {&_swigt__p_KikiController, _p_KikiControllerTo_p_KEventHandler, 0, 0}, {&_swigt__p_KEventHandler, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KKey[] = { {&_swigt__p_KKey, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KPosition[] = { {&_swigt__p_KPosition, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KProjection[] = { {&_swigt__p_KProjection, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KQuaternion[] = { {&_swigt__p_KQuaternion, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KSize[] = { {&_swigt__p_KSize, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KVector[] = { {&_swigt__p_KVector, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KWindow[] = { {&_swigt__p_KikiGUI, _p_KikiGUITo_p_KWindow, 0, 0}, {&_swigt__p_KikiPython, _p_KikiPythonTo_p_KWindow, 0, 0}, {&_swigt__p_KWindow, 0, 0, 0}, {&_swigt__p_KConsole, _p_KConsoleTo_p_KWindow, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiAction[] = { {&_swigt__p_KikiAction, 0, 0, 0}, {&_swigt__p_KikiPyAction, _p_KikiPyActionTo_p_KikiAction, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiActionObject[] = { {&_swigt__p_KikiWireStone, _p_KikiWireStoneTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiLight, _p_KikiLightTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiCellText, _p_KikiCellTextTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiActionObject, 0, 0, 0}, {&_swigt__p_KikiScreenText, _p_KikiScreenTextTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiSpikes, _p_KikiSpikesTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiBomb, _p_KikiBombTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiAtom, _p_KikiAtomTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiValueAtom, _p_KikiValueAtomTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiSwitch, _p_KikiSwitchTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiBotFume, _p_KikiBotFumeTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiWire, _p_KikiWireTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiMotorGear, _p_KikiMotorGearTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiScrollMenu, _p_KikiScrollMenuTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiColumnMenu, _p_KikiColumnMenuTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiMutant, _p_KikiMutantTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiMenu, _p_KikiMenuTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiMovesAtom, _p_KikiMovesAtomTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiBot, _p_KikiBotTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiWall, _p_KikiWallTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiBullet, _p_KikiBulletTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiStone, _p_KikiStoneTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiGear, _p_KikiGearTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiController, _p_KikiControllerTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiPageText, _p_KikiPageTextTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiGate, _p_KikiGateTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiObject, _p_KikiObjectTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiMotorCylinder, _p_KikiMotorCylinderTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiValve, _p_KikiValveTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiPlayer, _p_KikiPlayerTo_p_KikiActionObject, 0, 0}, {&_swigt__p_KikiGenerator, _p_KikiGeneratorTo_p_KikiActionObject, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiAtom[] = { {&_swigt__p_KikiValueAtom, _p_KikiValueAtomTo_p_KikiAtom, 0, 0}, {&_swigt__p_KikiAtom, 0, 0, 0}, {&_swigt__p_KikiMovesAtom, _p_KikiMovesAtomTo_p_KikiAtom, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiBomb[] = { {&_swigt__p_KikiBomb, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiBot[] = { {&_swigt__p_KikiMutant, _p_KikiMutantTo_p_KikiBot, 0, 0}, {&_swigt__p_KikiBot, 0, 0, 0}, {&_swigt__p_KikiPlayer, _p_KikiPlayerTo_p_KikiBot, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiBotFume[] = { {&_swigt__p_KikiBotFume, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiBotStatus[] = { {&_swigt__p_KikiBotStatus, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiBullet[] = { {&_swigt__p_KikiBullet, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiCellText[] = { {&_swigt__p_KikiCellText, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiColumnMenu[] = { {&_swigt__p_KikiColumnMenu, 0, 0, 0}, {&_swigt__p_KikiScrollMenu, _p_KikiScrollMenuTo_p_KikiColumnMenu, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiController[] = { {&_swigt__p_KikiController, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiEvent[] = { {&_swigt__p_KikiEvent, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiFace[] = { {&_swigt__p_KikiValve, _p_KikiValveTo_p_KikiFace, 0, 0}, {&_swigt__p_KikiMotorGear, _p_KikiMotorGearTo_p_KikiFace, 0, 0}, {&_swigt__p_KikiGenerator, _p_KikiGeneratorTo_p_KikiFace, 0, 0}, {&_swigt__p_KikiFace, 0, 0, 0}, {&_swigt__p_KikiGear, _p_KikiGearTo_p_KikiFace, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiGUI[] = { {&_swigt__p_KikiGUI, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiGate[] = { {&_swigt__p_KikiGate, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiGear[] = { {&_swigt__p_KikiMotorGear, _p_KikiMotorGearTo_p_KikiGear, 0, 0}, {&_swigt__p_KikiGenerator, _p_KikiGeneratorTo_p_KikiGear, 0, 0}, {&_swigt__p_KikiGear, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiGenerator[] = { {&_swigt__p_KikiGenerator, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiLight[] = { {&_swigt__p_KikiLight, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiMenu[] = { {&_swigt__p_KikiColumnMenu, _p_KikiColumnMenuTo_p_KikiMenu, 0, 0}, {&_swigt__p_KikiMenu, 0, 0, 0}, {&_swigt__p_KikiScrollMenu, _p_KikiScrollMenuTo_p_KikiMenu, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiMotorCylinder[] = { {&_swigt__p_KikiMotorCylinder, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiMotorGear[] = { {&_swigt__p_KikiMotorGear, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiMovesAtom[] = { {&_swigt__p_KikiMovesAtom, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiMutant[] = { {&_swigt__p_KikiMutant, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiObject[] = { {&_swigt__p_KikiWireStone, _p_KikiWireStoneTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiLight, _p_KikiLightTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiCellText, _p_KikiCellTextTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiSpikes, _p_KikiSpikesTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiBomb, _p_KikiBombTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiAtom, _p_KikiAtomTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiValueAtom, _p_KikiValueAtomTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiSwitch, _p_KikiSwitchTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiBotFume, _p_KikiBotFumeTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiWire, _p_KikiWireTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiMotorGear, _p_KikiMotorGearTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiMutant, _p_KikiMutantTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiMovesAtom, _p_KikiMovesAtomTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiBot, _p_KikiBotTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiWall, _p_KikiWallTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiBullet, _p_KikiBulletTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiStone, _p_KikiStoneTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiGear, _p_KikiGearTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiGate, _p_KikiGateTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiObject, 0, 0, 0}, {&_swigt__p_KikiMotorCylinder, _p_KikiMotorCylinderTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiValve, _p_KikiValveTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiPlayer, _p_KikiPlayerTo_p_KikiObject, 0, 0}, {&_swigt__p_KikiGenerator, _p_KikiGeneratorTo_p_KikiObject, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPageText[] = { {&_swigt__p_KikiPageText, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPlayback[] = { {&_swigt__p_KikiPlayback, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPlayer[] = { {&_swigt__p_KikiPlayer, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPos[] = { {&_swigt__p_KikiPos, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPyAction[] = { {&_swigt__p_KikiPyAction, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPython[] = { {&_swigt__p_KikiPython, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiPythonWidget[] = { {&_swigt__p_KikiPythonWidget, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiScreenText[] = { {&_swigt__p_KikiColumnMenu, _p_KikiColumnMenuTo_p_KikiScreenText, 0, 0}, {&_swigt__p_KikiScreenText, 0, 0, 0}, {&_swigt__p_KikiScrollMenu, _p_KikiScrollMenuTo_p_KikiScreenText, 0, 0}, {&_swigt__p_KikiMenu, _p_KikiMenuTo_p_KikiScreenText, 0, 0}, {&_swigt__p_KikiPageText, _p_KikiPageTextTo_p_KikiScreenText, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiScrollMenu[] = { {&_swigt__p_KikiScrollMenu, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiSound[] = { {&_swigt__p_KikiSound, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiSpikes[] = { {&_swigt__p_KikiSpikes, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiStatusDisplay[] = { {&_swigt__p_KikiStatusDisplay, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiStone[] = { {&_swigt__p_KikiStone, 0, 0, 0}, {&_swigt__p_KikiWireStone, _p_KikiWireStoneTo_p_KikiStone, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiSwitch[] = { {&_swigt__p_KikiSwitch, 0, 0, 0}, {&_swigt__p_KikiGate, _p_KikiGateTo_p_KikiSwitch, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiText[] = { {&_swigt__p_KikiColumnMenu, _p_KikiColumnMenuTo_p_KikiText, 0, 0}, {&_swigt__p_KikiText, 0, 0, 0}, {&_swigt__p_KikiCellText, _p_KikiCellTextTo_p_KikiText, 0, 0}, {&_swigt__p_KikiScreenText, _p_KikiScreenTextTo_p_KikiText, 0, 0}, {&_swigt__p_KikiScrollMenu, _p_KikiScrollMenuTo_p_KikiText, 0, 0}, {&_swigt__p_KikiMenu, _p_KikiMenuTo_p_KikiText, 0, 0}, {&_swigt__p_KikiPageText, _p_KikiPageTextTo_p_KikiText, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiValueAtom[] = { {&_swigt__p_KikiValueAtom, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiValve[] = { {&_swigt__p_KikiValve, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiWall[] = { {&_swigt__p_KikiWall, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiWire[] = { {&_swigt__p_KikiWire, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiWireStone[] = { {&_swigt__p_KikiWireStone, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_KikiWorld[] = { {&_swigt__p_KikiWorld, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_std__string[] = { {&_swigt__p_std__string, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__ptrdiff_t[] = { {&_swigt__ptrdiff_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__size_t[] = { {&_swigt__size_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__std__ptrdiff_t[] = { {&_swigt__std__ptrdiff_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__std__size_t[] = { {&_swigt__std__size_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { _swigc__p_KColor, _swigc__p_KConsole, _swigc__p_KEventHandler, _swigc__p_KKey, _swigc__p_KPosition, _swigc__p_KProjection, _swigc__p_KQuaternion, _swigc__p_KSize, _swigc__p_KVector, _swigc__p_KWindow, _swigc__p_KikiAction, _swigc__p_KikiActionObject, _swigc__p_KikiAtom, _swigc__p_KikiBomb, _swigc__p_KikiBot, _swigc__p_KikiBotFume, _swigc__p_KikiBotStatus, _swigc__p_KikiBullet, _swigc__p_KikiCellText, _swigc__p_KikiColumnMenu, _swigc__p_KikiController, _swigc__p_KikiEvent, _swigc__p_KikiFace, _swigc__p_KikiGUI, _swigc__p_KikiGate, _swigc__p_KikiGear, _swigc__p_KikiGenerator, _swigc__p_KikiLight, _swigc__p_KikiMenu, _swigc__p_KikiMotorCylinder, _swigc__p_KikiMotorGear, _swigc__p_KikiMovesAtom, _swigc__p_KikiMutant, _swigc__p_KikiObject, _swigc__p_KikiPageText, _swigc__p_KikiPlayback, _swigc__p_KikiPlayer, _swigc__p_KikiPos, _swigc__p_KikiPyAction, _swigc__p_KikiPython, _swigc__p_KikiPythonWidget, _swigc__p_KikiScreenText, _swigc__p_KikiScrollMenu, _swigc__p_KikiSound, _swigc__p_KikiSpikes, _swigc__p_KikiStatusDisplay, _swigc__p_KikiStone, _swigc__p_KikiSwitch, _swigc__p_KikiText, _swigc__p_KikiValueAtom, _swigc__p_KikiValve, _swigc__p_KikiWall, _swigc__p_KikiWire, _swigc__p_KikiWireStone, _swigc__p_KikiWorld, _swigc__p_char, _swigc__p_std__string, _swigc__ptrdiff_t, _swigc__size_t, _swigc__std__ptrdiff_t, _swigc__std__size_t, }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_const_info swig_const_table[] = { {0, 0, 0, 0.0, 0, 0}}; #ifdef __cplusplus } #endif /************************************************************************* * Type initialization: * This problem is tough by the requirement that no dynamic * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back * to swig_type_info structures, we need some lookup code at initialization. * The idea is that swig generates all the structures that are needed. * The runtime then collects these partially filled structures. * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * The generated swig_type_info structures are assigned staticly to an initial * array. We just loop though that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the * cast linked list. The cast data is initially stored in something like a * two-dimensional array. Each row corresponds to a type (there are the same * number of rows as there are in the swig_type_initial array). Each entry in * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that * swig_cast_info to the linked list (because the cast->type) pointer will * be correct. **/ #ifdef __cplusplus extern "C" { #endif SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { swig_type_info *type, *ret; swig_cast_info *cast; size_t i; swig_module_info *module_head; static int init_run = 0; clientdata = clientdata; if (init_run) return; init_run = 1; /* Initialize the swig_module */ swig_module.type_initial = swig_type_initial; swig_module.cast_initial = swig_cast_initial; /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (module_head) { swig_module.next = module_head->next; module_head->next = &swig_module; } else { /* This is the first module loaded */ swig_module.next = &swig_module; SWIG_SetModule(clientdata, &swig_module); } /* Now work on filling in swig_module.types */ for (i = 0; i < swig_module.size; ++i) { type = 0; /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); } if (type) { /* Overwrite clientdata field */ if (swig_module.type_initial[i]->clientdata) type->clientdata = swig_module.type_initial[i]->clientdata; } else { type = swig_module.type_initial[i]; } /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { /* Don't need to add information already in the list */ ret = 0; if (swig_module.next != &swig_module) { ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); } if (ret && type == swig_module.type_initial[i]) { cast->type = ret; ret = 0; } if (!ret) { if (type->cast) { type->cast->prev = cast; cast->next = type->cast; } type->cast = cast; } cast++; } /* Set entry in modules->types array equal to the type */ swig_module.types[i] = type; } } /* This function will propagate the clientdata field of type to * any new swig_type_info structures that have been added into the list * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ SWIGRUNTIME void SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; if (init_run) return; init_run = 1; for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; while (equiv) { if (!equiv->converter) { if (equiv->type && !equiv->type->clientdata) SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); } equiv = equiv->next; } } } } #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif /* Python-specific SWIG API */ #define SWIG_newvarlink() SWIG_Python_newvarlink() #define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) #define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) /* ----------------------------------------------------------------------------- * global variable support code. * ----------------------------------------------------------------------------- */ typedef struct swig_globalvar { char *name; /* Name of global variable */ PyObject *(*get_attr)(void); /* Return the current value */ int (*set_attr)(PyObject *); /* Set the value */ struct swig_globalvar *next; } swig_globalvar; typedef struct swig_varlinkobject { PyObject_HEAD swig_globalvar *vars; } swig_varlinkobject; SWIGINTERN PyObject * swig_varlink_repr(swig_varlinkobject *v) { v = v; return PyString_FromString(""); } SWIGINTERN int swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) { swig_globalvar *var; flags = flags; fprintf(fp,"Swig global variables { "); for (var = v->vars; var; var=var->next) { fprintf(fp,"%s", var->name); if (var->next) fprintf(fp,", "); } fprintf(fp," }\n"); return 0; } SWIGINTERN PyObject * swig_varlink_getattr(swig_varlinkobject *v, char *n) { swig_globalvar *var = v->vars; while (var) { if (strcmp(var->name,n) == 0) { return (*var->get_attr)(); } var = var->next; } PyErr_SetString(PyExc_NameError,"Unknown C global variable"); return NULL; } SWIGINTERN int swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { swig_globalvar *var = v->vars; while (var) { if (strcmp(var->name,n) == 0) { return (*var->set_attr)(p); } var = var->next; } PyErr_SetString(PyExc_NameError,"Unknown C global variable"); return 1; } SWIGINTERN PyTypeObject* swig_varlink_type(void) { static char varlink__doc__[] = "Swig var link object"; static PyTypeObject varlink_type #if !defined(__cplusplus) ; static int type_init = 0; if (!type_init) { PyTypeObject tmp #endif = { PyObject_HEAD_INIT(&PyType_Type) 0, /* Number of items in variable part (ob_size) */ (char *)"swigvarlink", /* Type name (tp_name) */ sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */ 0, /* Itemsize (tp_itemsize) */ 0, /* Deallocator (tp_dealloc) */ (printfunc) swig_varlink_print, /* Print (tp_print) */ (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */ (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */ 0, /* tp_compare */ (reprfunc) swig_varlink_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ 0, /* tp_flags */ varlink__doc__, /* tp_doc */ #if PY_VERSION_HEX >= 0x02000000 0, /* tp_traverse */ 0, /* tp_clear */ #endif #if PY_VERSION_HEX >= 0x02010000 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ #endif #if PY_VERSION_HEX >= 0x02020000 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif #ifdef COUNT_ALLOCS 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; #if !defined(__cplusplus) varlink_type = tmp; type_init = 1; } #endif return &varlink_type; } /* Create a variable linking object for use later */ SWIGINTERN PyObject * SWIG_Python_newvarlink(void) { swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); if (result) { result->vars = 0; } return ((PyObject*) result); } SWIGINTERN void SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { swig_varlinkobject *v = (swig_varlinkobject *) p; swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); if (gv) { size_t size = strlen(name)+1; gv->name = (char *)malloc(size); if (gv->name) { strncpy(gv->name,name,size); gv->get_attr = get_attr; gv->set_attr = set_attr; gv->next = v->vars; } } v->vars = gv; } /* ----------------------------------------------------------------------------- * constants/methods manipulation * ----------------------------------------------------------------------------- */ /* Install Constants */ SWIGINTERN void SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { PyObject *obj = 0; size_t i; for (i = 0; constants[i].type; ++i) { switch(constants[i].type) { case SWIG_PY_INT: obj = PyInt_FromLong(constants[i].lvalue); break; case SWIG_PY_FLOAT: obj = PyFloat_FromDouble(constants[i].dvalue); break; case SWIG_PY_STRING: if (constants[i].pvalue) { obj = PyString_FromString((char *) constants[i].pvalue); } else { Py_INCREF(Py_None); obj = Py_None; } break; case SWIG_PY_POINTER: obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); break; case SWIG_PY_BINARY: obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); break; default: obj = 0; break; } if (obj) { PyDict_SetItemString(d,constants[i].name,obj); Py_DECREF(obj); } } } /* -----------------------------------------------------------------------------*/ /* Fix SwigMethods to carry the callback ptrs when needed */ /* -----------------------------------------------------------------------------*/ SWIGINTERN void SWIG_Python_FixMethods(PyMethodDef *methods, swig_const_info *const_table, swig_type_info **types, swig_type_info **types_initial) { size_t i; for (i = 0; methods[i].ml_name; ++i) { char *c = methods[i].ml_doc; if (c && (c = strstr(c, "swig_ptr: "))) { int j; swig_const_info *ci = 0; char *name = c + 10; for (j = 0; const_table[j].type; ++j) { if (strncmp(const_table[j].name, name, strlen(const_table[j].name)) == 0) { ci = &(const_table[j]); break; } } if (ci) { size_t shift = (ci->ptype) - types; swig_type_info *ty = types_initial[shift]; size_t ldoc = (c - methods[i].ml_doc); size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; char *ndoc = (char*)malloc(ldoc + lptr + 10); if (ndoc) { char *buff = ndoc; void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; if (ptr) { strncpy(buff, methods[i].ml_doc, ldoc); buff += ldoc; strncpy(buff, "swig_ptr: ", 10); buff += 10; SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); methods[i].ml_doc = ndoc; } } } } } } /* -----------------------------------------------------------------------------* * Initialize type list * -----------------------------------------------------------------------------*/ #if PY_MAJOR_VERSION < 2 /* PyModule_AddObject function was introduced in Python 2.0. The following function is copied out of Python/modsupport.c in python version 2.3.4 */ SWIGINTERN int PyModule_AddObject(PyObject *m, char *name, PyObject *o) { PyObject *dict; if (!PyModule_Check(m)) { PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg"); return -1; } if (!o) { PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value"); return -1; } dict = PyModule_GetDict(m); if (dict == NULL) { /* Internal error -- modules must have a dict! */ PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", PyModule_GetName(m)); return -1; } if (PyDict_SetItemString(dict, name, o)) return -1; Py_DECREF(o); return 0; } #endif #ifdef __cplusplus } #endif /* -----------------------------------------------------------------------------* * Partial Init method * -----------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" #endif SWIGEXPORT void SWIG_init(void) { static PyObject *SWIG_globals = 0; PyObject *m, *d; if (!SWIG_globals) SWIG_globals = SWIG_newvarlink(); /* Fix SwigMethods to carry the callback ptrs when needed */ SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); m = Py_InitModule((char *) SWIG_name, SwigMethods); d = PyModule_GetDict(m); SWIG_InitializeModule(0); SWIG_InstallConstants(d,swig_const_table); { PyDict_SetItemString(d,"KikiAction_ONCE", SWIG_From_int((int)(KikiAction::ONCE))); } { PyDict_SetItemString(d,"KikiAction_CONTINUOUS", SWIG_From_int((int)(KikiAction::CONTINUOUS))); } { PyDict_SetItemString(d,"KikiAction_REPEAT", SWIG_From_int((int)(KikiAction::REPEAT))); } { PyDict_SetItemString(d,"KikiWorld_CAMERA_INSIDE", SWIG_From_int((int)(KikiWorld::CAMERA_INSIDE))); } { PyDict_SetItemString(d,"KikiWorld_CAMERA_BEHIND", SWIG_From_int((int)(KikiWorld::CAMERA_BEHIND))); } { PyDict_SetItemString(d,"KikiWorld_CAMERA_FOLLOW", SWIG_From_int((int)(KikiWorld::CAMERA_FOLLOW))); } PyDict_SetItemString(d,(char*)"kiki", SWIG_globals); SWIG_addvarlink(SWIG_globals,(char*)"Controller",_wrap_Controller_get, _wrap_Controller_set); { PyDict_SetItemString(d,"KikiText_base_color", SWIG_From_int((int)(KikiText::base_color))); } { PyDict_SetItemString(d,"KikiText_bright_color", SWIG_From_int((int)(KikiText::bright_color))); } { PyDict_SetItemString(d,"KikiText_dark_color", SWIG_From_int((int)(KikiText::dark_color))); } { PyDict_SetItemString(d,"KikiFace_PX", SWIG_From_int((int)(KikiFace::PX))); } { PyDict_SetItemString(d,"KikiFace_X", SWIG_From_int((int)(KikiFace::X))); } { PyDict_SetItemString(d,"KikiFace_PY", SWIG_From_int((int)(KikiFace::PY))); } { PyDict_SetItemString(d,"KikiFace_Y", SWIG_From_int((int)(KikiFace::Y))); } { PyDict_SetItemString(d,"KikiFace_PZ", SWIG_From_int((int)(KikiFace::PZ))); } { PyDict_SetItemString(d,"KikiFace_Z", SWIG_From_int((int)(KikiFace::Z))); } { PyDict_SetItemString(d,"KikiFace_NX", SWIG_From_int((int)(KikiFace::NX))); } { PyDict_SetItemString(d,"KikiFace_NY", SWIG_From_int((int)(KikiFace::NY))); } { PyDict_SetItemString(d,"KikiFace_NZ", SWIG_From_int((int)(KikiFace::NZ))); } { PyDict_SetItemString(d,"KikiWire_UP", SWIG_From_int((int)(KikiWire::UP))); } { PyDict_SetItemString(d,"KikiWire_RIGHT", SWIG_From_int((int)(KikiWire::RIGHT))); } { PyDict_SetItemString(d,"KikiWire_DOWN", SWIG_From_int((int)(KikiWire::DOWN))); } { PyDict_SetItemString(d,"KikiWire_VERTICAL", SWIG_From_int((int)(KikiWire::VERTICAL))); } { PyDict_SetItemString(d,"KikiWire_LEFT", SWIG_From_int((int)(KikiWire::LEFT))); } { PyDict_SetItemString(d,"KikiWire_HORIZONTAL", SWIG_From_int((int)(KikiWire::HORIZONTAL))); } { PyDict_SetItemString(d,"KikiWire_ALL", SWIG_From_int((int)(KikiWire::ALL))); } } kiki/SWIG/KikiPy_wrap.h0000666000000000000000000000020307644706127013672 0ustar rootroot/* * KikiPy_wrap.h * kiki */ #ifndef __KikiPy_wrap #define __KikiPy_wrap extern "C" void init_kiki (); #endif kiki/SWIG/KikiPyAction.i0000666000000000000000000000116407644706127014007 0ustar rootroot // -------------------------------------------------------------------------------------------------------- class KikiPyAction : public KikiAction { public: // ........................................................................ PUBLIC KikiPyAction ( PyObject * pyself, PyObject * object, const std::string & name, int duration = 0, int mode = KikiAction::CONTINUOUS ); ~KikiPyAction (); %pythoncode %{ def __init__(self,*args): self.this = apply (_kiki.new_KikiPyAction, (self,) + args) self.thisown = 1 %} }; kiki/SWIG/KikiPython.i0000666000000000000000000000233207644706127013540 0ustar rootroot // -------------------------------------------------------------------------------------------------------- %nodefault; class KikiPythonWidget { public: // ........................................................................ PUBLIC KikiPos cursorPos; KikiPos selectionPos; int getTextRows () const; int getTextCols () const; KSize getTextSize () const; int getColumnWidth () const; int getRowHeight () const; KikiPython * getPythonWindow () const; void displayStringAtPos ( const std::string & str, const KikiPos & pos ); }; // -------------------------------------------------------------------------------------------------------- %nodefault; class KikiPython : public KWindow { public: // ........................................................................ PUBLIC KikiPythonWidget * getPythonWidget (); void setScrollBarUnits( int, int ); void requestUserInput ( const std::string & str ); void setTitle ( const std::string & str ); void setStatus ( const std::string & str ); void setInput ( const std::string & str ); void executeFile ( const std::string & pythonFile ); }; kiki/SWIG/KikiPyTypemaps.i0000666000000000000000000000427207644706130014371 0ustar rootroot %include "typemaps.i" //%include "std_vector.i" // ......................................................... string %include "std_string.i" // doesn't work for me :-( /* %typemap(in) const std::string & { $1 = new std::string(PyString_AsString($input)); if (PyErr_Occurred()) return NULL; } %typemap(out) const std::string & { $result = PyString_FromString($1->c_str()); } %typemap(out) std::string { $result = PyString_FromString($1.c_str()); } %typemap(freearg) const std::string & { if ($1) delete $1; } */ // ......................................................... KSize %typemap(in) const KSize & { $1 = new KSize(PyInt_AsLong(PyTuple_GetItem($input, 0)), PyInt_AsLong(PyTuple_GetItem($input, 1))); if (PyErr_Occurred()) return NULL; } %typemap(in) KSize { $1 = KSize(PyInt_AsLong(PyTuple_GetItem($input, 0)), PyInt_AsLong(PyTuple_GetItem($input, 1))); if (PyErr_Occurred()) return NULL; } %typemap(out) const KSize & { $result = PyTuple_New(2); PyTuple_SetItem($result, 0, PyInt_FromLong($1.w)); PyTuple_SetItem($result, 1, PyInt_FromLong($1.h)); } %typemap(out) KSize { $result = PyTuple_New(2); PyTuple_SetItem($result, 0, PyInt_FromLong($1.w)); PyTuple_SetItem($result, 1, PyInt_FromLong($1.h)); } %typemap(freearg) const KSize & { if ($1) delete $1; } // ......................................................... KPosition %typemap(in) const KPosition & { $1 = new KPosition(PyInt_AsLong(PyTuple_GetItem($input, 0)), PyInt_AsLong(PyTuple_GetItem($input, 1))); if (PyErr_Occurred()) return NULL; } %typemap(in) KPosition { $1 = KPosition(PyInt_AsLong(PyTuple_GetItem($input, 0)), PyInt_AsLong(PyTuple_GetItem($input, 1))); if (PyErr_Occurred()) return NULL; } %typemap(out) const KPosition & { $result = PyTuple_New(2); PyTuple_SetItem($result, 0, PyInt_FromLong($1.x)); PyTuple_SetItem($result, 1, PyInt_FromLong($1.y)); } %typemap(out) KPosition { $result = PyTuple_New(2); PyTuple_SetItem($result, 0, PyInt_FromLong($1.x)); PyTuple_SetItem($result, 1, PyInt_FromLong($1.y)); } %typemap(freearg) const KPosition & { if ($1) delete $1; } kiki/SWIG/KikiSound.i0000666000000000000000000000103507644706130013340 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiSound { public: // ........................................................................ PUBLIC void toggleMute (); void setMute ( bool b ); bool isMute () const; void setSoundVolume ( int v ); int getSoundVolume () const; void playSound ( int sndId, float volume = -1.0, int loops = 0 ); void playSoundAtPos ( int sndId, const KikiPos & pos ); }; kiki/SWIG/KikiText.i0000666000000000000000000000216407644706130013200 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiText { public: // ........................................................................ PUBLIC enum { base_color, bright_color, dark_color }; KikiText ( const std::string & = "", bool center = true, int colorIndex = 0 ); void setText ( const std::string & str, int colorIndex = base_color ); const std::string & getText () const; void clear (); bool isEmpty () const; virtual void addText ( const std::string &, float scaleFactor = 1.0 ); const KColor & getColor () const; void setColor ( const KColor & c ); void setAlpha ( float alpha ); bool isAnimated () const; void setAnimated ( bool ); bool isCentered () const; void setCentered ( bool ); float getWidth () const; float getHeight () const; static void setObjectColor ( const char * color_name, const KColor & color ); }; kiki/SWIG/KikiTypes.i0000666000000000000000000001517207644706130013363 0ustar rootroot// __________________________________________________________________________________________________ class KikiPos { public: // ........................................................................ PUBLIC int x; int y; int z; KikiPos (); KikiPos ( int, int, int = 0 ); KikiPos ( const KikiPos & p ); KikiPos ( const KVector & v ); KikiPos operator- ( const KikiPos & p ) const; KikiPos operator+ ( const KikiPos & p ) const; KikiPos & operator+= ( const KikiPos & p ); KikiPos & operator-= ( const KikiPos & p ); std::string getString () const; %extend { bool __eq__ (const KikiPos & p) { return (self->x==p.x && self->y==p.y && self->z==p.z); } bool __ne__ (const KikiPos & p) { return (self->x!=p.x || self->y!=p.y || self->z!=p.z); } char * __str__ () { static char temp[256]; sprintf(temp,"[ %d, %d, %d ]", self->x,self->y,self->z); return &temp[0]; } } }; // __________________________________________________________________________________________________ typedef KikiPos KikiSize; // :-) // -------------------------------------------------------------------------------------------------------- class KVector { public: // ........................................................................ PUBLIC KVector (); KVector ( const float x, const float y, const float z = 0.0, const float w = 0.0 ); KVector ( const KVector & v ); KVector & reset (); KVector & normalize (); KVector & operator+= ( const KVector & ); KVector & operator-= ( const KVector & ); KVector & operator*= ( float ); KVector & operator/= ( float ); KVector cross ( const KVector & ) const; float operator* ( const KVector & ) const; KVector operator- ( const KVector & ) const; KVector operator+ ( const KVector & ) const; KVector operator* ( float ) const; KVector operator/ ( float ) const; KVector perpendicular ( const KVector & ) const; KVector parallel ( const KVector & ) const; KVector reflect ( const KVector & ) const; KVector normal () const; float length () const; float angle ( const KVector & ) const; float xyangle ( const KVector & ) const; KVector xyperp () const; KVector round () const; void glVertex () const; %extend { bool __getitem__ (int key) { return (*self)[key]; } char * __str__ () { static char temp[256]; sprintf(temp,"(%f, %f, %f)", (*self)[0],(*self)[1],(*self)[2]); return &temp[0]; } } }; // -------------------------------------------------------------------------------------------------------- class KQuaternion { public: // ........................................................................ PUBLIC float w, x, y, z; KQuaternion ( float w=1.0, float x=0.0, float y=0.0, float z=0.0 ); KQuaternion ( const KQuaternion & q ); KQuaternion ( const KVector & v ); static KQuaternion rotationAroundVector ( float theta, const KVector & vector ); KVector rotate ( const KVector & v ) const; KQuaternion & normalize (); KQuaternion & invert (); KQuaternion & conjugate (); KQuaternion getNormal () const; KQuaternion getConjugate () const; KQuaternion getInverse () const; float length () const; void glRotate () const; KQuaternion slerp ( const KQuaternion & quat, float t ) const; KQuaternion operator * ( const KQuaternion & quat ) const; %extend { char * __str__ () { static char temp[256]; sprintf(temp,"[ %f: %f, %f, %f ]", self->w, self->x, self->y, self->z); return &temp[0]; } } }; // -------------------------------------------------------------------------------------------------------- class KColor { public: // ........................................................................ PUBLIC KColor (); KColor ( const KColor & object ); KColor ( float r, float g, float b, float a = 1.0 ); void setValues ( const float r, const float g, const float b, const float a = 1.0 ); void setRed ( const float r ); void setGreen ( const float g ); void setBlue ( const float b ); void setAlpha ( const float a ); float getRed ( ) const; float getGreen ( ) const; float getBlue ( ) const; float getAlpha ( ) const; void glColor () const; %extend { char * __str__ () { static char temp[256]; sprintf (temp,"( r:%f g:%f b:%f a:%f)", self->getRed(), self->getGreen(), self->getBlue(), self->getAlpha()); return &temp[0]; } } }; // -------------------------------------------------------------------------------------------------------- %nodefault; class KProjection { public: // ........................................................................ PUBLIC void focusOn ( const KVector & position ); void setFov ( float ); float getFov () const; void setViewport ( float left, float bottom, float width, float height ); void setPosition ( const KVector & position ); }; // -------------------------------------------------------------------------------------------------------- %nodefault; struct KKey { KKey ( std::string keyName ); std::string name; std::string getUnmodifiedName () const; std::string getModifierName () const; }; kiki/SWIG/KikiWorld.i0000666000000000000000000000622507644706130013345 0ustar rootroot // __________________________________________________________________________________________________ %nodefault; class KikiWorld { public: // ........................................................................ PUBLIC enum { CAMERA_INSIDE, CAMERA_BEHIND, CAMERA_FOLLOW }; // ........................................................................ world size void setSize (int x, int y, int z = 0); KikiSize getSize () const; void setName ( const std::string & name ); std::string getName () const; void init (); void setDisplayShadows ( bool ); void setDisplayRaster ( bool ); void setDisplayBorder ( bool ); void setRasterSize ( float rasterSize ); static void setObjectColor ( const char * color_name, const KColor & color ); // ........................................................................ camera & projection void changeCameraMode (); int getCameraMode () const; void setCameraMode ( int mode ); KProjection * getProjection (); // ........................................................................ object handling void addObjectAtPos ( KikiObject * object, const KikiPos & pos ); void setObjectAtPos ( KikiObject * object, const KikiPos & pos ); void unsetObject ( KikiObject * object ); void removeObject ( KikiObject * object ); void deleteObject ( KikiObject * object ); void deleteAllObjects (); void deleteObjectsWithClassName ( const std::string & className ); KikiObject* getObjectWithName ( const std::string & objectName ); bool moveObjectToPos ( KikiObject * object, const KikiPos & pos ); void objectWillMoveToPos ( KikiObject * object, const KikiPos & pos, int duration ); void objectMovedFromPos ( KikiObject * object, const KikiPos & pos ); // ........................................................................ pos accessors KikiBot * getBotAtPos ( const KikiPos & pos ) const; KikiObject * getOccupantAtPos ( const KikiPos & pos ) const; KikiObject * getRealOccupantAtPos ( const KikiPos & pos ) const; // ........................................................................ position helpers KikiPos getNearestValidPos ( const KikiPos & pos ) const; bool isInvalidPos ( const KikiPos & pos ) const; bool isValidPos ( const KikiPos & pos ) const; bool isUnoccupiedPos ( const KikiPos & pos ) const; bool isOccupiedPos ( const KikiPos & pos ) const; int posToIndex ( const KikiPos & pos ) const; KikiPos indexToPos ( int index ) const; %extend { KikiPos getPickedPos () { if (self->getPickedPickable()) { return ((KikiObject*)self->getPickedPickable())->getPos(); } return KikiPos (); } } }; kiki/SWIG/KWindow.i0000666000000000000000000000101407644706130013017 0ustar rootroot // -------------------------------------------------------------------------------------------------------- %nodefault; class KWindow { public: // ........................................................................ PUBLIC bool isVisible () const; void setVisibility ( bool v ); void toggleVisibility (); void maximize (); void show (); void hide (); void close (); void setSize ( KSize ); void setPosition ( const KPosition & ); }; kiki/Thanks.txt0000666000000000000000000000200107645325323012502 0ustar rootrootBig thanks for contributing to the creation of this game goes to the following people: Music: Maintheme 2003 by Markus Schroeder N(S)N - Noise is Silence is Noise Re(S)earch Project iNto jilted liNk(S) betweeN Philo(S)ophy aNd (S)ouNd www.n2s1.com Linux Port: Frank Becker provided patches which served as the basis for the 'kiki on linux port'. Level: Niko Boehm made me very happy by creating the level 'captured'. he also provided bugfixes and hints for the linux port Consulting: Znek helped with some Project-Builder issues and wrote the Readme for building the application under Mac OS X. Together with Pick he started the Windows-port. www.idevgames.com: Carlos Camacho organized the competition which motivated me to write this program and also provided the sounds that are used in the game. Translations: Arthur Langereis Dutch F.C.Covett Portuguese jay_traveller Spanish Fenris Swedish kiki/kodilib/0000777000000000000000000000000010336064540012125 5ustar rootrootkiki/kodilib/kodilib.icns0000666000000000000000000014231407644705676014451 0ustar rootrooticnsÍICN#?}???}??icl4ͮޯ icl8VVVV+V+V+il32J      -(  Bb`C&*(  2ji5 ,?8" 7om5 -C4  *2FgsL.9+ ' " (OlaG8Fkq^6 $#5B.  Fvf6d|P", @XL0;GGJ7 fg:cxT,7A. #HZ^ZB!4QsKBgqc:  =EQRQEO<.QNA(5<5 *)996"+   +B* GIPݚPLM8;oMnLy骚iǣ~      -(  Bb`C&*(  2ji5 ,?8" 7om5 -C4  *2FgsL.9+ ' " (OlaG8Fkq^6 $#5B.  Fvf6d|P", @XL0;GGJ7 fg:cxT,7A. #HZ^ZB!4QsKBgqc:  =EQRQEO<.QNA(5<5 *)996"+   +B* GIPݚPLM8;oMnLy骚iǣ~      -(  Bb`C&*(  2ji5 ,?8" 7om5 -C4  *2FgsL.9+ ' " (OlaG8Fkq^6 $#5B.  Fvf6d|P", @XL0;GGJ7 fg:cxT,7A. #HZ^ZB!4QsKBgqc:  =EQRQEO<.QNA(5<5 *)996"+   +B* GIPݚPLM8;oMnLy骚iǣ~l8mk16 8K$C%Mמ'D#^ RYb=ݵ3w$14 >l-h:isms:Ӵ|:L !%/+AM-{ _G*z ws=wo4AJ]e'.CL ich#HoKkK}߫{uݯ_?_??߀????0??????ich4 ich8 VVVVVVV++++V++++VV+V+++VV+Vih32 Œ         .&  ;Yn`W+  %$  &`pulO  (+.)  >m~x^8 $.;@2$ El{^2 '/?P.%8`wsR!.@>,"  ,27OdlW8.;=( $+%"!$JdkaN4;6QaidaE "-0'  FfyvuiY&Hfz|s\>,)C#/?D8*  '6_xw\2WpzkM,+)",TZN?- (>EAAGD1 ZwsY;SpzjQ+!#"+CISS57ITRUXN>*E~m[!Eatxr]@ *  '-27<&&#BIZZ[]KB0:8n|{qX4 M[emcL$ '>CEUTSUKDGID95eUMB* ,=<4 A=[<$  ,%%==<>,%#   %%   Ktu_&  Y~: \ճ ɠ1 Ѩ= ~̦/ Oƕv[ܷC+؞mY)*䓩 VK&O         .&  ;Yn`W+  %$  &`pulO  (+.)  >m~x^8 $.;@2$ El{^2 '/?P.%8`wsR!.@>,"  ,27OdlW8.;=( $+%"!$JdkaN4;6QaidaE "-0'  FfyvuiY&Hfz|s\>,)C#/?D8*  '6_xw\2WpzkM,+)",TZN?- (>EAAGD1 ZwsY;SpzjQ+!#"+CISS57ITRUXN>*E~m[!Eatxr]@ *  '-27<&&#BIZZ[]KB0:8n|{qX4 M[emcL$ '>CEUTSUKDGID95eUMB* ,=<4 A=[<$  ,%%==<>,%#   %%   Ktu_&  Y~: \ճ ɠ1 Ѩ= ~̦/ Oƕv[ܷC+؞mY)*䓩 VK&O         .&  ;Yn`W+  %$  &`pulO  (+.)  >m~x^8 $.;@2$ El{^2 '/?P.%8`wsR!.@>,"  ,27OdlW8.;=( $+%"!$JdkaN4;6QaidaE "-0'  FfyvuiY&Hfz|s\>,)C#/?D8*  '6_xw\2WpzkM,+)",TZN?- (>EAAGD1 ZwsY;SpzjQ+!#"+CISS57ITRUXN>*E~m[!Eatxr]@ *  '-27<&&#BIZZ[]KB0:8n|{qX4 M[emcL$ '>CEUTSUKDGID95eUMB* ,=<4 A=[<$  ,%%==<>,%#   %%   Ktu_&  Y~: \ճ ɠ1 Ѩ= ~̦/ Oƕv[ܷC+؞mY)*䓩 VK&Oh8mk ÐE 6*{\w<#q%UUT<~~(D*K'9:W1%a0q< 9 2O7"" n|t`Q~7dics#H??ics4ics8VV++Vis32  $? UoF11  X~E-# . _rJlg4%D%.RC(u}Ehh5 .>5+.K66%~U [q73~  $? UoF11  X~E-# . _rJlg4%D%.RC(u}Ehh5 .>5+.K66%~U [q73~  $? UoF11  X~E-# . _rJlg4%D%.RC(u}Ehh5 .>5+.K66%~U [q73~s8mkb$"ny&)uf~,56Uv R Y7jK 99O+z9icm#8icm4hicm8it32F)                         (/)'#!$  #2COGC@<<9     %3CPYdWTQMIKB     0AJOU\sgd`\XVW6     HHNXgtysolhdhQ3 "&#!     3RVdorq}rolhciVC/  $%%&'(!   ?fehimt|vsmr\F6%  #"&&'('*+(#    &Mhafmwy}kQ=,' #+)(++-/-*)("    6Kgkt{xrvgZJ61"'(--.1244/-,&   8Ij~|{{~ytydTG=6$%$',3376::65(%%    $6Ojuqv{eUE;+"%"%(,5<:>A?@2&$#%   %;R\rux}{{j[I6$#%+25:EDGJ>-&$%" (?IVh}ytxn]UP.#$(//18DOSJ9,&&%/9ETgwxuz}|ytyfXMD #**),1:DTYE6*''"'KMHE4))$!:^xt|mjncXY=  !&&+8A=84+&"   $(-064),F_iitkgfUQ; /DEDEM=.# # %'045:82.-+%"  %/*08AKOQUUP>1&3elfd_P0%9BLTPSZ]WUOD%$$))+03.,)%%&# '.:ABHO[ll\UTP?6!1XXPI0"@EKZYY[g^YV][J3 $%'+*(%"!!## !&#)2?M[`gnhji^ZYRB;$9J6)&IP[ruxzqqpxmfbcYO>1FX]k{{wvt~nc\\SD0   "'+03280-(" ,5@O`rutw}wvv|olmkN? :QX_pstzpjcgRE@!# 8M"$$',/78@>820+" .->ITm|ww{|z~zjeT@+HVZgtpu|yonjUJE. " %1B`C  #)006FB4#"!!"",=GG=1(#  1BMlvtx{~~w}h\YL65CTrtqt}}y}ttlaC2&1 "#%..0&#''0D\_g`VOJE?:6/% %,9@@GOWOL?SSMGBC:1) @mtty{{uvo\UR9(?Ten{}{}~}zz{ldhaE30#'%%($$%&/HQPT^a[QKGB<8- '7?@CGIWRQ?XULKHCB=+ .hwy{~ysos\TT3">TZbn|{|zw}phbbPJ0 r!&$##!$#%0FFHKMNW_XNHD>! *ADCGKP[PQQRW\RPLIHB.  $+1>v{~~|pjocWH"?LR\jvz~ywyxidcYG@&q !##  ""$1>=?CDEFLUYSL3 1@EMQPU\SSTUVcXWUNDB3% #3612Q|z|ljlgG4/EKVggkqzt{mfa`MC4-  ##$0246::($)&#$)@CFILQ]^[\[\_e]RLIE?>**8;6<;78P~|zy|xyiSKB&?PMTYffddgrjggeRF2  ##%)C,,.13/!')*)'",DGIGKQ[WVWUVX]\PLJJF@)(;@?9@>65U}ume]\\SOQE6.!,EQLKLQSIEF>/%! !&-=F:BCBDKSZU&RTUW[ROKHEA5MSHFIG@>?816d^ZVTPNNEBC6(#! 1=CEJA=;7& ; !&CLYSSRQQSTXKEDCBBKieZJIF>43/%)TSNJE@=9026/" *)&&-&A   1I\CB;:@GQJJIHHIKQGA>>@H`{iWB83.'# -6.$ ! $:P5899>DMFDDFGLD@;5;7DSC2%  $6B/$).8CKGFEDEFFKE90(#)61+!  45/&-6B?>=;;=>C8/)!)-'# +  +*)&.7532113490( $ +    "00/-,,-/1$           $))**#     .MabbceaH,    *Ig|bI,  =[rp\< @^tsbA ;bvĴxe6 3^yρñ}^% Fu׀؀ͻw>Y܀ ŴS!lϾg!2|ów+?Ƿ{6>}ɸy7 6|˺v3 /yǹs.)oĶj) W³U;yο{B%b̽g. HʻT" *q܀ ƹ{?TŶf0 1|µO!`x<?˿c/"wʼMUɳx;/Ǥ`.lǀÎJ HѸt9 &ϧ\! dʎF ;o2 ~׫W \Ӎ;;k#wPV܉,6`w6h[[>&                         (/)'#!$  #2COGC@<<9     %3CPYdWTQMIKB     0AJOU\sgd`\XVW6     HHNXgtysolhdhQ3 "&#!     3RVdorq}rolhciVC/  $%%&'(!   ?fehimt|vsmr\F6%  #"&&'('*+(#    &Mhafmwy}kQ=,' #+)(++-/-*)("    6Kgkt{xrvgZJ61"'(--.1244/-,&   8Ij~|{{~ytydTG=6$%$',3376::65(%%    $6Ojuqv{eUE;+"%"%(,5<:>A?@2&$#%   %;R\rux}{{j[I6$#%+25:EDGJ>-&$%" (?IVh}ytxn]UP.#$(//18DOSJ9,&&%/9ETgwxuz}|ytyfXMD #**),1:DTYE6*''"'KMHE4))$!:^xt|mjncXY=  !&&+8A=84+&"   $(-064),F_iitkgfUQ; /DEDEM=.# # %'045:82.-+%"  %/*08AKOQUUP>1&3elfd_P0%9BLTPSZ]WUOD%$$))+03.,)%%&# '.:ABHO[ll\UTP?6!1XXPI0"@EKZYY[g^YV][J3 $%'+*(%"!!## !&#)2?M[`gnhji^ZYRB;$9J6)&IP[ruxzqqpxmfbcYO>1FX]k{{wvt~nc\\SD0   "'+03280-(" ,5@O`rutw}wvv|olmkN? :QX_pstzpjcgRE@!# 8M"$$',/78@>820+" .->ITm|ww{|z~zjeT@+HVZgtpu|yonjUJE. " %1B`C  #)006FB4#"!!"",=GG=1(#  1BMlvtx{~~w}h\YL65CTrtqt}}y}ttlaC2&1 "#%..0&#''0D\_g`VOJE?:6/% %,9@@GOWOL?SSMGBC:1) @mtty{{uvo\UR9(?Ten{}{}~}zz{ldhaE30#'%%($$%&/HQPT^a[QKGB<8- '7?@CGIWRQ?XULKHCB=+ .hwy{~ysos\TT3">TZbn|{|zw}phbbPJ0 r!&$##!$#%0FFHKMNW_XNHD>! *ADCGKP[PQQRW\RPLIHB.  $+1>v{~~|pjocWH"?LR\jvz~ywyxidcYG@&q !##  ""$1>=?CDEFLUYSL3 1@EMQPU\SSTUVcXWUNDB3% #3612Q|z|ljlgG4/EKVggkqzt{mfa`MC4-  ##$0246::($)&#$)@CFILQ]^[\[\_e]RLIE?>**8;6<;78P~|zy|xyiSKB&?PMTYffddgrjggeRF2  ##%)C,,.13/!')*)'",DGIGKQ[WVWUVX]\PLJJF@)(;@?9@>65U}ume]\\SOQE6.!,EQLKLQSIEF>/%! !&-=F:BCBDKSZU&RTUW[ROKHEA5MSHFIG@>?816d^ZVTPNNEBC6(#! 1=CEJA=;7& ; !&CLYSSRQQSTXKEDCBBKieZJIF>43/%)TSNJE@=9026/" *)&&-&A   1I\CB;:@GQJJIHHIKQGA>>@H`{iWB83.'# -6.$ ! $:P5899>DMFDDFGLD@;5;7DSC2%  $6B/$).8CKGFEDEFFKE90(#)61+!  45/&-6B?>=;;=>C8/)!)-'# +  +*)&.7532113490( $ +    "00/-,,-/1$           $))**#     .MabbceaH,    *Ig|bI,  =[rp\< @^tsbA ;bvĴxe6 3^yρñ}^% Fu׀؀ͻw>Y܀ ŴS!lϾg!2|ów+?Ƿ{6>}ɸy7 6|˺v3 /yǹs.)oĶj) W³U;yο{B%b̽g. HʻT" *q܀ ƹ{?TŶf0 1|µO!`x<?˿c/"wʼMUɳx;/Ǥ`.lǀÎJ HѸt9 &ϧ\! dʎF ;o2 ~׫W \Ӎ;;k#wPV܉,6`w6h[[>&                         (/)'#!$  #2COGC@<<9     %3CPYdWTQMIKB     0AJOU\sgd`\XVW6     HHNXgtysolhdhQ3 "&#!     3RVdorq}rolhciVC/  $%%&'(!   ?fehimt|vsmr\F6%  #"&&'('*+(#    &Mhafmwy}kQ=,' #+)(++-/-*)("    6Kgkt{xrvgZJ61"'(--.1244/-,&   8Ij~|{{~ytydTG=6$%$',3376::65(%%    $6Ojuqv{eUE;+"%"%(,5<:>A?@2&$#%   %;R\rux}{{j[I6$#%+25:EDGJ>-&$%" (?IVh}ytxn]UP.#$(//18DOSJ9,&&%/9ETgwxuz}|ytyfXMD #**),1:DTYE6*''"'KMHE4))$!:^xt|mjncXY=  !&&+8A=84+&"   $(-064),F_iitkgfUQ; /DEDEM=.# # %'045:82.-+%"  %/*08AKOQUUP>1&3elfd_P0%9BLTPSZ]WUOD%$$))+03.,)%%&# '.:ABHO[ll\UTP?6!1XXPI0"@EKZYY[g^YV][J3 $%'+*(%"!!## !&#)2?M[`gnhji^ZYRB;$9J6)&IP[ruxzqqpxmfbcYO>1FX]k{{wvt~nc\\SD0   "'+03280-(" ,5@O`rutw}wvv|olmkN? :QX_pstzpjcgRE@!# 8M"$$',/78@>820+" .->ITm|ww{|z~zjeT@+HVZgtpu|yonjUJE. " %1B`C  #)006FB4#"!!"",=GG=1(#  1BMlvtx{~~w}h\YL65CTrtqt}}y}ttlaC2&1 "#%..0&#''0D\_g`VOJE?:6/% %,9@@GOWOL?SSMGBC:1) @mtty{{uvo\UR9(?Ten{}{}~}zz{ldhaE30#'%%($$%&/HQPT^a[QKGB<8- '7?@CGIWRQ?XULKHCB=+ .hwy{~ysos\TT3">TZbn|{|zw}phbbPJ0 r!&$##!$#%0FFHKMNW_XNHD>! *ADCGKP[PQQRW\RPLIHB.  $+1>v{~~|pjocWH"?LR\jvz~ywyxidcYG@&q !##  ""$1>=?CDEFLUYSL3 1@EMQPU\SSTUVcXWUNDB3% #3612Q|z|ljlgG4/EKVggkqzt{mfa`MC4-  ##$0246::($)&#$)@CFILQ]^[\[\_e]RLIE?>**8;6<;78P~|zy|xyiSKB&?PMTYffddgrjggeRF2  ##%)C,,.13/!')*)'",DGIGKQ[WVWUVX]\PLJJF@)(;@?9@>65U}ume]\\SOQE6.!,EQLKLQSIEF>/%! !&-=F:BCBDKSZU&RTUW[ROKHEA5MSHFIG@>?816d^ZVTPNNEBC6(#! 1=CEJA=;7& ; !&CLYSSRQQSTXKEDCBBKieZJIF>43/%)TSNJE@=9026/" *)&&-&A   1I\CB;:@GQJJIHHIKQGA>>@H`{iWB83.'# -6.$ ! $:P5899>DMFDDFGLD@;5;7DSC2%  $6B/$).8CKGFEDEFFKE90(#)61+!  45/&-6B?>=;;=>C8/)!)-'# +  +*)&.7532113490( $ +    "00/-,,-/1$           $))**#     .MabbceaH,    *Ig|bI,  =[rp\< @^tsbA ;bvĴxe6 3^yρñ}^% Fu׀؀ͻw>Y܀ ŴS!lϾg!2|ów+?Ƿ{6>}ɸy7 6|˺v3 /yǹs.)oĶj) W³U;yο{B%b̽g. HʻT" *q܀ ƹ{?TŶf0 1|µO!`x<?˿c/"wʼMUɳx;/Ǥ`.lǀÎJ HѸt9 &ϧ\! dʎF ;o2 ~׫W \Ӎ;;k#wPV܉,6`w6h[[>&t8mk@ 3BYZC@1FW5֘JcɋE-O; 6=8@f P*FI*){ﳇV EΦ{E\Իw#s֮N0<< L'몚Y#ݹbпݢE$yźϵfʲ˹Ϭ>KqLA X*&RTT]F  @^%RUUI)1KT7|S kͻ~[$1{? Vɠ>p5x><^^֢M@ 49 Z ?"kP "Yb$2kuOOO7"""kuEB <"^n?G"X|$%BZaag322#apt8>aZUF<0',7HY `o*4DQ cr,6EU iw"o~ )7B cdkiki/kodilib/linux/0000777000000000000000000000000010336064546013272 5ustar rootrootkiki/kodilib/linux/Makefile0000666000000000000000000000630107644705676014750 0ustar rootroot# # kodilib for linux # # # you might have to change these to match your system # X11_INCLUDES = -I /usr/X11/include SDL_INCLUDES = -I /usr/include/SDL SDL_CFLAGS = -D_REENTRANT # # the following should be ok on most machines # # please let me know, if you had a hard time compiling kodilib (monsterkodi@gmx.net) # KODISRCDIR = ../src KODI_INCLUDES = -I $(KODISRCDIR)/handler -I $(KODISRCDIR)/tools -I $(KODISRCDIR)/types -I $(KODISRCDIR)/widgets -I $(KODISRCDIR)/windows INCLUDES = $(KODI_INCLUDES) $(X11_INCLUDES) $(SDL_INCLUDES) CXXFLAGS = $(INCLUDES) $(SDL_CFLAGS) src = \ $(KODISRCDIR)/handler/KEventHandler.cpp \ $(KODISRCDIR)/handler/KFileHandler.cpp \ $(KODISRCDIR)/handler/KKeyActionHandler.cpp \ $(KODISRCDIR)/handler/KKeyHandler.cpp \ $(KODISRCDIR)/handler/KKeyRecorder.cpp \ $(KODISRCDIR)/handler/KPickable.cpp \ $(KODISRCDIR)/handler/KPickHandler.cpp \ $(KODISRCDIR)/handler/KSelectable.cpp \ $(KODISRCDIR)/handler/KSelectionHandler.cpp \ $(KODISRCDIR)/tools/KDisplayTools.cpp \ $(KODISRCDIR)/tools/KFileTools.cpp \ $(KODISRCDIR)/tools/KIntrospection.cpp \ $(KODISRCDIR)/tools/KKeyTools.cpp \ $(KODISRCDIR)/tools/KNotificationObject.cpp \ $(KODISRCDIR)/tools/KStringTools.cpp \ $(KODISRCDIR)/tools/KXMLTools.cpp \ $(KODISRCDIR)/types/KKey.cpp \ $(KODISRCDIR)/types/KLight.cpp \ $(KODISRCDIR)/types/KLightingProjection.cpp \ $(KODISRCDIR)/types/KMatrix.cpp \ $(KODISRCDIR)/types/KOrthographicProjection.cpp \ $(KODISRCDIR)/types/KPerspectiveProjection.cpp \ $(KODISRCDIR)/types/KProjection.cpp \ $(KODISRCDIR)/types/KQuaternion.cpp \ $(KODISRCDIR)/types/KSeparatedMatrix.cpp \ $(KODISRCDIR)/types/KTexture.cpp \ $(KODISRCDIR)/types/KTrash.cpp \ $(KODISRCDIR)/widgets/KButton.cpp \ $(KODISRCDIR)/widgets/KButtonBox.cpp \ $(KODISRCDIR)/widgets/KFileNameField.cpp \ $(KODISRCDIR)/widgets/KFileTreeFile.cpp \ $(KODISRCDIR)/widgets/KFileTreeDir.cpp \ $(KODISRCDIR)/widgets/KFileTreeDirCurrent.cpp \ $(KODISRCDIR)/widgets/KFileTreeDirUp.cpp \ $(KODISRCDIR)/widgets/KFileTreeNode.cpp \ $(KODISRCDIR)/widgets/KFileTreeWidget.cpp \ $(KODISRCDIR)/widgets/KIconButton.cpp \ $(KODISRCDIR)/widgets/KKeySequenceField.cpp \ $(KODISRCDIR)/widgets/KLabel.cpp \ $(KODISRCDIR)/widgets/KMenu.cpp \ $(KODISRCDIR)/widgets/KMenuItem.cpp \ $(KODISRCDIR)/widgets/KNumberField.cpp \ $(KODISRCDIR)/widgets/KProjectionWidget.cpp \ $(KODISRCDIR)/widgets/KScrollBar.cpp \ $(KODISRCDIR)/widgets/KSliderButton.cpp \ $(KODISRCDIR)/widgets/KStatusMenuItem.cpp \ $(KODISRCDIR)/widgets/KSubMenuItem.cpp \ $(KODISRCDIR)/widgets/KTextField.cpp \ $(KODISRCDIR)/widgets/KTextWidget.cpp \ $(KODISRCDIR)/widgets/KToggleButton.cpp \ $(KODISRCDIR)/widgets/KWidget.cpp \ $(KODISRCDIR)/widgets/KWidgetArray.cpp \ $(KODISRCDIR)/windows/KConsole.cpp \ $(KODISRCDIR)/windows/KFileTreeWindow.cpp \ $(KODISRCDIR)/windows/KMenuWindow.cpp \ $(KODISRCDIR)/windows/KMessagePanel.cpp \ $(KODISRCDIR)/windows/KPopupMenu.cpp \ $(KODISRCDIR)/windows/KWindow.cpp obj = $(src:.cpp=.o) libkodi.a: $(obj) $(AR) r $@ $(filter-out %.h, $^) obj-clean: $(RM) -f $(obj) clean: $(RM) -f $(obj) libkodi.a %.o: %.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< kiki/kodilib/linux/Readme.txt0000666000000000000000000000206607646357257015252 0ustar rootroot Building kodilib on Linux Prerequisites kodilib depends on some libraries and development tools which have to be installed on your system before you will be able to build it. I will just list these dependencies here, please check the net or your distribution's documentation how to obtain and install these tools and libraries. Development Tools You will need a version 3 gcc compiler to build kiki. The environment variable CXX should point to the location of the c++-compiler, e.g: /usr/bin/g++-3.2 SDL libraries SDL http://www.libsdl.org SDL_image http://www.libsdl.org/projects/SDL_image/ If you install the binary packages, make sure you get the development versions: package-names ending with '-devel' or '-dev'. Building the kodilib enter make. If you are lucky, the library will be build immediately, otherwise you might have to adjust the paths at the top of the Makefile. On success, the library will be created kodilib/linux/libkodi.a kiki/kodilib/macosx/0000777000000000000000000000000010336064540013417 5ustar rootrootkiki/kodilib/macosx/.cvsignore0000666000000000000000000000002207644705676015435 0ustar rootrootbuild .DS_Store kiki/kodilib/macosx/kodilib.icns0000666000000000000000000014231407644705677015744 0ustar rootrooticnsÍICN#?}???}??icl4ͮޯ icl8VVVV+V+V+il32J      -(  Bb`C&*(  2ji5 ,?8" 7om5 -C4  *2FgsL.9+ ' " (OlaG8Fkq^6 $#5B.  Fvf6d|P", @XL0;GGJ7 fg:cxT,7A. #HZ^ZB!4QsKBgqc:  =EQRQEO<.QNA(5<5 *)996"+   +B* GIPݚPLM8;oMnLy骚iǣ~      -(  Bb`C&*(  2ji5 ,?8" 7om5 -C4  *2FgsL.9+ ' " (OlaG8Fkq^6 $#5B.  Fvf6d|P", @XL0;GGJ7 fg:cxT,7A. #HZ^ZB!4QsKBgqc:  =EQRQEO<.QNA(5<5 *)996"+   +B* GIPݚPLM8;oMnLy骚iǣ~      -(  Bb`C&*(  2ji5 ,?8" 7om5 -C4  *2FgsL.9+ ' " (OlaG8Fkq^6 $#5B.  Fvf6d|P", @XL0;GGJ7 fg:cxT,7A. #HZ^ZB!4QsKBgqc:  =EQRQEO<.QNA(5<5 *)996"+   +B* GIPݚPLM8;oMnLy骚iǣ~l8mk16 8K$C%Mמ'D#^ RYb=ݵ3w$14 >l-h:isms:Ӵ|:L !%/+AM-{ _G*z ws=wo4AJ]e'.CL ich#HoKkK}߫{uݯ_?_??߀????0??????ich4 ich8 VVVVVVV++++V++++VV+V+++VV+Vih32 Œ         .&  ;Yn`W+  %$  &`pulO  (+.)  >m~x^8 $.;@2$ El{^2 '/?P.%8`wsR!.@>,"  ,27OdlW8.;=( $+%"!$JdkaN4;6QaidaE "-0'  FfyvuiY&Hfz|s\>,)C#/?D8*  '6_xw\2WpzkM,+)",TZN?- (>EAAGD1 ZwsY;SpzjQ+!#"+CISS57ITRUXN>*E~m[!Eatxr]@ *  '-27<&&#BIZZ[]KB0:8n|{qX4 M[emcL$ '>CEUTSUKDGID95eUMB* ,=<4 A=[<$  ,%%==<>,%#   %%   Ktu_&  Y~: \ճ ɠ1 Ѩ= ~̦/ Oƕv[ܷC+؞mY)*䓩 VK&O         .&  ;Yn`W+  %$  &`pulO  (+.)  >m~x^8 $.;@2$ El{^2 '/?P.%8`wsR!.@>,"  ,27OdlW8.;=( $+%"!$JdkaN4;6QaidaE "-0'  FfyvuiY&Hfz|s\>,)C#/?D8*  '6_xw\2WpzkM,+)",TZN?- (>EAAGD1 ZwsY;SpzjQ+!#"+CISS57ITRUXN>*E~m[!Eatxr]@ *  '-27<&&#BIZZ[]KB0:8n|{qX4 M[emcL$ '>CEUTSUKDGID95eUMB* ,=<4 A=[<$  ,%%==<>,%#   %%   Ktu_&  Y~: \ճ ɠ1 Ѩ= ~̦/ Oƕv[ܷC+؞mY)*䓩 VK&O         .&  ;Yn`W+  %$  &`pulO  (+.)  >m~x^8 $.;@2$ El{^2 '/?P.%8`wsR!.@>,"  ,27OdlW8.;=( $+%"!$JdkaN4;6QaidaE "-0'  FfyvuiY&Hfz|s\>,)C#/?D8*  '6_xw\2WpzkM,+)",TZN?- (>EAAGD1 ZwsY;SpzjQ+!#"+CISS57ITRUXN>*E~m[!Eatxr]@ *  '-27<&&#BIZZ[]KB0:8n|{qX4 M[emcL$ '>CEUTSUKDGID95eUMB* ,=<4 A=[<$  ,%%==<>,%#   %%   Ktu_&  Y~: \ճ ɠ1 Ѩ= ~̦/ Oƕv[ܷC+؞mY)*䓩 VK&Oh8mk ÐE 6*{\w<#q%UUT<~~(D*K'9:W1%a0q< 9 2O7"" n|t`Q~7dics#H??ics4ics8VV++Vis32  $? UoF11  X~E-# . _rJlg4%D%.RC(u}Ehh5 .>5+.K66%~U [q73~  $? UoF11  X~E-# . _rJlg4%D%.RC(u}Ehh5 .>5+.K66%~U [q73~  $? UoF11  X~E-# . _rJlg4%D%.RC(u}Ehh5 .>5+.K66%~U [q73~s8mkb$"ny&)uf~,56Uv R Y7jK 99O+z9icm#8icm4hicm8it32F)                         (/)'#!$  #2COGC@<<9     %3CPYdWTQMIKB     0AJOU\sgd`\XVW6     HHNXgtysolhdhQ3 "&#!     3RVdorq}rolhciVC/  $%%&'(!   ?fehimt|vsmr\F6%  #"&&'('*+(#    &Mhafmwy}kQ=,' #+)(++-/-*)("    6Kgkt{xrvgZJ61"'(--.1244/-,&   8Ij~|{{~ytydTG=6$%$',3376::65(%%    $6Ojuqv{eUE;+"%"%(,5<:>A?@2&$#%   %;R\rux}{{j[I6$#%+25:EDGJ>-&$%" (?IVh}ytxn]UP.#$(//18DOSJ9,&&%/9ETgwxuz}|ytyfXMD #**),1:DTYE6*''"'KMHE4))$!:^xt|mjncXY=  !&&+8A=84+&"   $(-064),F_iitkgfUQ; /DEDEM=.# # %'045:82.-+%"  %/*08AKOQUUP>1&3elfd_P0%9BLTPSZ]WUOD%$$))+03.,)%%&# '.:ABHO[ll\UTP?6!1XXPI0"@EKZYY[g^YV][J3 $%'+*(%"!!## !&#)2?M[`gnhji^ZYRB;$9J6)&IP[ruxzqqpxmfbcYO>1FX]k{{wvt~nc\\SD0   "'+03280-(" ,5@O`rutw}wvv|olmkN? :QX_pstzpjcgRE@!# 8M"$$',/78@>820+" .->ITm|ww{|z~zjeT@+HVZgtpu|yonjUJE. " %1B`C  #)006FB4#"!!"",=GG=1(#  1BMlvtx{~~w}h\YL65CTrtqt}}y}ttlaC2&1 "#%..0&#''0D\_g`VOJE?:6/% %,9@@GOWOL?SSMGBC:1) @mtty{{uvo\UR9(?Ten{}{}~}zz{ldhaE30#'%%($$%&/HQPT^a[QKGB<8- '7?@CGIWRQ?XULKHCB=+ .hwy{~ysos\TT3">TZbn|{|zw}phbbPJ0 r!&$##!$#%0FFHKMNW_XNHD>! *ADCGKP[PQQRW\RPLIHB.  $+1>v{~~|pjocWH"?LR\jvz~ywyxidcYG@&q !##  ""$1>=?CDEFLUYSL3 1@EMQPU\SSTUVcXWUNDB3% #3612Q|z|ljlgG4/EKVggkqzt{mfa`MC4-  ##$0246::($)&#$)@CFILQ]^[\[\_e]RLIE?>**8;6<;78P~|zy|xyiSKB&?PMTYffddgrjggeRF2  ##%)C,,.13/!')*)'",DGIGKQ[WVWUVX]\PLJJF@)(;@?9@>65U}ume]\\SOQE6.!,EQLKLQSIEF>/%! !&-=F:BCBDKSZU&RTUW[ROKHEA5MSHFIG@>?816d^ZVTPNNEBC6(#! 1=CEJA=;7& ; !&CLYSSRQQSTXKEDCBBKieZJIF>43/%)TSNJE@=9026/" *)&&-&A   1I\CB;:@GQJJIHHIKQGA>>@H`{iWB83.'# -6.$ ! $:P5899>DMFDDFGLD@;5;7DSC2%  $6B/$).8CKGFEDEFFKE90(#)61+!  45/&-6B?>=;;=>C8/)!)-'# +  +*)&.7532113490( $ +    "00/-,,-/1$           $))**#     .MabbceaH,    *Ig|bI,  =[rp\< @^tsbA ;bvĴxe6 3^yρñ}^% Fu׀؀ͻw>Y܀ ŴS!lϾg!2|ów+?Ƿ{6>}ɸy7 6|˺v3 /yǹs.)oĶj) W³U;yο{B%b̽g. HʻT" *q܀ ƹ{?TŶf0 1|µO!`x<?˿c/"wʼMUɳx;/Ǥ`.lǀÎJ HѸt9 &ϧ\! dʎF ;o2 ~׫W \Ӎ;;k#wPV܉,6`w6h[[>&                         (/)'#!$  #2COGC@<<9     %3CPYdWTQMIKB     0AJOU\sgd`\XVW6     HHNXgtysolhdhQ3 "&#!     3RVdorq}rolhciVC/  $%%&'(!   ?fehimt|vsmr\F6%  #"&&'('*+(#    &Mhafmwy}kQ=,' #+)(++-/-*)("    6Kgkt{xrvgZJ61"'(--.1244/-,&   8Ij~|{{~ytydTG=6$%$',3376::65(%%    $6Ojuqv{eUE;+"%"%(,5<:>A?@2&$#%   %;R\rux}{{j[I6$#%+25:EDGJ>-&$%" (?IVh}ytxn]UP.#$(//18DOSJ9,&&%/9ETgwxuz}|ytyfXMD #**),1:DTYE6*''"'KMHE4))$!:^xt|mjncXY=  !&&+8A=84+&"   $(-064),F_iitkgfUQ; /DEDEM=.# # %'045:82.-+%"  %/*08AKOQUUP>1&3elfd_P0%9BLTPSZ]WUOD%$$))+03.,)%%&# '.:ABHO[ll\UTP?6!1XXPI0"@EKZYY[g^YV][J3 $%'+*(%"!!## !&#)2?M[`gnhji^ZYRB;$9J6)&IP[ruxzqqpxmfbcYO>1FX]k{{wvt~nc\\SD0   "'+03280-(" ,5@O`rutw}wvv|olmkN? :QX_pstzpjcgRE@!# 8M"$$',/78@>820+" .->ITm|ww{|z~zjeT@+HVZgtpu|yonjUJE. " %1B`C  #)006FB4#"!!"",=GG=1(#  1BMlvtx{~~w}h\YL65CTrtqt}}y}ttlaC2&1 "#%..0&#''0D\_g`VOJE?:6/% %,9@@GOWOL?SSMGBC:1) @mtty{{uvo\UR9(?Ten{}{}~}zz{ldhaE30#'%%($$%&/HQPT^a[QKGB<8- '7?@CGIWRQ?XULKHCB=+ .hwy{~ysos\TT3">TZbn|{|zw}phbbPJ0 r!&$##!$#%0FFHKMNW_XNHD>! *ADCGKP[PQQRW\RPLIHB.  $+1>v{~~|pjocWH"?LR\jvz~ywyxidcYG@&q !##  ""$1>=?CDEFLUYSL3 1@EMQPU\SSTUVcXWUNDB3% #3612Q|z|ljlgG4/EKVggkqzt{mfa`MC4-  ##$0246::($)&#$)@CFILQ]^[\[\_e]RLIE?>**8;6<;78P~|zy|xyiSKB&?PMTYffddgrjggeRF2  ##%)C,,.13/!')*)'",DGIGKQ[WVWUVX]\PLJJF@)(;@?9@>65U}ume]\\SOQE6.!,EQLKLQSIEF>/%! !&-=F:BCBDKSZU&RTUW[ROKHEA5MSHFIG@>?816d^ZVTPNNEBC6(#! 1=CEJA=;7& ; !&CLYSSRQQSTXKEDCBBKieZJIF>43/%)TSNJE@=9026/" *)&&-&A   1I\CB;:@GQJJIHHIKQGA>>@H`{iWB83.'# -6.$ ! $:P5899>DMFDDFGLD@;5;7DSC2%  $6B/$).8CKGFEDEFFKE90(#)61+!  45/&-6B?>=;;=>C8/)!)-'# +  +*)&.7532113490( $ +    "00/-,,-/1$           $))**#     .MabbceaH,    *Ig|bI,  =[rp\< @^tsbA ;bvĴxe6 3^yρñ}^% Fu׀؀ͻw>Y܀ ŴS!lϾg!2|ów+?Ƿ{6>}ɸy7 6|˺v3 /yǹs.)oĶj) W³U;yο{B%b̽g. HʻT" *q܀ ƹ{?TŶf0 1|µO!`x<?˿c/"wʼMUɳx;/Ǥ`.lǀÎJ HѸt9 &ϧ\! dʎF ;o2 ~׫W \Ӎ;;k#wPV܉,6`w6h[[>&                         (/)'#!$  #2COGC@<<9     %3CPYdWTQMIKB     0AJOU\sgd`\XVW6     HHNXgtysolhdhQ3 "&#!     3RVdorq}rolhciVC/  $%%&'(!   ?fehimt|vsmr\F6%  #"&&'('*+(#    &Mhafmwy}kQ=,' #+)(++-/-*)("    6Kgkt{xrvgZJ61"'(--.1244/-,&   8Ij~|{{~ytydTG=6$%$',3376::65(%%    $6Ojuqv{eUE;+"%"%(,5<:>A?@2&$#%   %;R\rux}{{j[I6$#%+25:EDGJ>-&$%" (?IVh}ytxn]UP.#$(//18DOSJ9,&&%/9ETgwxuz}|ytyfXMD #**),1:DTYE6*''"'KMHE4))$!:^xt|mjncXY=  !&&+8A=84+&"   $(-064),F_iitkgfUQ; /DEDEM=.# # %'045:82.-+%"  %/*08AKOQUUP>1&3elfd_P0%9BLTPSZ]WUOD%$$))+03.,)%%&# '.:ABHO[ll\UTP?6!1XXPI0"@EKZYY[g^YV][J3 $%'+*(%"!!## !&#)2?M[`gnhji^ZYRB;$9J6)&IP[ruxzqqpxmfbcYO>1FX]k{{wvt~nc\\SD0   "'+03280-(" ,5@O`rutw}wvv|olmkN? :QX_pstzpjcgRE@!# 8M"$$',/78@>820+" .->ITm|ww{|z~zjeT@+HVZgtpu|yonjUJE. " %1B`C  #)006FB4#"!!"",=GG=1(#  1BMlvtx{~~w}h\YL65CTrtqt}}y}ttlaC2&1 "#%..0&#''0D\_g`VOJE?:6/% %,9@@GOWOL?SSMGBC:1) @mtty{{uvo\UR9(?Ten{}{}~}zz{ldhaE30#'%%($$%&/HQPT^a[QKGB<8- '7?@CGIWRQ?XULKHCB=+ .hwy{~ysos\TT3">TZbn|{|zw}phbbPJ0 r!&$##!$#%0FFHKMNW_XNHD>! *ADCGKP[PQQRW\RPLIHB.  $+1>v{~~|pjocWH"?LR\jvz~ywyxidcYG@&q !##  ""$1>=?CDEFLUYSL3 1@EMQPU\SSTUVcXWUNDB3% #3612Q|z|ljlgG4/EKVggkqzt{mfa`MC4-  ##$0246::($)&#$)@CFILQ]^[\[\_e]RLIE?>**8;6<;78P~|zy|xyiSKB&?PMTYffddgrjggeRF2  ##%)C,,.13/!')*)'",DGIGKQ[WVWUVX]\PLJJF@)(;@?9@>65U}ume]\\SOQE6.!,EQLKLQSIEF>/%! !&-=F:BCBDKSZU&RTUW[ROKHEA5MSHFIG@>?816d^ZVTPNNEBC6(#! 1=CEJA=;7& ; !&CLYSSRQQSTXKEDCBBKieZJIF>43/%)TSNJE@=9026/" *)&&-&A   1I\CB;:@GQJJIHHIKQGA>>@H`{iWB83.'# -6.$ ! $:P5899>DMFDDFGLD@;5;7DSC2%  $6B/$).8CKGFEDEFFKE90(#)61+!  45/&-6B?>=;;=>C8/)!)-'# +  +*)&.7532113490( $ +    "00/-,,-/1$           $))**#     .MabbceaH,    *Ig|bI,  =[rp\< @^tsbA ;bvĴxe6 3^yρñ}^% Fu׀؀ͻw>Y܀ ŴS!lϾg!2|ów+?Ƿ{6>}ɸy7 6|˺v3 /yǹs.)oĶj) W³U;yο{B%b̽g. HʻT" *q܀ ƹ{?TŶf0 1|µO!`x<?˿c/"wʼMUɳx;/Ǥ`.lǀÎJ HѸt9 &ϧ\! dʎF ;o2 ~׫W \Ӎ;;k#wPV܉,6`w6h[[>&t8mk@ 3BYZC@1FW5֘JcɋE-O; 6=8@f P*FI*){ﳇV EΦ{E\Իw#s֮N0<< L'몚Y#ݹbпݢE$yźϵfʲ˹Ϭ>KqLA X*&RTT]F  @^%RUUI)1KT7|S kͻ~[$1{? Vɠ>p5x><^^֢M@ 49 Z ?"kP "Yb$2kuOOO7"""kuEB <"^n?G"X|$%BZaag322#apt8>aZUF<0',7HY `o*4DQ cr,6EU iw"o~ )7B cdkiki/kodilib/macosx/kodilib.pbproj/0000777000000000000000000000000010336064544016333 5ustar rootrootkiki/kodilib/macosx/kodilib.pbproj/CVS/0000777000000000000000000000000010336064533016764 5ustar rootrootkiki/kodilib/macosx/kodilib.pbproj/CVS/Entries0000666000000000000000000000006410313727025020315 0ustar rootroot/project.pbxproj/1.2/Fri Apr 11 13:42:27 2003// D kiki/kodilib/macosx/kodilib.pbproj/CVS/Entries.Extra0000666000000000000000000000003210313727025021372 0ustar rootroot/project.pbxproj////*/// kiki/kodilib/macosx/kodilib.pbproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727025022102 0ustar rootrootkiki/kodilib/macosx/kodilib.pbproj/CVS/Entries.Old0000666000000000000000000000000010313727025021020 0ustar rootrootkiki/kodilib/macosx/kodilib.pbproj/CVS/Repository0000666000000000000000000000004410313727025021061 0ustar rootrootkiki/kodilib/macosx/kodilib.pbproj kiki/kodilib/macosx/kodilib.pbproj/CVS/Root0000666000000000000000000000006410313727025017627 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/kodilib/macosx/kodilib.pbproj/project.pbxproj0000666000000000000000000014202007645543103021410 0ustar rootroot// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 38; objects = { 19C28FACFE9D520D11CA2CBB = { children = ( 29B97317FDCFA39411CA2CEA, F5E5BBDB02F795CC01107C09, ); isa = PBXGroup; name = Products; path = ""; refType = 4; }; //190 //191 //192 //193 //194 //290 //291 //292 //293 //294 29B97313FDCFA39411CA2CEA = { buildStyles = ( 4A9504CCFFE6A4B311CA0CBA, 4A9504CDFFE6A4B311CA0CBA, F506DB31034BB57701466274, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 29B97314FDCFA39411CA2CEA; projectDirPath = ""; targets = ( F5EF2F4C02E4EFDE01D1831A, ); }; 29B97314FDCFA39411CA2CEA = { children = ( 19C28FACFE9D520D11CA2CBB, 29B97323FDCFA39411CA2CEA, F52AF5DE0347E0BF011BD479, ); isa = PBXGroup; name = kodisein; path = ""; refType = 4; }; 29B97317FDCFA39411CA2CEA = { children = ( F5489F780350A8AC010108DE, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; }; 29B97323FDCFA39411CA2CEA = { children = ( F500BD7C02F7563C011E50B5, F51170B10316C93B01EF7466, ); isa = PBXGroup; name = Frameworks; path = ""; refType = 4; }; //290 //291 //292 //293 //294 //4A0 //4A1 //4A2 //4A3 //4A4 4A9504CCFFE6A4B311CA0CBA = { buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = YES; INSTALL_MODE_FLAG = "u+w,go-w,o+rX"; OPTIMIZATION_CFLAGS = "-O0"; }; isa = PBXBuildStyle; name = Development; }; 4A9504CDFFE6A4B311CA0CBA = { buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; DEPLOYMENT_LOCATION = YES; DEPLOYMENT_POSTPROCESSING = YES; DSTROOT = /; INSTALL_MODE_FLAG = "u+w,go-w,o+rX"; INSTALL_PATH = "$(HOME)/Library/Frameworks"; OPTIMIZATION_CFLAGS = "-O3"; }; isa = PBXBuildStyle; name = Deployment; }; //4A0 //4A1 //4A2 //4A3 //4A4 //C30 //C31 //C32 //C33 //C34 C321619D0444D78F00A8013F = { fileEncoding = 30; isa = PBXFileReference; path = KIncludeTools.h; refType = 4; }; C321619E0444D78F00A8013F = { fileRef = C321619D0444D78F00A8013F; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; //C30 //C31 //C32 //C33 //C34 //F50 //F51 //F52 //F53 //F54 F500BD7C02F7563C011E50B5 = { isa = PBXFrameworkReference; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; refType = 0; }; F50206FB02F7D552017A5804 = { fileRef = F500BD7C02F7563C011E50B5; isa = PBXBuildFile; settings = { }; }; F506DB31034BB57701466274 = { buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; DEPLOYMENT_LOCATION = NO; DEPLOYMENT_POSTPROCESSING = YES; DSTROOT = /; DYLIB_INSTALL_NAME_BASE = "@executable_path/../Frameworks"; INSTALL_MODE_FLAG = "ug+w,o-w,o+rX"; OPTIMIZATION_CFLAGS = "-O2"; SYMROOT = /tmp/kodilib; }; isa = PBXBuildStyle; name = "Bundle Framework"; }; F51170B10316C93B01EF7466 = { isa = PBXFrameworkReference; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; refType = 0; }; F51170CD0316C93B01EF7466 = { fileRef = F51170B10316C93B01EF7466; isa = PBXBuildFile; settings = { }; }; F52AF5DE0347E0BF011BD479 = { children = ( F52AF5DF0347E0BF011BD479, F52AF5F20347E0BF011BD479, F52AF6040347E0BF011BD479, F52AF62D0347E0C0011BD479, F52AF6610347E0C0011BD479, ); isa = PBXGroup; name = src; path = ../src; refType = 2; }; F52AF5DF0347E0BF011BD479 = { children = ( F5CD14BB034898B2011A0019, F52AF5E00347E0BF011BD479, F52AF5E20347E0BF011BD479, F52AF5E40347E0BF011BD479, F52AF5E60347E0BF011BD479, F52AF5E80347E0BF011BD479, F52AF5EA0347E0BF011BD479, F52AF5EC0347E0BF011BD479, F52AF5EE0347E0BF011BD479, F52AF5F00347E0BF011BD479, ); isa = PBXGroup; path = handler; refType = 4; }; F52AF5E00347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KEventHandler.cpp; refType = 4; }; F52AF5E10347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KEventHandler.h; refType = 4; }; F52AF5E20347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileHandler.cpp; refType = 4; }; F52AF5E30347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileHandler.h; refType = 4; }; F52AF5E40347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyActionHandler.cpp; refType = 4; }; F52AF5E50347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyActionHandler.h; refType = 4; }; F52AF5E60347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyHandler.cpp; refType = 4; }; F52AF5E70347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyHandler.h; refType = 4; }; F52AF5E80347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyRecorder.cpp; refType = 4; }; F52AF5E90347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyRecorder.h; refType = 4; }; F52AF5EA0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPickable.cpp; refType = 4; }; F52AF5EB0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPickable.h; refType = 4; }; F52AF5EC0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPickHandler.cpp; refType = 4; }; F52AF5ED0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPickHandler.h; refType = 4; }; F52AF5EE0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSelectable.cpp; refType = 4; }; F52AF5EF0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSelectable.h; refType = 4; }; F52AF5F00347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSelectionHandler.cpp; refType = 4; }; F52AF5F10347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSelectionHandler.h; refType = 4; }; F52AF5F20347E0BF011BD479 = { children = ( F5CD14C0034899C0011A0019, F52AF5F30347E0BF011BD479, F52AF5F50347E0BF011BD479, F52AF5F70347E0BF011BD479, F52AF5FA0347E0BF011BD479, F52AF5FC0347E0BF011BD479, F52AF5FE0347E0BF011BD479, F52AF6020347E0BF011BD479, ); isa = PBXGroup; path = tools; refType = 4; }; F52AF5F30347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KDisplayTools.cpp; refType = 4; }; F52AF5F40347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KDisplayTools.h; refType = 4; }; F52AF5F50347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTools.cpp; refType = 4; }; F52AF5F60347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTools.h; refType = 4; }; F52AF5F70347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KIntrospection.cpp; refType = 4; }; F52AF5F80347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KIntrospection.h; refType = 4; }; F52AF5F90347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeySymbols.h; refType = 4; }; F52AF5FA0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyTools.cpp; refType = 4; }; F52AF5FB0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeyTools.h; refType = 4; }; F52AF5FC0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KNotificationObject.cpp; refType = 4; }; F52AF5FD0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KNotificationObject.h; refType = 4; }; F52AF5FE0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KStringTools.cpp; refType = 4; }; F52AF5FF0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KStringTools.h; refType = 4; }; F52AF6010347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTools.h; refType = 4; }; F52AF6020347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KXMLTools.cpp; refType = 4; }; F52AF6030347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KXMLTools.h; refType = 4; }; F52AF6040347E0BF011BD479 = { children = ( F5CD14BF034899AC011A0019, F52AF6060347E0BF011BD479, F52AF6080347E0BF011BD479, F52AF60C0347E0BF011BD479, F52AF6120347E0BF011BD479, F52AF60E0347E0BF011BD479, F52AF6100347E0BF011BD479, F52AF60A0347E0BF011BD479, F52AF6140347E0BF011BD479, F52AF6160347E0BF011BD479, F52AF6180347E0BF011BD479, F52AF61A0347E0BF011BD479, ); isa = PBXGroup; path = types; refType = 4; }; F52AF6050347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KColor.h; refType = 4; }; F52AF6060347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKey.cpp; refType = 4; }; F52AF6070347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKey.h; refType = 4; }; F52AF6080347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KLight.cpp; refType = 4; }; F52AF6090347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KLight.h; refType = 4; }; F52AF60A0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KLightingProjection.cpp; refType = 4; }; F52AF60B0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KLightingProjection.h; refType = 4; }; F52AF60C0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMatrix.cpp; refType = 4; }; F52AF60D0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMatrix.h; refType = 4; }; F52AF60E0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KOrthographicProjection.cpp; refType = 4; }; F52AF60F0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KOrthographicProjection.h; refType = 4; }; F52AF6100347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPerspectiveProjection.cpp; refType = 4; }; F52AF6110347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPerspectiveProjection.h; refType = 4; }; F52AF6120347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KProjection.cpp; refType = 4; }; F52AF6130347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KProjection.h; refType = 4; }; F52AF6140347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KQuaternion.cpp; refType = 4; }; F52AF6150347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KQuaternion.h; refType = 4; }; F52AF6160347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSeparatedMatrix.cpp; refType = 4; }; F52AF6170347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSeparatedMatrix.h; refType = 4; }; F52AF6180347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTexture.cpp; refType = 4; }; F52AF6190347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTexture.h; refType = 4; }; F52AF61A0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTrash.cpp; refType = 4; }; F52AF61B0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTrash.h; refType = 4; }; F52AF61C0347E0BF011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KVector.h; refType = 4; }; F52AF62D0347E0C0011BD479 = { children = ( F5CD14BC03489946011A0019, F52AF62E0347E0C0011BD479, F52AF6300347E0C0011BD479, F52AF6330347E0C0011BD479, F52AF6350347E0C0011BD479, F52AF6370347E0C0011BD479, F52AF6390347E0C0011BD479, F52AF63B0347E0C0011BD479, F52AF63D0347E0C0011BD479, F52AF63F0347E0C0011BD479, F52AF6410347E0C0011BD479, F52AF6430347E0C0011BD479, F52AF6450347E0C0011BD479, F52AF6470347E0C0011BD479, F52AF6490347E0C0011BD479, F52AF64B0347E0C0011BD479, F52AF64D0347E0C0011BD479, F52AF64F0347E0C0011BD479, F52AF6510347E0C0011BD479, F52AF6530347E0C0011BD479, F52AF6550347E0C0011BD479, F52AF6570347E0C0011BD479, F52AF6590347E0C0011BD479, F52AF65B0347E0C0011BD479, F52AF65D0347E0C0011BD479, F52AF65F0347E0C0011BD479, ); isa = PBXGroup; path = widgets; refType = 4; }; F52AF62E0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KButton.cpp; refType = 4; }; F52AF62F0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KButton.h; refType = 4; }; F52AF6300347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KButtonBox.cpp; refType = 4; }; F52AF6310347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KButtonBox.h; refType = 4; }; F52AF6320347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KButtonSymbols.h; refType = 4; }; F52AF6330347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileNameField.cpp; refType = 4; }; F52AF6340347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileNameField.h; refType = 4; }; F52AF6350347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeDir.cpp; refType = 4; }; F52AF6360347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeDir.h; refType = 4; }; F52AF6370347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeDirCurrent.cpp; refType = 4; }; F52AF6380347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeDirCurrent.h; refType = 4; }; F52AF6390347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeDirUp.cpp; refType = 4; }; F52AF63A0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeDirUp.h; refType = 4; }; F52AF63B0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeFile.cpp; refType = 4; }; F52AF63C0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeFile.h; refType = 4; }; F52AF63D0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeNode.cpp; refType = 4; }; F52AF63E0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeNode.h; refType = 4; }; F52AF63F0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeWidget.cpp; refType = 4; }; F52AF6400347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeWidget.h; refType = 4; }; F52AF6410347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KIconButton.cpp; refType = 4; }; F52AF6420347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KIconButton.h; refType = 4; }; F52AF6430347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeySequenceField.cpp; refType = 4; }; F52AF6440347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KKeySequenceField.h; refType = 4; }; F52AF6450347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KLabel.cpp; refType = 4; }; F52AF6460347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KLabel.h; refType = 4; }; F52AF6470347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMenu.cpp; refType = 4; }; F52AF6480347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMenu.h; refType = 4; }; F52AF6490347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMenuItem.cpp; refType = 4; }; F52AF64A0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMenuItem.h; refType = 4; }; F52AF64B0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KNumberField.cpp; refType = 4; }; F52AF64C0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KNumberField.h; refType = 4; }; F52AF64D0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KProjectionWidget.cpp; refType = 4; }; F52AF64E0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KProjectionWidget.h; refType = 4; }; F52AF64F0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KScrollBar.cpp; refType = 4; }; F52AF6500347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KScrollBar.h; refType = 4; }; F52AF6510347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSliderButton.cpp; refType = 4; }; F52AF6520347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSliderButton.h; refType = 4; }; F52AF6530347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KStatusMenuItem.cpp; refType = 4; }; F52AF6540347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KStatusMenuItem.h; refType = 4; }; F52AF6550347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSubMenuItem.cpp; refType = 4; }; F52AF6560347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KSubMenuItem.h; refType = 4; }; F52AF6570347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTextField.cpp; refType = 4; }; F52AF6580347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTextField.h; refType = 4; }; F52AF6590347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTextWidget.cpp; refType = 4; }; F52AF65A0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KTextWidget.h; refType = 4; }; F52AF65B0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KToggleButton.cpp; refType = 4; }; F52AF65C0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KToggleButton.h; refType = 4; }; F52AF65D0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KWidget.cpp; refType = 4; }; F52AF65E0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KWidget.h; refType = 4; }; F52AF65F0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KWidgetArray.cpp; refType = 4; }; F52AF6600347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KWidgetArray.h; refType = 4; }; F52AF6610347E0C0011BD479 = { children = ( F5CD14BE03489997011A0019, F52AF6620347E0C0011BD479, F52AF6640347E0C0011BD479, F52AF6660347E0C0011BD479, F52AF6680347E0C0011BD479, F52AF66A0347E0C0011BD479, F52AF66C0347E0C0011BD479, ); isa = PBXGroup; path = windows; refType = 4; }; F52AF6620347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KConsole.cpp; refType = 4; }; F52AF6630347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KConsole.h; refType = 4; }; F52AF6640347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeWindow.cpp; refType = 4; }; F52AF6650347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KFileTreeWindow.h; refType = 4; }; F52AF6660347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMenuWindow.cpp; refType = 4; }; F52AF6670347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMenuWindow.h; refType = 4; }; F52AF6680347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMessagePanel.cpp; refType = 4; }; F52AF6690347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KMessagePanel.h; refType = 4; }; F52AF66A0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPopupMenu.cpp; refType = 4; }; F52AF66B0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KPopupMenu.h; refType = 4; }; F52AF66C0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KWindow.cpp; refType = 4; }; F52AF66D0347E0C0011BD479 = { fileEncoding = 30; isa = PBXFileReference; path = KWindow.h; refType = 4; }; F52AF66E0347E0C0011BD479 = { fileRef = F52AF5E00347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF66F0347E0C0011BD479 = { fileRef = F52AF5E10347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6700347E0C0011BD479 = { fileRef = F52AF5E20347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6710347E0C0011BD479 = { fileRef = F52AF5E30347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6720347E0C0011BD479 = { fileRef = F52AF5E40347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6730347E0C0011BD479 = { fileRef = F52AF5E50347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6740347E0C0011BD479 = { fileRef = F52AF5E60347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6750347E0C0011BD479 = { fileRef = F52AF5E70347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6760347E0C0011BD479 = { fileRef = F52AF5E80347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6770347E0C0011BD479 = { fileRef = F52AF5E90347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6780347E0C0011BD479 = { fileRef = F52AF5EA0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6790347E0C0011BD479 = { fileRef = F52AF5EB0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF67A0347E0C0011BD479 = { fileRef = F52AF5EC0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF67B0347E0C0011BD479 = { fileRef = F52AF5ED0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF67C0347E0C0011BD479 = { fileRef = F52AF5EE0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF67D0347E0C0011BD479 = { fileRef = F52AF5EF0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF67E0347E0C0011BD479 = { fileRef = F52AF5F00347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF67F0347E0C0011BD479 = { fileRef = F52AF5F10347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6800347E0C0011BD479 = { fileRef = F52AF5F30347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6810347E0C0011BD479 = { fileRef = F52AF5F40347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6820347E0C0011BD479 = { fileRef = F52AF5F50347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6830347E0C0011BD479 = { fileRef = F52AF5F60347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6840347E0C0011BD479 = { fileRef = F52AF5F70347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6850347E0C0011BD479 = { fileRef = F52AF5F80347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6860347E0C0011BD479 = { fileRef = F52AF5F90347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6870347E0C0011BD479 = { fileRef = F52AF5FA0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6880347E0C0011BD479 = { fileRef = F52AF5FB0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6890347E0C0011BD479 = { fileRef = F52AF5FC0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF68A0347E0C0011BD479 = { fileRef = F52AF5FD0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF68B0347E0C0011BD479 = { fileRef = F52AF5FE0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF68C0347E0C0011BD479 = { fileRef = F52AF5FF0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF68E0347E0C0011BD479 = { fileRef = F52AF6010347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF68F0347E0C0011BD479 = { fileRef = F52AF6020347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6900347E0C0011BD479 = { fileRef = F52AF6030347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6910347E0C0011BD479 = { fileRef = F52AF6050347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6920347E0C0011BD479 = { fileRef = F52AF6060347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6930347E0C0011BD479 = { fileRef = F52AF6070347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6940347E0C0011BD479 = { fileRef = F52AF6080347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6950347E0C0011BD479 = { fileRef = F52AF6090347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6960347E0C0011BD479 = { fileRef = F52AF60A0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6970347E0C0011BD479 = { fileRef = F52AF60B0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6980347E0C0011BD479 = { fileRef = F52AF60C0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6990347E0C0011BD479 = { fileRef = F52AF60D0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF69A0347E0C0011BD479 = { fileRef = F52AF60E0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF69B0347E0C0011BD479 = { fileRef = F52AF60F0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF69C0347E0C0011BD479 = { fileRef = F52AF6100347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF69D0347E0C0011BD479 = { fileRef = F52AF6110347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF69E0347E0C0011BD479 = { fileRef = F52AF6120347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF69F0347E0C0011BD479 = { fileRef = F52AF6130347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6A00347E0C0011BD479 = { fileRef = F52AF6140347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6A10347E0C0011BD479 = { fileRef = F52AF6150347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6A20347E0C0011BD479 = { fileRef = F52AF6160347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6A30347E0C0011BD479 = { fileRef = F52AF6170347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6A40347E0C0011BD479 = { fileRef = F52AF6180347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6A50347E0C0011BD479 = { fileRef = F52AF6190347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6A60347E0C0011BD479 = { fileRef = F52AF61A0347E0BF011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6A70347E0C0011BD479 = { fileRef = F52AF61B0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6A80347E0C0011BD479 = { fileRef = F52AF61C0347E0BF011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6B80347E0C0011BD479 = { fileRef = F52AF62E0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6B90347E0C0011BD479 = { fileRef = F52AF62F0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6BA0347E0C0011BD479 = { fileRef = F52AF6300347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6BB0347E0C0011BD479 = { fileRef = F52AF6310347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6BC0347E0C0011BD479 = { fileRef = F52AF6320347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6BD0347E0C0011BD479 = { fileRef = F52AF6330347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6BE0347E0C0011BD479 = { fileRef = F52AF6340347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6BF0347E0C0011BD479 = { fileRef = F52AF6350347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6C00347E0C0011BD479 = { fileRef = F52AF6360347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6C10347E0C0011BD479 = { fileRef = F52AF6370347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6C20347E0C0011BD479 = { fileRef = F52AF6380347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6C30347E0C0011BD479 = { fileRef = F52AF6390347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6C40347E0C0011BD479 = { fileRef = F52AF63A0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6C50347E0C0011BD479 = { fileRef = F52AF63B0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6C60347E0C0011BD479 = { fileRef = F52AF63C0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6C70347E0C0011BD479 = { fileRef = F52AF63D0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6C80347E0C0011BD479 = { fileRef = F52AF63E0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6C90347E0C0011BD479 = { fileRef = F52AF63F0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6CA0347E0C0011BD479 = { fileRef = F52AF6400347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6CB0347E0C0011BD479 = { fileRef = F52AF6410347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6CC0347E0C0011BD479 = { fileRef = F52AF6420347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6CD0347E0C0011BD479 = { fileRef = F52AF6430347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6CE0347E0C0011BD479 = { fileRef = F52AF6440347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6CF0347E0C0011BD479 = { fileRef = F52AF6450347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6D00347E0C0011BD479 = { fileRef = F52AF6460347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6D10347E0C0011BD479 = { fileRef = F52AF6470347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6D20347E0C0011BD479 = { fileRef = F52AF6480347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6D30347E0C0011BD479 = { fileRef = F52AF6490347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6D40347E0C0011BD479 = { fileRef = F52AF64A0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6D50347E0C0011BD479 = { fileRef = F52AF64B0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6D60347E0C0011BD479 = { fileRef = F52AF64C0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6D70347E0C0011BD479 = { fileRef = F52AF64D0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6D80347E0C0011BD479 = { fileRef = F52AF64E0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6D90347E0C0011BD479 = { fileRef = F52AF64F0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6DA0347E0C0011BD479 = { fileRef = F52AF6500347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6DB0347E0C0011BD479 = { fileRef = F52AF6510347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6DC0347E0C0011BD479 = { fileRef = F52AF6520347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6DD0347E0C0011BD479 = { fileRef = F52AF6530347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6DE0347E0C0011BD479 = { fileRef = F52AF6540347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6DF0347E0C0011BD479 = { fileRef = F52AF6550347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6E00347E0C0011BD479 = { fileRef = F52AF6560347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6E10347E0C0011BD479 = { fileRef = F52AF6570347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6E20347E0C0011BD479 = { fileRef = F52AF6580347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6E30347E0C0011BD479 = { fileRef = F52AF6590347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6E40347E0C0011BD479 = { fileRef = F52AF65A0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6E50347E0C0011BD479 = { fileRef = F52AF65B0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6E60347E0C0011BD479 = { fileRef = F52AF65C0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6E70347E0C0011BD479 = { fileRef = F52AF65D0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6E80347E0C0011BD479 = { fileRef = F52AF65E0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6E90347E0C0011BD479 = { fileRef = F52AF65F0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6EA0347E0C0011BD479 = { fileRef = F52AF6600347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6EB0347E0C0011BD479 = { fileRef = F52AF6620347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6EC0347E0C0011BD479 = { fileRef = F52AF6630347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6ED0347E0C0011BD479 = { fileRef = F52AF6640347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6EE0347E0C0011BD479 = { fileRef = F52AF6650347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6EF0347E0C0011BD479 = { fileRef = F52AF6660347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6F00347E0C0011BD479 = { fileRef = F52AF6670347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6F10347E0C0011BD479 = { fileRef = F52AF6680347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6F20347E0C0011BD479 = { fileRef = F52AF6690347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6F30347E0C0011BD479 = { fileRef = F52AF66A0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6F40347E0C0011BD479 = { fileRef = F52AF66B0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F52AF6F50347E0C0011BD479 = { fileRef = F52AF66C0347E0C0011BD479; isa = PBXBuildFile; settings = { }; }; F52AF6F60347E0C0011BD479 = { fileRef = F52AF66D0347E0C0011BD479; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F5489F780350A8AC010108DE = { isa = PBXFileReference; path = kodilib.icns; refType = 4; }; F5CD14BB034898B2011A0019 = { children = ( F52AF5E10347E0BF011BD479, F52AF5E30347E0BF011BD479, F52AF5E50347E0BF011BD479, F52AF5E70347E0BF011BD479, F52AF5E90347E0BF011BD479, F52AF5EB0347E0BF011BD479, F52AF5ED0347E0BF011BD479, F52AF5EF0347E0BF011BD479, F52AF5F10347E0BF011BD479, ); isa = PBXGroup; name = headers; refType = 4; }; F5CD14BC03489946011A0019 = { children = ( F52AF62F0347E0C0011BD479, F52AF6310347E0C0011BD479, F52AF6320347E0C0011BD479, F52AF6340347E0C0011BD479, F52AF6360347E0C0011BD479, F52AF6380347E0C0011BD479, F52AF63A0347E0C0011BD479, F52AF63C0347E0C0011BD479, F52AF63E0347E0C0011BD479, F52AF6400347E0C0011BD479, F52AF6420347E0C0011BD479, F52AF6440347E0C0011BD479, F52AF6460347E0C0011BD479, F52AF6480347E0C0011BD479, F52AF64A0347E0C0011BD479, F52AF64C0347E0C0011BD479, F52AF64E0347E0C0011BD479, F52AF6500347E0C0011BD479, F52AF6520347E0C0011BD479, F52AF6540347E0C0011BD479, F52AF6560347E0C0011BD479, F52AF6580347E0C0011BD479, F52AF65A0347E0C0011BD479, F52AF65C0347E0C0011BD479, F52AF65E0347E0C0011BD479, F52AF6600347E0C0011BD479, ); isa = PBXGroup; name = headers; refType = 4; }; F5CD14BE03489997011A0019 = { children = ( F52AF6630347E0C0011BD479, F52AF6650347E0C0011BD479, F52AF6670347E0C0011BD479, F52AF6690347E0C0011BD479, F52AF66B0347E0C0011BD479, F52AF66D0347E0C0011BD479, ); isa = PBXGroup; name = headers; refType = 4; }; F5CD14BF034899AC011A0019 = { children = ( F52AF6050347E0BF011BD479, F52AF6070347E0BF011BD479, F52AF6090347E0BF011BD479, F52AF60B0347E0BF011BD479, F52AF60D0347E0BF011BD479, F52AF60F0347E0BF011BD479, F52AF6110347E0BF011BD479, F52AF6130347E0BF011BD479, F52AF6150347E0BF011BD479, F52AF6170347E0BF011BD479, F52AF6190347E0BF011BD479, F52AF61B0347E0BF011BD479, F52AF61C0347E0BF011BD479, ); isa = PBXGroup; name = headers; refType = 4; }; F5CD14C0034899C0011A0019 = { children = ( F52AF5F40347E0BF011BD479, F52AF5F60347E0BF011BD479, F52AF5F80347E0BF011BD479, C321619D0444D78F00A8013F, F52AF5F90347E0BF011BD479, F52AF5FB0347E0BF011BD479, F52AF5FD0347E0BF011BD479, F52AF5FF0347E0BF011BD479, F52AF6010347E0BF011BD479, F52AF6030347E0BF011BD479, ); isa = PBXGroup; name = headers; refType = 4; }; F5E5BBDB02F795CC01107C09 = { isa = PBXFrameworkReference; path = kodilib.framework; refType = 3; }; F5EF2F4702E4EFDE01D1831A = { buildActionMask = 2147483647; files = ( F52AF66F0347E0C0011BD479, F52AF6710347E0C0011BD479, F52AF6730347E0C0011BD479, F52AF6750347E0C0011BD479, F52AF6770347E0C0011BD479, F52AF6790347E0C0011BD479, F52AF67B0347E0C0011BD479, F52AF67D0347E0C0011BD479, F52AF67F0347E0C0011BD479, F52AF6810347E0C0011BD479, F52AF6830347E0C0011BD479, F52AF6850347E0C0011BD479, F52AF6860347E0C0011BD479, F52AF6880347E0C0011BD479, F52AF68A0347E0C0011BD479, F52AF68C0347E0C0011BD479, F52AF68E0347E0C0011BD479, F52AF6900347E0C0011BD479, F52AF6910347E0C0011BD479, F52AF6930347E0C0011BD479, F52AF6950347E0C0011BD479, F52AF6970347E0C0011BD479, F52AF6990347E0C0011BD479, F52AF69B0347E0C0011BD479, F52AF69D0347E0C0011BD479, F52AF69F0347E0C0011BD479, F52AF6A10347E0C0011BD479, F52AF6A30347E0C0011BD479, F52AF6A50347E0C0011BD479, F52AF6A70347E0C0011BD479, F52AF6A80347E0C0011BD479, F52AF6B90347E0C0011BD479, F52AF6BB0347E0C0011BD479, F52AF6BC0347E0C0011BD479, F52AF6BE0347E0C0011BD479, F52AF6C00347E0C0011BD479, F52AF6C20347E0C0011BD479, F52AF6C40347E0C0011BD479, F52AF6C60347E0C0011BD479, F52AF6C80347E0C0011BD479, F52AF6CA0347E0C0011BD479, F52AF6CC0347E0C0011BD479, F52AF6CE0347E0C0011BD479, F52AF6D00347E0C0011BD479, F52AF6D20347E0C0011BD479, F52AF6D40347E0C0011BD479, F52AF6D60347E0C0011BD479, F52AF6D80347E0C0011BD479, F52AF6DA0347E0C0011BD479, F52AF6DC0347E0C0011BD479, F52AF6DE0347E0C0011BD479, F52AF6E00347E0C0011BD479, F52AF6E20347E0C0011BD479, F52AF6E40347E0C0011BD479, F52AF6E60347E0C0011BD479, F52AF6E80347E0C0011BD479, F52AF6EA0347E0C0011BD479, F52AF6F60347E0C0011BD479, F52AF6EC0347E0C0011BD479, F52AF6EE0347E0C0011BD479, F52AF6F00347E0C0011BD479, F52AF6F20347E0C0011BD479, F52AF6F40347E0C0011BD479, C321619E0444D78F00A8013F, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F5EF2F4902E4EFDE01D1831A = { buildActionMask = 2147483647; files = ( F52AF66E0347E0C0011BD479, F52AF6700347E0C0011BD479, F52AF6720347E0C0011BD479, F52AF6740347E0C0011BD479, F52AF6760347E0C0011BD479, F52AF6780347E0C0011BD479, F52AF67A0347E0C0011BD479, F52AF67C0347E0C0011BD479, F52AF67E0347E0C0011BD479, F52AF6800347E0C0011BD479, F52AF6820347E0C0011BD479, F52AF6840347E0C0011BD479, F52AF6870347E0C0011BD479, F52AF6890347E0C0011BD479, F52AF68B0347E0C0011BD479, F52AF68F0347E0C0011BD479, F52AF6920347E0C0011BD479, F52AF6940347E0C0011BD479, F52AF6960347E0C0011BD479, F52AF6980347E0C0011BD479, F52AF69A0347E0C0011BD479, F52AF69C0347E0C0011BD479, F52AF69E0347E0C0011BD479, F52AF6A00347E0C0011BD479, F52AF6A20347E0C0011BD479, F52AF6A40347E0C0011BD479, F52AF6A60347E0C0011BD479, F52AF6B80347E0C0011BD479, F52AF6BA0347E0C0011BD479, F52AF6BD0347E0C0011BD479, F52AF6BF0347E0C0011BD479, F52AF6C10347E0C0011BD479, F52AF6C30347E0C0011BD479, F52AF6C50347E0C0011BD479, F52AF6C70347E0C0011BD479, F52AF6C90347E0C0011BD479, F52AF6CB0347E0C0011BD479, F52AF6CD0347E0C0011BD479, F52AF6CF0347E0C0011BD479, F52AF6D10347E0C0011BD479, F52AF6D30347E0C0011BD479, F52AF6D50347E0C0011BD479, F52AF6D70347E0C0011BD479, F52AF6D90347E0C0011BD479, F52AF6DB0347E0C0011BD479, F52AF6DD0347E0C0011BD479, F52AF6DF0347E0C0011BD479, F52AF6E10347E0C0011BD479, F52AF6E30347E0C0011BD479, F52AF6E50347E0C0011BD479, F52AF6E70347E0C0011BD479, F52AF6E90347E0C0011BD479, F52AF6F50347E0C0011BD479, F52AF6EB0347E0C0011BD479, F52AF6ED0347E0C0011BD479, F52AF6EF0347E0C0011BD479, F52AF6F10347E0C0011BD479, F52AF6F30347E0C0011BD479, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F5EF2F4A02E4EFDE01D1831A = { buildActionMask = 2147483647; files = ( F50206FB02F7D552017A5804, F51170CD0316C93B01EF7466, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F5EF2F4C02E4EFDE01D1831A = { buildPhases = ( F5EF2F4702E4EFDE01D1831A, F5EF2F4902E4EFDE01D1831A, F5EF2F4A02E4EFDE01D1831A, F5FD6CF603571A1501C0C456, ); buildSettings = { CURRENT_PROJECT_VERSION = 1.06; DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 1.0.6; FRAMEWORK_SEARCH_PATHS = "\"$(USER_LIBRARY_DIR)/Frameworks\""; FRAMEWORK_VERSION = A; HEADER_SEARCH_PATHS = "\"$(USER_LIBRARY_DIR)/Frameworks/SDL.framework/Versions/A/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL.framework/Versions/A/Headers\" \"$(USER_LIBRARY_DIR)/Frameworks/SDL_image.framework/Versions/A/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL_image.framework/Versions/A/Headers\""; INSTALL_PATH = "@executable_path/../Frameworks"; OPTIMIZATION_CFLAGS = "-O2"; OTHER_LDFLAGS = "-framework SDL -framework SDL_image"; PREBINDING = NO; PRODUCT_NAME = kodilib; VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = framework; }; dependencies = ( ); isa = PBXFrameworkTarget; name = kodilib; productInstallPath = "@executable_path/../Frameworks"; productName = kodilib; productReference = F5E5BBDB02F795CC01107C09; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable kodilib.framework CFBundleGetInfoString kodilib CFBundleIconFile kodilib.icns CFBundleIdentifier com.mulle-kybernetik.kodilib CFBundleInfoDictionaryVersion 6.0 CFBundleName kodilib CFBundlePackageType FMWK CFBundleShortVersionString 1.0.6 CFBundleSignature KODI CFBundleVersion 1.0.6 "; }; F5FD6CF603571A1501C0C456 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; neededFileNames = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "touch ${DERIVED_SOURCES_DIR}/${TARGET_NAME}_vers.c"; }; }; rootObject = 29B97313FDCFA39411CA2CEA; } kiki/kodilib/src/0000777000000000000000000000000010336064533012716 5ustar rootrootkiki/kodilib/src/handler/0000777000000000000000000000000010336075403014331 5ustar rootrootkiki/kodilib/src/handler/KEventHandler.cpp0000666000000000000000000005534110334733026017537 0ustar rootroot/* * KEventHandler.cpp * kodisein */ #include "KEventHandler.h" #include "KConsole.h" #include "KPickHandler.h" #include "KOrthographicProjection.h" #include "KPerspectiveProjection.h" #include "KStringTools.h" #include "KKey.h" #include "KTools.h" #include "KKeyTools.h" #include #include KDL_CLASS_INTROSPECTION_1 (KEventHandler, KObject) // -------------------------------------------------------------------------------------------------------- unsigned int KEventHandler::frame_time; unsigned int KEventHandler::last_time; std::deque KEventHandler::fps; bool KEventHandler::flags[KDL_DISPLAY_MODE_END]; int KEventHandler::mode; int KEventHandler::mouse_mode; std::string KEventHandler::copy_string; KPickHandler * KEventHandler::release_handler; KPickHandler * KEventHandler::projection_handler; KPickHandlerList KEventHandler::pick_handlers; KKeyHandlerList KEventHandler::key_handlers; KKeyActionHandler KEventHandler::menu_key_handler; KKeyHandler * KEventHandler::focus_key_handler; KNotificationObject KEventHandler::notification_center; // -------------------------------------------------------------------------------------------------------- KEventHandler::KEventHandler () { mode = 0; mouse_mode = KDL_MOUSE_MODE_ROTATE; release_handler = NULL; focus_key_handler = NULL; projection_handler = NULL; flags[KDL_DISPLAY_MODE_WIREFRAME] = false; flags[KDL_DISPLAY_MODE_FREE_ROTATION] = false; flags[KDL_DISPLAY_MODE_SHOW_FPS] = false; flags[KDL_DISPLAY_MODE_FAST] = false; addKeyHandler (&KEventHandler::menu_key_handler); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::quit () { SDL_SetGamma (1, 1, 1); SDL_Event event; event.type = SDL_QUIT; SDL_PushEvent (&event); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::displayPickHandlers () { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (KPickHandlerIter iter = pick_handlers.begin(); iter != pick_handlers.end(); iter++) { (*iter)->display(mode); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::display () { displayPickHandlers(); if (flags[KDL_DISPLAY_MODE_SHOW_FPS]) { KOrthographicProjection projection; projection.initProjection(); glDisable (GL_LIGHTING); glColor4f (1.0, 1.0, 1.0, 1.0); KSize screenSize = getScreenSize(); float fps_sum = 0.0; for (int i = 0; i < (int)fps.size(); i++) { fps_sum += fps[i]; } std::string timeString = kStringPrintf ("fps %1.0f", fps_sum/fps.size()); kDisplayString (timeString, KPosition (screenSize.w - kStringWidth (timeString, false) - 20, -screenSize.h+5), false); glEnable (GL_LIGHTING); } //KConsole::checkGLError(); glFinish(); SDL_GL_SwapBuffers(); } // -------------------------------------------------------------------------------------------------------- KPickHandler * KEventHandler::getPickHandlerForProjection ( const KProjection * p ) const { std::vector::const_iterator iter = pick_handlers.begin(); while (iter != pick_handlers.end()) { if ((*iter)->getProjection() == p) return (*iter); iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- void KEventHandler::resetLighting () { float white[4] = {1.0, 1.0, 1.0, 1.0}; float gray[4] = {0.5, 0.5, 0.5, 0.5}; float none[4] = {0.0, 0.0, 0.0, 0.0}; glLightfv (GL_LIGHT0, GL_AMBIENT, none); glLightfv (GL_LIGHT0, GL_DIFFUSE, white); glLightfv (GL_LIGHT0, GL_SPECULAR, white); glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 180.0); glLightf (GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0); glLightf (GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0); glLightf (GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.0); glEnable (GL_LIGHT0); glLightModelfv (GL_LIGHT_MODEL_AMBIENT, none); glLightModeli (GL_LIGHT_MODEL_LOCAL_VIEWER, 1); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable (GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, none); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, none); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, gray); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 60.0); GLint maxLights; glGetIntegerv(GL_MAX_LIGHTS, &maxLights); for (GLenum l = GL_LIGHT1; l < (GL_LIGHT0+(GLuint)maxLights); l++) { glDisable(l); } glEnable(GL_LIGHTING); glClearColor(0.0, 0.0, 0.0, 0.0); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::setFastDisplay ( bool b ) { if (b != flags[KDL_DISPLAY_MODE_FAST]) { flags[KDL_DISPLAY_MODE_FAST] = b; if (b) { glDisable(GL_BLEND); glShadeModel(GL_FLAT); } else { glEnable(GL_BLEND); glShadeModel(GL_SMOOTH); } } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::resetProjection () { if (projection_handler) { projection_handler->setProjection(projection_handler->getResetProjection()); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::setResetProjection () { if (projection_handler) { projection_handler->setResetProjection(); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::focusOnSelection () { if (projection_handler) { projection_handler->focusOnPickedPickable(); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::focusAndZoomOnSelection () { if (projection_handler) { projection_handler->focusOnPickedPickable(true); } } // -------------------------------------------------------------------------------------------------------- KSize KEventHandler::getScreenSize () { SDL_Surface * screen = SDL_GetVideoSurface(); if (screen) return KSize (screen->w, screen->h); return KSize(); } // -------------------------------------------------------------------------------------------------------- bool KEventHandler::setScreenSize ( int width, int height, bool fullscreen ) { int flags = SDL_OPENGL; // | SDL_ANYFORMAT; if (fullscreen) { flags |= SDL_FULLSCREEN; } else { flags |= SDL_RESIZABLE; } if (SDL_VideoModeOK (width, height, 32, flags) == 0) // video mode not ok { if (fullscreen) { switch (width) { case 1600: KConsole::printf ("couldn't set video mode %dx%d:\ntrying to fallback to 1280x1024 mode", width, height); return setScreenSize (1280, 1024, true); case 1280: KConsole::printf ("couldn't set video mode %dx%d:\ntrying to fallback to 1024x768 mode", width, height); return setScreenSize (1024, 768, true); case 1024: KConsole::printf ("couldn't set video mode %dx%d:\ntrying to fallback to 800x600 mode", width, height); return setScreenSize (800, 600, true); default: break; } // fallback to window mode KConsole::printf ("couldn't set video mode %dx%d (%s) test failed", width, height, fullscreen ? "fullscreen" : "window"); KConsole::printf ("trying to fallback to window mode"); return setScreenSize (width, height, false); } else { KConsole::printError( kStringPrintf("couldn't set video mode %dx%d (window test failed)", width, height)); return false; } } if (SDL_SetVideoMode (width, height, 32, flags) == NULL) // paranoid { if (fullscreen) { switch (width) { case 1600: KConsole::printf ("couldn't init video mode %dx%d:\ntrying to fallback to 1280x1024 mode", width, height); return setScreenSize (1280, 1024, true); case 1280: KConsole::printf ("couldn't init video mode %dx%d:\ntrying to fallback to 1024x768 mode", width, height); return setScreenSize (1024, 768, true); case 1024: KConsole::printf ("couldn't init video mode %dx%d:\ntrying to fallback to 800x600 mode", width, height); return setScreenSize (800, 600, true); default: break; } // fallback to window mode KConsole::printf ("couldn't change video mode %dx%d (fullscreen setting failed)", width, height); KConsole::printf ("trying to fallback to window mode"); return setScreenSize (width, height, false); } else { KConsole::printError(kStringPrintf("couldn't change video mode %dx%d (%s):\n%s\n", width, height, fullscreen ? "fullscreen" : "window", SDL_GetError()), true); return false; } } // notify interested receivers that the resolution changed notification_center.notifyReceiversType(KDL_NOTIFICATION_TYPE_VIDEO_MODE_CHANGED); return true; } // -------------------------------------------------------------------------------------------------------- bool KEventHandler::getFullscreen () { return (SDL_GetVideoSurface()->flags & SDL_FULLSCREEN); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::setFullscreen ( bool fullscreen ) { // toggle between fullscreen or window mode if (!fullscreen) { // switch to normal mode int width, height; // get available hardware modes SDL_Rect **modes = SDL_ListModes (NULL, SDL_OPENGL); // Check if there are any modes available if (modes == (SDL_Rect **)0) { KConsole::printError("sorry, no window video modes available!", true); return; } // check if resolution is restricted if (modes != (SDL_Rect **)-1) { // all resolutions available width = 1024; height = 768; } else { width = modes[0]->w; height = modes[0]->h; } setScreenSize(width, height, false); } else { int width, height; // get available fullscreen/hardware modes SDL_Rect **modes = SDL_ListModes(NULL, SDL_OPENGL | SDL_HWSURFACE | SDL_FULLSCREEN); // Check is there are any modes available if (modes == (SDL_Rect **)0) { KConsole::printError("sorry, no fullscreen mode available!", true); return; } // check if resolution is restricted if (modes != (SDL_Rect **)-1) { // all resolutions available width = 1024; height = 768; } else { width = modes[0]->w; height = modes[0]->h; } setScreenSize(width, height, true); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::toggleWireframeMode () { flags[KDL_DISPLAY_MODE_WIREFRAME] = !flags[KDL_DISPLAY_MODE_WIREFRAME]; } // -------------------------------------------------------------------------------------------------------- void KEventHandler::toggleFreeRotation () { flags[KDL_DISPLAY_MODE_FREE_ROTATION] = !flags[KDL_DISPLAY_MODE_FREE_ROTATION]; } // -------------------------------------------------------------------------------------------------------- KPosition KEventHandler::getMousePos () { KPosition mousePos; SDL_GetMouseState(&mousePos.x, &mousePos.y); // we prefer mouse y from 0=screen.bottom to height=screen.top mousePos.y = SDL_GetVideoSurface()->h - mousePos.y; return mousePos; } // -------------------------------------------------------------------------------------------------------- void KEventHandler::setMouseMode ( int m ) { if (mouse_mode != m) { mouse_mode = m; notification_center.notifyReceiversType(KDL_NOTIFICATION_TYPE_MOUSE_MODE_CHANGED); } } // -------------------------------------------------------------------------------------------------------- KPosition KEventHandler::getMouseDelta () { KPosition mouseDelta; SDL_GetRelativeMouseState(&mouseDelta.x, &mouseDelta.y); // we prefer mouse movement up to be positive mouseDelta.y = -mouseDelta.y; return mouseDelta; } // -------------------------------------------------------------------------------------------------------- int KEventHandler::getMouseState () { return SDL_GetMouseState(NULL, NULL); } // -------------------------------------------------------------------------------------------------------- bool depth_comp ( KPickHandler * a, KPickHandler * b ) { return *a < *b; } // -------------------------------------------------------------------------------------------------------- void KEventHandler::addPickHandler ( KPickHandler * pickhandler ) { if (pickhandler == NULL) return; std::vector::iterator result = std::find(pick_handlers.begin(), pick_handlers.end(), pickhandler); if (result == pick_handlers.end()) { pick_handlers.push_back(pickhandler); std::sort(pick_handlers.begin(), pick_handlers.end(), depth_comp); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::removePickHandler ( KPickHandler * pickhandler ) { if (pickhandler == NULL) return; std::vector::iterator result = std::find(pick_handlers.begin(), pick_handlers.end(), pickhandler); if (result != pick_handlers.end()) { if (*result == projection_handler) projection_handler = NULL; if (*result == release_handler) release_handler = NULL; pick_handlers.erase(result); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::addKeyHandler ( KKeyHandler * keyhandler ) { if (keyhandler == NULL) return; KKeyHandlerIter result = std::find (key_handlers.begin(), key_handlers.end(), keyhandler); if (result == key_handlers.end()) { key_handlers.push_back (keyhandler); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::removeKeyHandler ( KKeyHandler * keyhandler ) { if (keyhandler == NULL) return; KKeyHandlerIter result = std::find (key_handlers.begin(), key_handlers.end(), keyhandler); if (result != key_handlers.end()) { key_handlers.erase (result); } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::setFocusKeyHandler ( KKeyHandler * keyhandler ) { focus_key_handler = keyhandler; } // -------------------------------------------------------------------------------------------------------- void KEventHandler::removeFocusKeyHandler ( KKeyHandler * keyhandler ) { if (focus_key_handler == keyhandler) { focus_key_handler = NULL; } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::removeProjectionHandler ( KPickHandler * ph ) { projection_handler = NULL; notification_center.notifyReceiversType(KDL_NOTIFICATION_TYPE_PROJECTION_HANDLER_CHANGED); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::setProjectionHandler ( KPickHandler * ph ) { projection_handler = ph; notification_center.notifyReceiversType(KDL_NOTIFICATION_TYPE_PROJECTION_HANDLER_CHANGED); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::handleKeyboardEvent ( SDL_KeyboardEvent & event ) { KKey key(event.keysym); if (focus_key_handler) { if (event.type == SDL_KEYDOWN) { if (focus_key_handler->handleKey(key)) { // if focus_key_handler returns true, it handled the key and wants to keep keyboard focus. // otherwise, propagate key to the other key handlers return; } } else if (focus_key_handler->flags[KDL_KEYHANDLER_FLAG_HANDLES_RELEASE]) { if (focus_key_handler->handleKeyRelease(key)) { // focus_key_handler handled the key release and wants to keep keyboard focus. return; } } } for (KKeyHandlerIter iter = key_handlers.begin(); iter != key_handlers.end(); iter++) { if (event.type == SDL_KEYDOWN) { if ((*iter)->handleKey(key)) { return; } } else if ((*iter)->flags[KDL_KEYHANDLER_FLAG_HANDLES_RELEASE]) { if ((*iter)->handleKeyRelease(key)) { return; } } } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::handleMouseMotionEvent ( SDL_MouseMotionEvent & event ) { KMouseEvent mouseEvent(event); if (mouseEvent.button_state) { std::vector::reverse_iterator iter = pick_handlers.rbegin(); while (iter != pick_handlers.rend()) { if ((*iter)->mouseMotion(mouseEvent)) { if ((*iter)->flags[KDL_PICKHANDLER_FLAG_PROJECTION_ENABLED]) { projection_handler = *iter; } return; // pickhandler handles motion } iter++; } // no pickhandler handles motion -> update current projection if (projection_handler) { projection_handler->updateProjection(mouseEvent); } } else { std::vector::reverse_iterator iter = pick_handlers.rbegin(); while (iter != pick_handlers.rend()) { if ((*iter)->flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS]) { (*iter)->mouseMotion(mouseEvent); return; // pickhandler handles motion } iter++; } } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::handleMouseButtonEvent ( SDL_MouseButtonEvent & event) { KMouseEvent mouseEvent(event); if (event.state == SDL_PRESSED) { SDL_GetRelativeMouseState(NULL, NULL); // reset relative mouse deltas for (KPickHandlerList::reverse_iterator iter = pick_handlers.rbegin(); iter != pick_handlers.rend(); iter++) { if ((*iter)->pick(mouseEvent)) { if ((*iter)->flags[KDL_PICKHANDLER_FLAG_PROJECTION_ENABLED]) { projection_handler = *iter; } return; } } } else // event->state == SDL_RELEASED { if (release_handler) { KPickHandler * tmpReleaseHandler = release_handler; release_handler = NULL; tmpReleaseHandler->release (mouseEvent); } } } // -------------------------------------------------------------------------------------------------------- void KEventHandler::handleResizeEvent ( SDL_ResizeEvent & event ) { // notify interested receivers that the window size changed SDL_SetVideoMode (event.w, event.h, 32, SDL_OPENGL | SDL_RESIZABLE); notification_center.notifyReceiversType (KDL_NOTIFICATION_TYPE_WINDOW_SIZE_CHANGED); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::handleUserEvent ( SDL_UserEvent & event ) { // forward the event code to interested receivers notification_center.notifyReceiversType (event.code); } // -------------------------------------------------------------------------------------------------------- void KEventHandler::mainLoop () { SDL_Event event; while (true) { frame_time = SDL_GetTicks(); while (SDL_PollEvent (&event)) { switch (event.type) { case SDL_KEYUP: handleKeyboardEvent (event.key); break; case SDL_KEYDOWN: handleKeyboardEvent (event.key); break; case SDL_MOUSEMOTION: handleMouseMotionEvent (event.motion); break; case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: handleMouseButtonEvent (event.button); break; case SDL_VIDEORESIZE: handleResizeEvent (event.resize); break; case SDL_QUIT: return; default: if (event.type >= SDL_USEREVENT) { handleUserEvent (event.user); } break; } } display(); if ((frame_time - last_time) < 10) { SDL_Delay (20 - (frame_time - last_time)); } if (flags[KDL_DISPLAY_MODE_SHOW_FPS]) { fps.push_back (1000.0 / (float)(frame_time - last_time)); if (fps.size() > 20) fps.pop_front(); } last_time = frame_time; } } kiki/kodilib/src/handler/KEventHandler.h0000666000000000000000000001260710313613407017177 0ustar rootroot/* * KEventHandler.h * kodisein */ #ifndef __KEventHandler #define __KEventHandler #include enum { KDL_MOUSE_MODE_SCALE, KDL_MOUSE_MODE_ROTATE, KDL_MOUSE_MODE_TRANSLATE }; enum { KDL_DISPLAY_MODE_WIREFRAME, KDL_DISPLAY_MODE_FREE_ROTATION, KDL_DISPLAY_MODE_SHOW_FPS, KDL_DISPLAY_MODE_FAST, KDL_DISPLAY_MODE_END }; enum { KDL_NOTIFICATION_TYPE_VIDEO_MODE_CHANGED = SDL_USEREVENT, KDL_NOTIFICATION_TYPE_WINDOW_SIZE_CHANGED, KDL_NOTIFICATION_TYPE_PROJECTION_HANDLER_CHANGED, KDL_NOTIFICATION_TYPE_MOUSE_MODE_CHANGED, KDL_NOTIFICATION_TYPE_EVENT_HANDLER_END }; #ifdef __cplusplus #include "KIntrospection.h" #include "KNotificationObject.h" #include "KKeyActionHandler.h" #include "KPickHandler.h" #include "KVector.h" #include #include #include // -------------------------------------------------------------------------------------------------------- class KMouseEvent { public: int button_state; KPosition pos; KPosition delta; KMouseEvent ( const SDL_MouseMotionEvent & e ) { pos.x = e.x; pos.y = SDL_GetVideoSurface()->h - e.y; delta.x = e.xrel, delta.y = -e.yrel; button_state = e.state; } KMouseEvent ( const SDL_MouseButtonEvent & e ) { pos.x = e.x; pos.y = SDL_GetVideoSurface()->h - e.y; delta.x = delta.y = 0; button_state = e.state; } bool leftButton () const { return button_state & SDL_BUTTON(SDL_BUTTON_LEFT); } bool middleButton () const { return button_state & SDL_BUTTON(SDL_BUTTON_MIDDLE); } bool rightButton () const { return button_state & SDL_BUTTON(SDL_BUTTON_RIGHT); } bool motion () const { return delta.x != 0 || delta.y != 0; } }; class KProjection; // -------------------------------------------------------------------------------------------------------- class KEventHandler : public KObject { INTROSPECTION protected: static int mode; // application mode static int mouse_mode; // mouse mode static KPickHandler * projection_handler; // handlers static KPickHandlerList pick_handlers; static KKeyHandlerList key_handlers; static KKeyHandler * focus_key_handler; // key focus handler void updateProjection (); public: static KNotificationObject notification_center; static unsigned int frame_time; static unsigned int last_time; static std::deque fps; static bool flags[KDL_DISPLAY_MODE_END]; static std::string copy_string; static KPickHandler * release_handler; static KKeyActionHandler menu_key_handler; KEventHandler (); virtual ~KEventHandler () {} virtual void display (); virtual void displayPickHandlers (); virtual void quit (); virtual void mainLoop (); virtual void handleKeyboardEvent ( SDL_KeyboardEvent & ); virtual void handleMouseMotionEvent ( SDL_MouseMotionEvent & ); virtual void handleMouseButtonEvent ( SDL_MouseButtonEvent & ); virtual void handleUserEvent ( SDL_UserEvent & ); virtual void handleResizeEvent ( SDL_ResizeEvent & ); virtual void setFastDisplay ( bool ); static void setMouseMode ( int ); static int getMouseMode () { return mouse_mode; } static void addPickHandler ( KPickHandler * ); static void removePickHandler ( KPickHandler * ); static void addKeyHandler ( KKeyHandler * ); static void removeKeyHandler ( KKeyHandler * ); static void setFocusKeyHandler ( KKeyHandler * keyHandler ); static void removeFocusKeyHandler ( KKeyHandler * keyHandler ); static void setProjectionHandler ( KPickHandler * = NULL ); static void removeProjectionHandler ( KPickHandler * = NULL ); static void resetLighting (); static unsigned int getTime () { return SDL_GetTicks(); } static int getApplicationMode () { return mode; } static int getMouseState (); static KPosition getMousePos (); static KPosition getMouseDelta (); static KSize getScreenSize (); static bool setScreenSize ( int width, int height, bool fullscreen = false ); static bool getFullscreen (); static void setFullscreen ( bool ); void resetProjection (); void setResetProjection (); void focusOnSelection (); void focusAndZoomOnSelection (); void setFreeRotation ( bool b ) { flags[KDL_DISPLAY_MODE_FREE_ROTATION] = b; } void setWireframeMode ( bool b ) {flags[KDL_DISPLAY_MODE_WIREFRAME] = b;} void setDisplayFps ( bool b ) {flags[KDL_DISPLAY_MODE_SHOW_FPS] = b;} bool getFreeRotation () const {return flags[KDL_DISPLAY_MODE_FREE_ROTATION];} bool getFastDisplay () const {return flags[KDL_DISPLAY_MODE_FAST]; } bool getWireframeMode () const {return flags[KDL_DISPLAY_MODE_WIREFRAME];} bool getDisplayFps () const {return flags[KDL_DISPLAY_MODE_SHOW_FPS];} void toggleFreeRotation (); void toggleWireframeMode (); void toggleDisplayFps (); KPickHandler * getPickHandlerForProjection ( const KProjection * ) const; }; #endif // __cplusplus #endif kiki/kodilib/src/handler/KFileHandler.cpp0000666000000000000000000000325410070562131017323 0ustar rootroot/* * KFileHandler.cpp * kodisein */ #include "KFileHandler.h" #include "KFileTools.h" #include "KConsole.h" #ifndef WIN32 # include // chdir & getcwd //#include // MAXPATHLEN #else // #define MAXPATHLEN 32768 # include //#define getwd(x) getcwd(x, MAXPATHLEN) #endif std::vector KFileHandler::current_dir_stack; // -------------------------------------------------------------------------------------------------------- void KFileHandler::init() { current_dir_stack.push_back(kFileGetCurrentPath()); } // -------------------------------------------------------------------------------------------------------- bool KFileHandler::changeCurrentDir ( const std::string & newCurrentDir ) { current_dir_stack.pop_back(); return pushCurrentDir(newCurrentDir); } // -------------------------------------------------------------------------------------------------------- bool KFileHandler::pushCurrentDir ( const std::string & newCurrentDir ) { std::string absPathName = kFileAbsPathName(newCurrentDir); if (chdir(absPathName.c_str()) == 0) { current_dir_stack.push_back(absPathName); return true; } return false; } // -------------------------------------------------------------------------------------------------------- void KFileHandler::popCurrentDir () { current_dir_stack.pop_back(); chdir (current_dir_stack.back().c_str()); } // -------------------------------------------------------------------------------------------------------- std::string KFileHandler::getCurrentDir () { return current_dir_stack.back(); } kiki/kodilib/src/handler/KFileHandler.h0000666000000000000000000000076207644705701017010 0ustar rootroot/* * KFileHandler.h * kodisein */ #ifndef __KFileHandler #define __KFileHandler #include #include class KFileHandler { protected: static std::vector current_dir_stack; public: static void init (); static bool changeCurrentDir ( const std::string & ); static bool pushCurrentDir ( const std::string & ); static void popCurrentDir (); static std::string getCurrentDir (); }; #endif kiki/kodilib/src/handler/KKeyActionHandler.cpp0000666000000000000000000001071310320462531020331 0ustar rootroot/* * KKeyActionHandler.cpp * kodisein */ #include "KKeyActionHandler.h" #include "KConsole.h" #include "KKey.h" KDL_CLASS_INTROSPECTION_1 (KKeyActionHandler, KKeyHandler) // -------------------------------------------------------------------------------------------------------- KKeyActionHandler::~KKeyActionHandler () { for (KeyActionHash::iterator iter = key_handlers.begin(); iter != key_handlers.end(); iter++) { delete iter->second; } key_handlers.clear(); } // -------------------------------------------------------------------------------------------------------- KKeyAction * KKeyActionHandler::getActionForSequence ( const std::string & sequence, bool create ) { KKeyAction * keyHandler = NULL; KeyActionHash::iterator result = key_handlers.find(sequence.c_str()); if (result != key_handlers.end()) { keyHandler = (*result).second; } else if (create) { keyHandler = new KKeyAction(sequence); key_handlers[sequence.c_str()] = keyHandler; } return keyHandler; } // -------------------------------------------------------------------------------------------------------- bool KKeyActionHandler::isSaveSequenceCallback (const std::string & sequence) { // returns false if there is already an action defined for any prefix of the sequence // or the sequence itself. std::vector sequenceKeys = kStringGetComponents(sequence, " "); std::string checkKey; for (int index = 0; index < (int)sequenceKeys.size(); index++) { kStringMerge(checkKey, sequenceKeys[index], " "); KKeyAction * action = getActionForSequence(checkKey); if (action) { // we found an action, check, if it's empty if (action->hasReceivers() != false) { return false; } } } // no action found for the sequence or any prefix of it ... it's save return true; } // -------------------------------------------------------------------------------------------------------- bool KKeyActionHandler::setSequenceCallback ( const std::string sequence, KObject * rec, KCallbackPtr cb ) { if (sequence == "") return false; if (!isSaveSequenceCallback(sequence)) { #ifndef WIN32 std::string errorMessage; errorMessage = kStringPrintf ("There is already an action bound\nto the key sequence %s (or any prefix of it)", sequence.c_str()); KConsole::printError(errorMessage, true); return false; #else KConsole::printf("[WARNING] There is already an action bound\nto the key sequence %s (or any prefix of it)", sequence.c_str()); #endif } getActionForSequence(sequence, true)->addReceiverCallback(rec, cb); return true; } // -------------------------------------------------------------------------------------------------------- bool KKeyActionHandler::addSequenceCallback ( const std::string sequence, KObject * rec, KCallbackPtr cb ) { if (sequence == "") return false; getActionForSequence(sequence, true)->addReceiverCallback(rec, cb); return true; } // -------------------------------------------------------------------------------------------------------- void KKeyActionHandler::removeSequenceCallback ( const std::string sequence, KObject * rec, KCallbackPtr cb ) { if (sequence == "") return; KKeyAction * keyHandler = getActionForSequence(sequence); if (keyHandler) { keyHandler->removeReceiverCallback(rec, cb); if (keyHandler->hasReceivers() == false) { key_handlers.erase(sequence.c_str()); delete keyHandler; } } } // -------------------------------------------------------------------------------------------------------- bool KKeyActionHandler::handleKey ( const KKey & key ) { KKeyAction * keyHandler = getActionForSequence(last_key + " " + key.name); if (keyHandler) { keyHandler->notifyReceivers(); last_key = ""; // sequence matched -> start new one return true; } else { keyHandler = getActionForSequence(key.name); if (keyHandler) { keyHandler->notifyReceivers(); // key matched return true; } } last_key = key.name; // nothing matched return false; } kiki/kodilib/src/handler/KKeyActionHandler.h0000666000000000000000000000324007644705701020011 0ustar rootroot/* * KKeyActionHandler.h * kodisein */ #ifndef __KKeyActionHandler #define __KKeyActionHandler #include "KKeyHandler.h" #include "KStringTools.h" #include // -------------------------------------------------------------------------------------------------------- class KKeyAction : public KNotificationObject { protected: std::string key_name; public: KKeyAction ( const std::string & keyName ) : KNotificationObject () { key_name = keyName; } virtual ~KKeyAction () {} virtual const std::string & getKeyName () const { return key_name; } }; typedef std::map KeyActionHash; // -------------------------------------------------------------------------------------------------------- class KKeyActionHandler : public KKeyHandler { INTROSPECTION protected: KeyActionHash key_handlers; std::string last_key; public: KKeyActionHandler () : KKeyHandler () {} virtual ~KKeyActionHandler (); KKeyAction * getActionForSequence ( const std::string &, bool = false ); bool addSequenceCallback ( const std::string, KObject *, KCallbackPtr ); bool setSequenceCallback ( const std::string, KObject *, KCallbackPtr ); void removeSequenceCallback ( const std::string, KObject *, KCallbackPtr ); bool isSaveSequenceCallback ( const std::string & ); bool handleKey ( const KKey & ); }; #endif kiki/kodilib/src/handler/KKeyHandler.cpp0000666000000000000000000000101307644705701017202 0ustar rootroot/* * KKeyHandler.cpp * kodisein */ #include "KKeyHandler.h" KDL_CLASS_INTROSPECTION_1 (KKeyHandler, KNotificationObject) // -------------------------------------------------------------------------------------------------------- KKeyHandler::KKeyHandler () { flags.resize(KDL_KEYHANDLER_FLAG_END); flags[KDL_KEYHANDLER_FLAG_BLOCKABLE] = true; // default behaviour is to be blockable flags[KDL_KEYHANDLER_FLAG_HANDLES_RELEASE] = false; // doesn't handle release events by default } kiki/kodilib/src/handler/KKeyHandler.h0000666000000000000000000000201007644705701016645 0ustar rootroot/* * KKeyHandler.h * kodisein */ #ifndef __KKeyHandler #define __KKeyHandler #include "KNotificationObject.h" #include struct KKey; // -------------------------------------------------------------------------------------------------------- enum { KDL_KEYHANDLER_FLAG_BLOCKABLE, KDL_KEYHANDLER_FLAG_HANDLES_RELEASE, KDL_KEYHANDLER_FLAG_END }; // -------------------------------------------------------------------------------------------------------- class KKeyHandler : public KNotificationObject { INTROSPECTION public: std::vector flags; KKeyHandler (); virtual bool handleKey ( const KKey & ) = 0; virtual bool handleKeyRelease ( const KKey & ) { return false; } }; // -------------------------------------------------------------------------------------------------------- typedef std::vector KKeyHandlerList; typedef KKeyHandlerList::iterator KKeyHandlerIter; #endif kiki/kodilib/src/handler/KKeyRecorder.cpp0000666000000000000000000000345107644705701017402 0ustar rootroot/* * KKeyRecorder.cpp * kodisein */ #include "KKeyRecorder.h" #include "KEventHandler.h" #include "KKey.h" KDL_CLASS_INTROSPECTION_1 (KKeyRecorder, KKeyHandler) // -------------------------------------------------------------------------------------------------------- KKeyRecorder::KKeyRecorder () : KKeyHandler () { max_num_recorded_keys = INT_MAX; recorded_sequence = ""; num_recorded_keys = 0; recording = false; } // -------------------------------------------------------------------------------------------------------- void KKeyRecorder::startRecordingSequence ( KObject * rec, KSetStringPtr cb, int numKeys ) { max_num_recorded_keys = numKeys; recorded_sequence = ""; num_recorded_keys = 0; recording = true; removeAllReceivers(); addReceiverCallback(rec, cb); KEventHandler::setFocusKeyHandler(this); } // -------------------------------------------------------------------------------------------------------- void KKeyRecorder::stopRecording () { recording = false; KEventHandler::setFocusKeyHandler(NULL); notifyReceivers(recorded_sequence); } // -------------------------------------------------------------------------------------------------------- bool KKeyRecorder::handleKey ( const KKey & key ) { if (key.name == "RETURN") { stopRecording(); return true; } if (recorded_sequence == "") { recorded_sequence = key.name; } else { recorded_sequence += " " + key.name; } num_recorded_keys++; if (num_recorded_keys >= max_num_recorded_keys) { stopRecording(); return true; } notifyReceivers(recorded_sequence); return true; } kiki/kodilib/src/handler/KKeyRecorder.h0000666000000000000000000000133507644705701017046 0ustar rootroot/* * KKeyRecorder.h * kodisein */ #ifndef __KKeyRecorder #define __KKeyRecorder #include "KKeyHandler.h" // -------------------------------------------------------------------------------------------------------- class KKeyRecorder : public KKeyHandler { INTROSPECTION protected: bool recording; std::string recorded_sequence; unsigned int num_recorded_keys; unsigned int max_num_recorded_keys; public: KKeyRecorder (); void startRecordingSequence ( KObject *, KSetStringPtr, int = 2 ); void stopRecording (); bool isRecording () const { return recording; } bool handleKey ( const KKey & ); }; #endif kiki/kodilib/src/handler/KPickable.cpp0000666000000000000000000000175510070562132016665 0ustar rootroot/* * KPickable.cpp * kodisein */ #include "KPickable.h" #if defined(__APPLE__) && defined(__MACH__) #include #else #ifdef _WIN32 #include #endif #include #endif KDL_CLASS_INTROSPECTION (KPickable) // -------------------------------------------------------------------------------------------------------- KPickable::KPickable () { picked = false; pickable_id = 0; } // -------------------------------------------------------------------------------------------------------- void KPickable::loadId () { GLint names; glGetIntegerv(GL_NAME_STACK_DEPTH, &names); if (names) glLoadName(pickable_id); else glPushName(pickable_id); } // -------------------------------------------------------------------------------------------------------- void KPickable::unloadId () { GLint names; glGetIntegerv(GL_NAME_STACK_DEPTH, &names); if (names) glLoadName(0); else glPushName(0); } kiki/kodilib/src/handler/KPickable.h0000666000000000000000000000233207644705701016340 0ustar rootroot/* * KPickable.h * kodisein */ #ifndef __KPickable #define __KPickable #include "KIntrospection.h" #include #define DEBUG_PICKING false class KPickable; typedef std::vector PickableVector; typedef PickableVector::iterator PickableIter; class KPickable { INTROSPECTION protected: bool picked; int pickable_id; void loadId (); void unloadId (); public: KPickable (); virtual ~KPickable () {} virtual void display ( int ) {} virtual int getId () const { return pickable_id; } virtual void setId ( int i ) { pickable_id = i; }; virtual void setPicked ( bool p ) { picked = p; } virtual bool isPicked () const { return picked; } virtual bool hasSubPickables () const { return false; } virtual const PickableVector * getSubPickables () const { return NULL; } virtual void setMinId ( int ) {} virtual void setMaxId ( int ) {} virtual int getMinId () { return -INT_MAX; } virtual int getMaxId () { return INT_MAX; } }; #endif kiki/kodilib/src/handler/KPickHandler.cpp0000666000000000000000000003551207645543103017350 0ustar rootroot/* * KPickHandler.cpp * kodisein */ #include "KPickHandler.h" #include "KEventHandler.h" #include "KPerspectiveProjection.h" #include "KConsole.h" #include #include #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KPickHandler, KObject) // -------------------------------------------------------------------------------------------------------- KPickHandler::KPickHandler () : KObject () { depth = 0; picked_pickable = NULL; projection = NULL; reset_projection = NULL; last_time = 0; flags.resize (KDL_PICKHANDLER_FLAG_END); flags[KDL_PICKHANDLER_FLAG_FOCUS_ON_ENABLED] = false; flags[KDL_PICKHANDLER_FLAG_PROJECTION_ENABLED] = false; flags[KDL_PICKHANDLER_FLAG_MENU_ENABLED] = false; flags[KDL_PICKHANDLER_FLAG_MOVING_ENABLED] = false; flags[KDL_PICKHANDLER_FLAG_TRANSPARENT_ZERO] = false; flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = false; flags[KDL_PICKHANDLER_FLAG_DOUBLECLICK_ENABLED] = true; flags[KDL_PICKHANDLER_FLAG_AUTOUNPICK_ENABLED] = true; } // -------------------------------------------------------------------------------------------------------- KPickHandler::~KPickHandler () { if (projection) delete projection; } // -------------------------------------------------------------------------------------------------------- // handles a mouse button down event at mousePos // returns true if a pickable was hit bool KPickHandler::pick ( const KMouseEvent & event ) { GLuint hits, minDepth = (GLuint)-1, * p; GLint picked_id; GLuint selectBuffer[2560]; glSelectBuffer (2560, selectBuffer); glRenderMode (GL_SELECT); glInitNames (); glMatrixMode (GL_MODELVIEW); glPushMatrix (); glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); gluPickMatrix (event.pos.x, event.pos.y, 3.0, 3.0, (GLint*)getProjection()->getViewport()); getProjection()->apply(); // render pickables displayPickables ( KEventHandler::getApplicationMode() ); glMatrixMode (GL_PROJECTION); glPopMatrix (); glMatrixMode (GL_MODELVIEW); glPopMatrix (); hits = glRenderMode (GL_RENDER); if (hits < 0) KConsole::printError("selection buffer overflow!"); p = selectBuffer; picked_id = 0; for (GLuint i = 0; i < hits; i++) { GLuint numNames = *p; p++; // number of names GLuint pickableDepth; pickableDepth = *p; p++; // first depth value pickableDepth = kMin(*p, pickableDepth); p++; // second depth value while (numNames > 0) { if (pickableDepth <= minDepth && (flags[KDL_PICKHANDLER_FLAG_TRANSPARENT_ZERO] || (*p > 0))) { if (flags[KDL_PICKHANDLER_FLAG_TRANSPARENT_ZERO] || *p > 0) { minDepth = pickableDepth; picked_id = *p; } } numNames--; p++; } } if (picked_id > 0) { KPickable * pickable = (KPickable*)getPickableWithId(picked_id); KPickable * last_picked_pickable = picked_pickable; unpick(); if (pickable == NULL) { KConsole::printError(kStringPrintf("id %d found, but no pickable!", picked_id)); return false; } if (shouldPick(pickable)) { picked_pickable = (KPickable *)pickable; picked_pickable->setPicked(true); flags[KDL_PICKHANDLER_FLAG_MOVING_ENABLED] = true; KEventHandler::release_handler = this; if (flags[KDL_PICKHANDLER_FLAG_DOUBLECLICK_ENABLED]) { unsigned int thisTime = SDL_GetTicks(); if ((thisTime-last_time < 700) && (last_picked_pickable == picked_pickable)) { doubleClicked(); last_time = thisTime; return true; } last_time = thisTime; } picked (); // notification } } else if (flags[KDL_PICKHANDLER_FLAG_AUTOUNPICK_ENABLED]) { unpick(); } if (flags[KDL_PICKHANDLER_FLAG_MENU_ENABLED] && (SDL_GetModState() & KMOD_CTRL)) { displayMenu(); return true; } return picked_id; } // -------------------------------------------------------------------------------------------------------- void KPickHandler::pickPickable ( KPickable * pickable ) { unpick(); picked_pickable = (KPickable *)pickable; picked_pickable->setPicked(true); } // -------------------------------------------------------------------------------------------------------- void KPickHandler::addPickable ( KPickable * pickable ) { pickables.push_back(pickable); initializeIds(); } // -------------------------------------------------------------------------------------------------------- void KPickHandler::deletePickable ( KPickable * pickable ) { removePickable(pickable); delete pickable; } // -------------------------------------------------------------------------------------------------------- void KPickHandler::deleteAllPickables () { picked_pickable = NULL; while (pickables.empty() == false) { deletePickable(pickables.back()); } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::removeAllPickables () { picked_pickable = NULL; while (pickables.empty() == false) { removePickable(pickables.back()); } } // -------------------------------------------------------------------------------------------------------- // removes pickable from list of all pickables without deleting it void KPickHandler::removePickable( KPickable * pickable ) { if (picked_pickable) { if (picked_pickable == pickable || (pickable->hasSubPickables() && pickableWithIdInVector (picked_pickable->getId(), pickable->getSubPickables()) != NULL)) { picked_pickable = NULL; } } PickableVector::iterator result = std::find(pickables.begin(), pickables.end(), pickable); if (result != pickables.end()) { if (pickable->isPicked()) { pickable->setPicked(false); } pickables.erase(result); } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::displayPickables ( int mode ) { PickableVector::const_iterator iter = pickables.begin(); while (iter != pickables.end()) { glPushMatrix(); (*iter)->display(mode); glPopMatrix(); iter++; } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::display ( int mode ) { getProjection()->initProjection(); displayPickables( mode ); } // -------------------------------------------------------------------------------------------------------- void KPickHandler::release ( const KMouseEvent & ) { flags[KDL_PICKHANDLER_FLAG_MOVING_ENABLED] = false; } // -------------------------------------------------------------------------------------------------------- bool KPickHandler::mouseMotion ( const KMouseEvent & mouseEvent ) { if (flags[KDL_PICKHANDLER_FLAG_MOVING_ENABLED] && picked_pickable != NULL) { moved(mouseEvent); return true; } return false; } // -------------------------------------------------------------------------------------------------------- void KPickHandler::unpick () { if (picked_pickable) { picked_pickable->setPicked(false); unpicked(); picked_pickable = NULL; } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::unpickAllInVector (const PickableVector * pv) { PickableVector::const_iterator iter = pv->begin(); while (iter != pv->end()) { (*iter)->setPicked(false); if ((*iter)->hasSubPickables()) { unpickAllInVector((*iter)->getSubPickables()); } iter++; } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::unpickAll () { unpickAllInVector(&pickables); unpick(); } // -------------------------------------------------------------------------------------------------------- void KPickHandler::updateProjectionFromEventInMode ( KProjection * proj, const KMouseEvent & mouseEvent, int mouseMode ) { if (mouseMode == KDL_MOUSE_MODE_TRANSLATE) { if (SDL_GetModState() & KMOD_SHIFT) { proj->translate( 0.0, 0.0, -kAbsMax(mouseEvent.delta.x, mouseEvent.delta.y) / 10.0 ); } else { proj->translate(-mouseEvent.delta.x / 10.0, -mouseEvent.delta.y / 10.0, 0.0 ); } } else if (mouseMode == KDL_MOUSE_MODE_SCALE) { GLfloat f = 1.0 - kAbsMax(mouseEvent.delta.x, mouseEvent.delta.y) / 200.0; if (SDL_GetModState() & KMOD_SHIFT) { proj->setFov(proj->getFov() * f); } else { proj->setEyeDistance(proj->getEyeDistance() * f); } } else if (mouseMode == KDL_MOUSE_MODE_ROTATE) { KSize screenSize = KEventHandler::getScreenSize(); if (SDL_GetModState() & KMOD_SHIFT) { float rot = 360.0; if (kAbs(mouseEvent.delta.x) > kAbs(mouseEvent.delta.y)) { if (mouseEvent.pos.y < screenSize.h/2.0) rot *= -1; proj->rotate(0.0, 0.0, mouseEvent.delta.x * rot/screenSize.w); } else { if (mouseEvent.pos.x > screenSize.w/2.0) rot *= -1; proj->rotate(0.0, 0.0, mouseEvent.delta.y * rot/screenSize.h); } } else { proj->rotate (mouseEvent.delta.y * 180.0 / screenSize.h, -mouseEvent.delta.x * 360.0 / screenSize.w, 0.0); } } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::updateProjection ( const KMouseEvent & mouseEvent ) { if (isProjectionEnabled()) { if (SDL_GetModState() & KMOD_CTRL || mouseEvent.button_state == SDL_BUTTON(3)) { KEventHandler::setMouseMode(KDL_MOUSE_MODE_TRANSLATE); } else if (SDL_GetModState() & KMOD_ALT || mouseEvent.button_state == SDL_BUTTON(2)) { KEventHandler::setMouseMode(KDL_MOUSE_MODE_SCALE); } updateProjectionFromEventInMode (getProjection(), mouseEvent, KEventHandler::getMouseMode()); } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::setProjection ( const KProjection * p ) { if (projection) { delete projection; } projection = p->copy(); } // -------------------------------------------------------------------------------------------------------- void KPickHandler::setResetProjection() { if (reset_projection) { delete reset_projection; } reset_projection = projection->copy(); } // -------------------------------------------------------------------------------------------------------- const KProjection * KPickHandler::getResetProjection() const { if (reset_projection == NULL) { ((KPickHandler*)this)->reset_projection = new KPerspectiveProjection(); } return reset_projection; } // -------------------------------------------------------------------------------------------------------- const KPickable * KPickHandler::getParentOfPickable( const KPickable * child ) const { return parentOfPickableInVector (child, &pickables); } // -------------------------------------------------------------------------------------------------------- const KPickable * KPickHandler::getPickableWithId ( int i ) const { return pickableWithIdInVector (i, &pickables); } // -------------------------------------------------------------------------------------------------------- const KPickable * KPickHandler::pickableWithIdInVector ( int i, const PickableVector * pv ) const { PickableVector::const_iterator iter = pv->begin(); while (iter != pv->end()) { if ((*iter)->getId() == i) { return (*iter); } if ((*iter)->hasSubPickables() && (*iter)->getMinId() <= i && (*iter)->getMaxId() >= i) { const KPickable * pickable = pickableWithIdInVector (i, (*iter)->getSubPickables()); if (pickable) return pickable; } iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- const KPickable * KPickHandler::parentOfPickableInVector ( const KPickable * child, const PickableVector * pv ) const { PickableVector::const_iterator iter = pv->begin(); while (iter != pv->end()) { if ((*iter)->hasSubPickables()) { const KPickable * pickable = pickableWithIdInVector (child->getId(), (*iter)->getSubPickables()); if (pickable) return (*iter); pickable = parentOfPickableInVector(child, (*iter)->getSubPickables()); if (pickable) return pickable; } iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- void KPickHandler::initializeIdsInVector ( const PickableVector * pv, int & max_id ) const { PickableVector::const_iterator iter = pv->begin(); while (iter != pv->end()) { (*iter)->setId(++max_id); if ((*iter)->hasSubPickables()) { (*iter)->setMinId(max_id+1); initializeIdsInVector((*iter)->getSubPickables(), max_id); (*iter)->setMaxId(max_id); } iter++; } } // -------------------------------------------------------------------------------------------------------- void KPickHandler::initializeIds () { int max_id = 0; initializeIdsInVector(&pickables, max_id); } kiki/kodilib/src/handler/KPickHandler.h0000666000000000000000000001011007644705702017004 0ustar rootroot/* * KPickHandler.h * kodisein */ #ifndef __KPickHandler #define __KPickHandler #include "KPickable.h" #include "KNotificationObject.h" class KProjection; class KMouseEvent; // __________________________________________________________________________________________________ enum { KDL_PICKHANDLER_FLAG_FOCUS_ON_ENABLED, KDL_PICKHANDLER_FLAG_PROJECTION_ENABLED, KDL_PICKHANDLER_FLAG_DOUBLECLICK_ENABLED, KDL_PICKHANDLER_FLAG_MENU_ENABLED, KDL_PICKHANDLER_FLAG_AUTOUNPICK_ENABLED, KDL_PICKHANDLER_FLAG_MOVING_ENABLED, KDL_PICKHANDLER_FLAG_TRANSPARENT_ZERO, KDL_PICKHANDLER_FLAG_MOTION_FOCUS, KDL_PICKHANDLER_FLAG_END }; // __________________________________________________________________________________________________ class KPickHandler : public KObject { INTROSPECTION protected: int last_time; PickableVector pickables; KPickable * picked_pickable; KProjection * projection; KProjection * reset_projection; void initializeIdsInVector ( const PickableVector *, int & ) const; const KPickable * parentOfPickableInVector ( const KPickable *, const PickableVector * ) const; const KPickable * pickableWithIdInVector ( int, const PickableVector * ) const; public: std::vector flags; int depth; KPickHandler (); virtual ~KPickHandler (); bool operator < ( const KPickHandler & ph ) { return(depth KPickHandlerList; typedef KPickHandlerList::iterator KPickHandlerIter; #endif kiki/kodilib/src/handler/KSelectable.cpp0000666000000000000000000000047307644705702017231 0ustar rootroot/* * KSelectable.cpp * kodisein */ #include "KSelectable.h" KDL_CLASS_INTROSPECTION_1 (KSelectable,KPickable) // -------------------------------------------------------------------------------------------------------- KSelectable::KSelectable () : KPickable () { selected = false; } kiki/kodilib/src/handler/KSelectable.h0000666000000000000000000000137307644705702016676 0ustar rootroot/* * KSelectable.h * kodisein */ #ifndef __KSelectable #define __KSelectable #include "KPickable.h" // -------------------------------------------------------------------------------------------------------- class KSelectable : public KPickable { INTROSPECTION protected: bool selected; public: KSelectable (); virtual void setSelected ( bool s ) { selected = s; } virtual bool isSelected () const { return selected; } virtual bool isCutCopyPasteable () const { return true; } virtual std::string getPasteBufferString () const { return ""; } }; #endif kiki/kodilib/src/handler/KSelectionHandler.cpp0000666000000000000000000001346007644705702020411 0ustar rootroot/* * KSelectionHandler.cpp * kodisein */ #include "KSelectionHandler.h" #include "KSelectable.h" #include "KConsole.h" #include #include KDL_CLASS_INTROSPECTION_1 (KSelectionHandler, KPickHandler) // -------------------------------------------------------------------------------------------------------- KSelectionHandler::KSelectionHandler () : KPickHandler () { } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::removePickable( KPickable * pickable ) { unselect((KSelectable*)pickable); KPickHandler::removePickable(pickable); } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::cut () { copy(); std::vector::iterator iter = selected_selectables.begin(); while (iter != selected_selectables.end()) { (*iter)->setSelected(false); iter++; } iter = selected_selectables.begin(); while (iter != selected_selectables.end()) { if ((*iter)->isCutCopyPasteable()) { KSelectable * removedItem = *iter; iter = selected_selectables.erase(iter); deletePickable(removedItem); } else { iter++; } } selected_selectables.clear(); unpick(); } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::copy () { clearPasteBuffer(); std::vector::iterator iter = selected_selectables.begin(); while (iter != selected_selectables.end()) { if ((*iter)->isCutCopyPasteable()) { paste_buffer.push_back((*iter)->getPasteBufferString()); } iter++; } } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::paste () { std::vector::iterator iter = paste_buffer.begin(); while (iter != paste_buffer.end()) { pasted(*iter); iter++; } } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::clearPasteBuffer () { paste_buffer.clear(); } // -------------------------------------------------------------------------------------------------------- bool KSelectionHandler::isSelected (KSelectable * selectable) { std::vector::iterator result; result = std::find(selected_selectables.begin(), selected_selectables.end(), selectable); return (result != selected_selectables.end()); } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::select(KSelectable * selectable) { std::vector::iterator result; result = std::find (selected_selectables.begin(), selected_selectables.end(), selectable); if (result == selected_selectables.end()) { selected_selectables.push_back(selectable); selectable->setSelected(true); } } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::unselectAllInVector (const PickableVector * pv) { PickableVector::const_iterator iter = pv->begin(); while (iter != pv->end()) { if ((*iter)->getClassId() >= KSelectable::classId()) { unselect((KSelectable*)(*iter)); } iter++; } } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::unselect(KSelectable * selectable) { std::vector::iterator result; result = std::find (selected_selectables.begin(), selected_selectables.end(), selectable); if (result != selected_selectables.end()) { selectable->setSelected(false); if (selectable->hasSubPickables()) { unselectAllInVector(selectable->getSubPickables()); } selected_selectables.erase(result); } } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::unselectAll() { std::vector::iterator iter = selected_selectables.begin(); while (iter != selected_selectables.end()) { (*iter)->setSelected(false); iter++; } selected_selectables.clear(); } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::picked () { KSelectable * selectable; if (picked_pickable->getClassId() >= KSelectable::classId()) { selectable = (KSelectable *)picked_pickable; } else // try to find selectable parent { const KPickable * parent = picked_pickable; while (parent = getParentOfPickable(parent)) { if (parent->getClassId() >= KSelectable::classId()) { break; } } if (!parent) return; selectable = (KSelectable*)parent; } if (selectable->isSelected()) { unselect(selectable); } else { if ((SDL_GetModState() & KMOD_SHIFT) == false) { unselectAll(); } select(selectable); } } // -------------------------------------------------------------------------------------------------------- void KSelectionHandler::unpicked () { if ((SDL_GetModState() & KMOD_SHIFT) == false) { unselectAll(); } } kiki/kodilib/src/handler/KSelectionHandler.h0000666000000000000000000000210507644705702020050 0ustar rootroot/* * KSelectionHandler.h * kodisein */ #ifndef __KSelectionHandler #define __KSelectionHandler #include "KPickHandler.h" class KSelectable; class KSelectionHandler : public KPickHandler { INTROSPECTION private: std::vector paste_buffer; void clearPasteBuffer (); protected: std::vector selected_selectables; public: KSelectionHandler (); void unselectAllInVector ( const PickableVector * ); void unselect ( KSelectable * ); void unselectAll (); bool isSelected ( KSelectable * ); virtual void removePickable ( KPickable * ); virtual void select ( KSelectable * ); virtual void cut (); virtual void copy (); virtual void paste (); // pickhandler notifications virtual void unpicked (); virtual void picked (); // selectionhandler notification virtual void pasted ( const std::string & ) {} }; #endif kiki/kodilib/src/tools/0000777000000000000000000000000010336064534014057 5ustar rootrootkiki/kodilib/src/tools/KDisplayTools.cpp0000666000000000000000000001564207645543103017337 0ustar rootroot/* * KDisplayTools.cpp * kodisein */ #include "KDisplayTools.h" #include "KSeparatedMatrix.h" #include "KVector.h" #include "KConsole.h" #include #include #define K_INCLUDE_GLUT #include "KIncludeTools.h" // -------------------------------------------------------------------------------------------------------- SDL_PixelFormat KDL_PIXEL_FORMAT = { 0x0, // palette 0x20, // bits per pixel 0x04, // bytes per pixel 0x0,0x0,0x0,0x0, // loss 0x18,0x10,0x08,0x0, // shift //#if SDL_BYTEORDER == SDL_BIG_ENDIAN 0xff000000, // rmask 0x00ff0000, // gmask 0x0000ff00, // bmask 0x000000ff, // amask //#else // 0x000000ff, // 0x0000ff00, // 0x00ff0000, // 0xff000000, //#endif 0x0, // color key 0xff // alpha }; // -------------------------------------------------------------------------------------------------------- int kDisplayXPMIcon ( char ** xpmData, const KPosition & pos ) { glPushAttrib(GL_PIXEL_MODE_BIT); float color[4]; glGetFloatv(GL_CURRENT_COLOR, color); glPixelTransferf(GL_RED_SCALE, color[0]); glPixelTransferf(GL_GREEN_SCALE, color[1]); glPixelTransferf(GL_BLUE_SCALE, color[2]); SDL_Surface * xpmSurface = IMG_ReadXPMFromArray (xpmData); if (xpmSurface == NULL) { KConsole::printError("kDisplayXPMIcon: IMG_ReadXPMFromArray failed"); glPopAttrib(); return 0; } SDL_Surface * surface = SDL_ConvertSurface(xpmSurface, &KDL_PIXEL_FORMAT, SDL_SWSURFACE); if (surface == NULL) { KConsole::printError("kDisplayXPMIcon: SDL_ConvertSurface failed"); glPopAttrib(); SDL_FreeSurface(xpmSurface); return 0; } SDL_FreeSurface(xpmSurface); int width = surface->w; glRasterPos2f(pos.x-0.5, pos.y+0.5); #ifndef _WIN32 glDrawPixels(surface->w, surface->h, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, surface->pixels); #else glDrawPixels(surface->w, surface->h, GL_RGBA, GL_4_BYTES, surface->pixels); #endif SDL_FreeSurface(surface); glPopAttrib(); return width; } // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- float kScreenUnitPerWorldUnitAtPos ( const KVector & pos ) { GLdouble ox, oy, xx, xy, yx, yy, zx, zy, z, model[16], proj[16]; GLint view[4]; GLdouble px = pos[X], py = pos[Y], pz = pos[Z]; glGetDoublev(GL_PROJECTION_MATRIX, proj); glGetDoublev(GL_MODELVIEW_MATRIX, model); glGetIntegerv(GL_VIEWPORT, (GLint*)view); gluProject(px, py, pz, model, proj, view, &ox, &oy, &z); gluProject(px + 1.0, py, pz, model, proj, view, &xx, &xy, &z); gluProject(px, py + 1.0, pz, model, proj, view, &yx, &yy, &z); gluProject(px, py, pz + 1.0, model, proj, view, &zx, &zy, &z); return (kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); } // -------------------------------------------------------------------------------------------------------- void kStrokeString ( const std::string & str, const KVector & position, void * font ) { glPushMatrix(); glTranslatef(position[X], position[Y], position[Z]); glScaled(1.0/155.0, 1.0/155.0, 1.0/155.0); glPushMatrix(); for ( int i = 0; i < (int)str.size(); i++) { if (str[i] == '\n') { glPopMatrix(); glTranslatef(0, -155.0, 0); glPushMatrix(); } else { glutStrokeCharacter(font, str[i]); } } glPopMatrix(); glPopMatrix(); } // -------------------------------------------------------------------------------------------------------- void kBitmapString ( const std::string & str, const KVector & position, void * font ) { float units = kScreenUnitPerWorldUnitAtPos(position); float x = position[X], ox = position[X], y = position[Y]; for ( int i = 0; i < (int)str.size(); i++) { if (str[i] == '\n') { y -= (15.0 / units); x = ox; } else { glRasterPos2d(x, y); glutBitmapCharacter(font, str[i]); x += (9.0 / units); } } } // -------------------------------------------------------------------------------------------------------- void kDisplayString ( const std::string & str, const KVector & position, void * font ) { std::string replaced(str); kStringReplace(replaced, "\\n", "\n"); if (font == GLUT_STROKE_ROMAN || font == GLUT_STROKE_MONO_ROMAN) { kStrokeString(replaced, position, font); } else { glRasterPos2fv(position.getValues()); kBitmapString(replaced, position, font); } } // -------------------------------------------------------------------------------------------------------- void kDisplayString ( const std::string & str, const KPosition & pos, bool largeFont ) { int x = pos.x, ox = pos.x, y = pos.y; for ( int i = 0; i < (int)str.size(); i++) { if (str.c_str()[i] == '\n') { y -= largeFont ? 15 : 13; x = ox; } else { glRasterPos2i(x, y); glutBitmapCharacter(largeFont ? GLUT_BITMAP_9_BY_15 : GLUT_BITMAP_8_BY_13, str.c_str()[i]); x += largeFont ? 9 : 8; } } } // -------------------------------------------------------------------------------------------------------- void kDisplaySolidCube ( float sidelength ) { glutSolidCube(sidelength); } // __________________________________________________________________________________________________ void kDisplayWireCube ( float sidelength ) { glutWireCube(sidelength); } // -------------------------------------------------------------------------------------------------------- void kDisplaySolidSphere ( float radius, int subdivisions ) { GLUquadric * quad = gluNewQuadric(); gluSphere(quad, radius, subdivisions, subdivisions); gluDeleteQuadric(quad); } // -------------------------------------------------------------------------------------------------------- void kDisplayWireSphere ( float radius, int subdivisions ) { GLUquadric * quad = gluNewQuadric(); gluQuadricDrawStyle(quad, GLU_LINE); gluSphere(quad, radius, subdivisions, subdivisions); gluDeleteQuadric(quad); } // -------------------------------------------------------------------------------------------------------- void kDisplaySolidCylinder ( float base, float top, float height, int subdivisions ) { GLUquadric * quad = gluNewQuadric(); gluCylinder(quad, base, top, height, subdivisions, 1); gluDeleteQuadric(quad); } kiki/kodilib/src/tools/KDisplayTools.h0000666000000000000000000001054507644705702017005 0ustar rootroot/* * KDisplayTools.h * kodisein */ #ifndef __KDisplayTools #define __KDisplayTools #include #include #include #include #include "KVector.h" void kDisplayString ( const std::string &, const KPosition &, bool = true ); void kDisplayString ( const std::string &, const KVector &, void * ); int kDisplayXPMIcon ( char ** xpmData, const KPosition & pos ); void kDisplayWireSphere ( float radius = 0.5, int subdivisions = 8); void kDisplaySolidSphere ( float radius = 0.5, int subdivisions = 8); void kDisplaySolidCube ( float sidelength = 1.0); void kDisplayWireCube ( float sidelength = 1.0); void kDisplaySolidCylinder ( float base = 0.5, float top = 0.0, float height = 1.0, int subdivisions = 8); extern SDL_PixelFormat KDL_PIXEL_FORMAT; // -------------------------------------------------------------------------------------------------------- #define RECTANGLE_XY(minx, maxx, miny, maxy, z) { glNormal3f(0.0, 0.0, 1.0); \ glVertex3f(maxx, maxy, z); \ glVertex3f(minx, maxy, z); \ glVertex3f(minx, miny, z); \ glVertex3f(maxx, miny, z); } #define RECTANGLE_YX(minx, maxx, miny, maxy, z) { glNormal3f(0.0, 0.0, -1.0); \ glVertex3f(maxx, maxy, z); \ glVertex3f(maxx, miny, z); \ glVertex3f(minx, miny, z); \ glVertex3f(minx, maxy, z); } #define RECTANGLE_XZ(minx, maxx, minz, maxz, y) { glNormal3f(0.0, -1.0, 0.0); \ glVertex3f(maxx, y, maxz); \ glVertex3f(minx, y, maxz); \ glVertex3f(minx, y, minz); \ glVertex3f(maxx, y, minz); } #define RECTANGLE_ZX(minx, maxx, minz, maxz, y) { glNormal3f(0.0, 1.0, 0.0); \ glVertex3f(maxx, y, maxz); \ glVertex3f(maxx, y, minz); \ glVertex3f(minx, y, minz); \ glVertex3f(minx, y, maxz); } #define RECTANGLE_ZY(miny, maxy, minz, maxz, x) { glNormal3f(-1.0, 0.0, 0.0); \ glVertex3f(x, maxy, maxz); \ glVertex3f(x, maxy, minz); \ glVertex3f(x, miny, minz); \ glVertex3f(x, miny, maxz); } #define RECTANGLE_YZ(miny, maxy, minz, maxz, x) { glNormal3f(1.0, 0.0, 0.0); \ glVertex3f(x, maxy, maxz); \ glVertex3f(x, miny, maxz); \ glVertex3f(x, miny, minz); \ glVertex3f(x, maxy, minz); } // -------------------------------------------------------------------------------------------------------- #define CLASS_NAME \ private: \ static const std::string class_name; \ public: \ virtual const std::string & getName() const { return class_name; } \ static const std::string & name() { return class_name; } \ private: \ #define CLASS_NAME_NAME(className, name) \ const std::string className::class_name(name); \ // -------------------------------------------------------------------------------------------------------- #define OBJECT_ID \ private: \ long object_id; \ void setObjectId(long i) { object_id = i; } \ void initObjectId() { object_id = time(NULL) + random(); } \ public: \ long getObjectId() const { return object_id; } \ private: #endif kiki/kodilib/src/tools/KFileTools.cpp0000666000000000000000000002603110070562132016570 0ustar rootroot/* * KFileTools.cpp * kodisein */ #include "KFileTools.h" #include "KConsole.h" #include "KStringTools.h" #pragma warning(disable:4786) #include // open #include // stat #include #ifndef WIN32 #include // close #include // getdirentries #include // MAXPATHLEN #else #include #include #include #endif #include #ifdef WIN32 const char kPathSep = '\\'; #else const char kPathSep = '/'; #endif // -------------------------------------------------------------------------------------------------------- string kFileJoinPaths ( const string & path1, const string & path2 ) { string filePath; filePath = path1 + kPathSep + path2; return filePath; } // -------------------------------------------------------------------------------------------------------- string kFileGetCurrentPath () { #ifndef WIN32 char buffer[MAXPATHLEN+1]; getwd(buffer); #else char buffer[MAX_PATH+1]; getcwd(buffer, MAX_PATH+1); #endif return string(buffer); } // -------------------------------------------------------------------------------------------------------- string kFileHomeDir () { #ifdef WIN32 return string(getenv("HOMEDRIVE")) + string(getenv("HOMEPATH")); #else return string(getenv("HOME")); #endif } // -------------------------------------------------------------------------------------------------------- string kFileNativePath ( const string & path ) { string replaced(path); #ifdef WIN32 kStringReplace(replaced, "/", "\\"); #else kStringReplace(replaced, "\\", "/"); #endif return replaced; } // -------------------------------------------------------------------------------------------------------- string kFileSubstitutePath ( const string & path ) { string native = kFileNativePath(path); string filePath; if (native[0] == '~') { filePath = kFileHomeDir(); if (native.size() > 1) filePath += native.substr(1); } else { filePath = native; } return filePath; } // -------------------------------------------------------------------------------------------------------- bool kFileHasParent ( const string & path ) { if (path.size() == 1 && path[0] == kPathSep) return false; if (path.size() == 2 && path[1] == ':') return false; if (path.size() == 3 && path[1] == ':' && path[2] == kPathSep) return false; return true; } // -------------------------------------------------------------------------------------------------------- bool kFileIsAbsPath ( const string & path ) { if (path.size() > 0 && path[0] == kPathSep) return true; if (path.size() > 2 && path[1] == ':' && path[2] == kPathSep) return true; return false; } // -------------------------------------------------------------------------------------------------------- bool kFileExists ( const string & path ) { #ifndef WIN32 int fd = open (kFileSubstitutePath(path).c_str(), O_RDONLY | O_NONBLOCK); if (fd >= 0) { close(fd); return true; } return false; #else DWORD dwAttr = GetFileAttributes(path.c_str()); if (dwAttr == 0xffffffff) return false; else return true; #endif } // -------------------------------------------------------------------------------------------------------- bool kFileIsFile ( const string & path ) { if (kFileExists(path) == false) return false; return !kFileIsDir(path); } // -------------------------------------------------------------------------------------------------------- bool kFileIsImageFile ( const string & filename ) { if (kFileIsFile(filename) == false) { return false; } string suffix = kFileSuffix(filename); if (suffix == "tga") return true; if (suffix == "tif") return true; if (suffix == "jpg") return true; if (suffix == "png") return true; if (suffix == "gif") return true; if (suffix == "bmp") return true; if (suffix == "pcx") return true; if (suffix == "xcf") return true; if (suffix == "lbm") return true; if (suffix == "xpm") return true; if (suffix == "tiff") return true; return false; } // -------------------------------------------------------------------------------------------------------- bool kFileIsDir ( const string & path ) { #ifdef WIN32 return ((GetFileAttributes(path.c_str()) & FILE_ATTRIBUTE_DIRECTORY) != 0); #else string filePath = kFileSubstitutePath(path); if (kFileExists(filePath) == false) return false; bool isDir = false; struct stat sb; int fd = open (filePath.c_str(), O_RDONLY | O_NONBLOCK); if (fstat(fd, &sb) != -1) { isDir = (sb.st_mode & S_IFDIR); } else { KConsole::printError(kStringPrintf("file error:\nunable to read stats of file\n'%s'", filePath.c_str())); } close(fd); return isDir; #endif } // -------------------------------------------------------------------------------------------------------- string kFileAbsPathName ( const string & path ) { string native = kFileNativePath(path); #ifdef WIN32 char buffer[MAX_PATH]; DWORD result = GetFullPathName(native.c_str(), MAX_PATH, buffer, NULL); if (result > 0 && result < MAX_PATH) { return string(buffer); } return ""; #else if (native.size() == 0) return ""; string filePath = kFileSubstitutePath(native); if (kFileExists(filePath) == false) return ""; char buffer[MAXPATHLEN+1]; char * result = realpath(filePath.c_str(), buffer); if (result) return result; return ""; #endif } // -------------------------------------------------------------------------------------------------------- string kFileSuffix ( const string & path ) { unsigned int lastDotPos = path.rfind("."); unsigned int lastSlashPos = path.rfind(kPathSep); if (lastDotPos < path.size() - 1 && (lastDotPos > lastSlashPos || lastSlashPos == string::npos)) { return path.substr(lastDotPos+1); } return ""; } // -------------------------------------------------------------------------------------------------------- string kFileDirName ( const string & path ) { string native = kFileNativePath(path); unsigned int lastSlashPos = native.rfind(kPathSep); if (lastSlashPos < native.size()) { return native.substr(0, lastSlashPos+1); } return string(".") + kPathSep; } // -------------------------------------------------------------------------------------------------------- string kFileBaseName ( const string & path, bool removeSuffix ) { string native = kFileNativePath(path); string baseName = native; unsigned int lastSlashPos = native.rfind(kPathSep); if (lastSlashPos < native.size() - 1) { baseName = native.substr(lastSlashPos+1); } else if (lastSlashPos == native.size() - 1) { return ""; } if (removeSuffix) { string suffix = kFileSuffix(baseName); baseName = baseName.substr(0, baseName.size()-suffix.size()-1); } return baseName; } // -------------------------------------------------------------------------------------------------------- bool kFileGetDirEntries ( const string & path, vector & entries, bool listDotFiles ) { string dirPath = kFileAbsPathName((path == "") ? "." : path); //(path == "") ? "." : path; if (kFileIsDir(dirPath) == false) return false; #ifdef WIN32 WIN32_FIND_DATA FileData; HANDLE hSearch; bool finished = false; hSearch = FindFirstFile((dirPath + "\\*").c_str(), &FileData); if (hSearch == INVALID_HANDLE_VALUE) { return false; } while (!finished) { if (listDotFiles || FileData.cFileName[0] != '.') { entries.push_back(string(FileData.cFileName)); } if (!FindNextFile(hSearch, &FileData)) { finished = TRUE; } } // Close the search handle. FindClose(hSearch); return true; #else int fd = open (dirPath.c_str(), O_RDONLY | O_NONBLOCK); struct stat sb; long basep; char * entry; if (fstat(fd, &sb) == -1) { KConsole::printError(kStringPrintf ("file error:\nunable to read stats of directory\n'%s'", path.c_str())); close (fd); return false; } entry = (char*)malloc(sb.st_blksize); if (entry == NULL) { KConsole::printError(kStringPrintf ("file error:\nunable to allocate memory for directory entries\n'%s'", path.c_str())); close(fd); return false; } int bytesRead; while ((bytesRead = getdirentries(fd, entry, sb.st_blksize, &basep)) > 0) { int pos = 0; while (pos < bytesRead) { struct dirent * entryPtr = (struct dirent *)(entry+pos); string filename = entryPtr->d_name; if ((listDotFiles == false && filename[0] == '.') || filename == "." || filename == ".." || (filename == "dev" && dirPath[0] == kPathSep)) { } else { entries.push_back(filename); } pos += entryPtr->d_reclen; } } free (entry); close(fd); return true; #endif } // -------------------------------------------------------------------------------------------------------- string kFileReadStringFromFile ( const string & filename, unsigned int numCharacters ) { if (filename == "") return ""; string filePath = kFileSubstitutePath(filename); string xml; FILE * file = fopen (filePath.c_str(), "r"); if (file == NULL) { KConsole::printError(kStringPrintf("could not open file '%s'\n", filePath.c_str())); return ""; } unsigned int charactersRead = 0; char character; while ((numCharacters == 0 || charactersRead < numCharacters) && fread (&character, sizeof(char), 1, file) != 0) { xml += character; charactersRead++; } if (ferror(file)) { KConsole::printError(kStringPrintf("error reading from file '%s'", filePath.c_str())); fclose (file); return ""; } return xml; } // -------------------------------------------------------------------------------------------------------- bool kFileWriteStringToFile ( const string & xml, const string & filename ) { string filePath = kFileSubstitutePath(filename); FILE * file = fopen (filePath.c_str(), "w+"); if (file == NULL) { KConsole::printError (kStringPrintf("could not open file '%s'", filePath.c_str())); return false; } if (fwrite (xml.c_str(), xml.size(), sizeof(char), file) == 0) { KConsole::printError (kStringPrintf("could not write to file '%s'", filePath.c_str())); if (file) fclose (file); return false; } fclose (file); return true; } kiki/kodilib/src/tools/KFileTools.h0000666000000000000000000000235610070562132016241 0ustar rootroot/* * KFileTools.h * kodisein */ #ifndef __KFileTools #define __KFileTools #pragma warning(disable:4786) #include #include using namespace std; extern const char kPathSep; // -------------------------------------------------------------------------------------------------------- string kFileSubstitutePath ( const string & ); string kFileGetCurrentPath (); string kFileNativePath ( const string & ); bool kFileIsImageFile ( const string & ); bool kFileHasParent ( const string & ); bool kFileIsAbsPath ( const string & ); bool kFileExists ( const string & ); bool kFileIsFile ( const string & ); bool kFileIsDir ( const string & ); string kFileAbsPathName ( const string & ); string kFileSuffix ( const string & ); string kFileDirName ( const string & ); string kFileBaseName ( const string &, bool = false ); bool kFileGetDirEntries ( const string &, vector &, bool = false ); string kFileReadStringFromFile ( const string &, unsigned int = 0 ); bool kFileWriteStringToFile ( const string &, const string & ); string kFileJoinPaths ( const string &, const string & ); string kFileNativePath ( const string & ); #endifkiki/kodilib/src/tools/KIncludeTools.h0000666000000000000000000000077410070562132016747 0ustar rootroot/* * KIncludeTools.h * kodisein */ #ifndef __KIncludeTools #define __KIncludeTools #ifdef WIN32 #pragma warning ( disable : 4800 4305 4267 ) // Disable warnings #endif #ifdef K_INCLUDE_GLUT # if defined(__APPLE__) && defined(__MACH__) || defined(_WIN32) # include # else # include # endif #endif #ifdef K_INCLUDE_GLU # if defined(__APPLE__) && defined(__MACH__) # include # else # include # endif #endif #endif kiki/kodilib/src/tools/KIntrospection.cpp0000666000000000000000000000320407644705703017545 0ustar rootroot/* * KIntrospection.cpp * kodisein */ #include "KIntrospection.h" // -------------------------------------------------------------------------------------------------------- bool KClassInfo::canCastTo( const KClassInfo * cip ) const { if (sameClass(cip)) return true; return (hasBase(cip)); } // -------------------------------------------------------------------------------------------------------- bool KClassInfo::hasBase ( const KClassInfo * cip ) const { KClassInfo ** b = (KClassInfo **)bases; if (!b) return false; for (KClassInfo * p = *b; p != 0; p = *(++b)) { if (p->sameClass(cip)) return true; if (p->hasBase(cip)) return true; } return false; } // -------------------------------------------------------------------------------------------------------- bool KClassInfo::hasDirectBase ( const KClassInfo * cip ) const { KClassInfo ** b = (KClassInfo **)bases; if (!b) return false; for (KClassInfo * p = *b; p != 0; p = *(++b)) { if (p->sameClass(cip)) return true; } return false; } // -------------------------------------------------------------------------------------------------------- void KClassInfo::getHierarchy ( std::string & hierarchy ) const { KClassInfo ** b = (KClassInfo **)bases; hierarchy += "["; hierarchy += getName(); hierarchy + " "; if (!b) { hierarchy += "]"; return; } for (KClassInfo * p = *b; p != 0; p = *(++b)) { hierarchy += "->"; p->getHierarchy(hierarchy); } hierarchy += "]"; } kiki/kodilib/src/tools/KIntrospection.h0000666000000000000000000000653207644705703017221 0ustar rootroot/* * KIntrospection.h * kodisein */ #ifndef __KIntrospection #define __KIntrospection #ifdef WIN32 #pragma warning ( disable : 4800 4305 4267 ) // Disable warnings #endif #include // -------------------------------------------------------------------------------------------------------- class KClassInfo { const char * name; const KClassInfo ** bases; public: KClassInfo (const char * n, const KClassInfo ** b) : name(n), bases(b) {} const char * getName() const { return name; } void getHierarchy( std::string & ) const; bool canCastTo( const KClassInfo * ) const; bool hasBase( const KClassInfo * ) const; bool hasDirectBase( const KClassInfo * ) const; bool sameClass( const KClassInfo * cip ) const { return(this==cip||strcmp(name,cip->name)==0);} }; // -------------------------------------------------------------------------------------------------------- class KClassId { private: const KClassInfo * class_id; public: KClassId(const KClassInfo * cid) : class_id(cid) {} const KClassInfo * getClassInfo () const { return class_id; } bool isEmpty() const { return class_id == NULL; } int operator==(KClassId i) const { return class_id->sameClass(i.class_id); } int operator!=(KClassId i) const { return !class_id->sameClass(i.class_id); } int operator>=(KClassId i) const { return class_id->canCastTo(i.class_id); } int operator<=(KClassId i) const { return i.class_id->canCastTo(class_id); } int operator< (KClassId i) const { return i.class_id->hasBase(class_id); } int operator> (KClassId i) const { return class_id->hasBase(i.class_id); } }; #define INTROSPECTION \ public: \ static const KClassInfo class_info; \ virtual const KClassId getClassId() const { return &class_info; }; \ static const KClassId classId() { return &class_info; } \ const char * getClassName () const { return getClassId().getClassInfo()->getName(); } \ private: #define INTROSPECTION_BASE_LIST(className) \ static const KClassInfo * className ## BaseList[] = { 0 }; #define INTROSPECTION_BASE_LIST1(className,base1) \ static const KClassInfo * className ## BaseList[] = { &base1::class_info, 0 }; #define INTROSPECTION_BASE_LIST2(className,base1,base2) \ static const KClassInfo * className ## BaseList[] = { &base1::class_info, &base2::class_info, 0 }; #define INTROSPECTION_BASE_LIST3(className,base1,base2,base3) \ static const KClassInfo * className ## BaseList[] = \ { &base1::class_info, &base2::class_info, &base3::class_info, 0 }; #define CLASS_INFO_DEFINITION(className) \ const KClassInfo className::class_info(#className, className ## BaseList); #define KDL_CLASS_INTROSPECTION(className) \ INTROSPECTION_BASE_LIST(className) CLASS_INFO_DEFINITION(className) #define KDL_CLASS_INTROSPECTION_1(className,base1) \ INTROSPECTION_BASE_LIST1(className,base1) CLASS_INFO_DEFINITION(className) #define KDL_CLASS_INTROSPECTION_2(className,base1,base2) \ INTROSPECTION_BASE_LIST2(className,base1,base2) CLASS_INFO_DEFINITION(className) #define KDL_CLASS_INTROSPECTION_3(className,base1,base2,base3) \ INTROSPECTION_BASE_LIST3(className,base1,base2,base3) CLASS_INFO_DEFINITION(className) #endif kiki/kodilib/src/tools/KKeySymbols.h0000666000000000000000000001673307644705703016466 0ustar rootroot// // KKeySymbols.h // kodisein #ifndef __KKeySymbols #define __KKeySymbols static char *KDL_KEY_ICON_META[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".###.....###.", "#...#...#...#", "#...#...#...#", "#...#...#...#", ".###########.", "....#...#....", "....#...#....", "....#...#....", ".###########.", "#...#...#...#", "#...#...#...#", "#...#...#...#", ".###.....###.", }; static char *KDL_KEY_ICON_ALT[] = { // width height ncolors chars_per_pixel "17 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".................", ".................", "..........#######", ".........########", "........###......", ".......###.......", "......###........", ".....###.........", "....###..........", "######...########", "#####...#########", ".................", ".................", }; static char *KDL_KEY_ICON_CTRL[] = { // width height ncolors chars_per_pixel "11 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...........", "...######..", "..#......#.", ".#..####..#", "#..#....##.", "#.#........", "#.#........", "#.#........", "#.#........", "#..#....##.", ".#..####..#", "..#......#.", "...######..", }; static char *KDL_KEY_ICON_SHIFT[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...#######...", "...#.....#...", "...#.....#...", "...#.....#...", "...#.....#...", "...#.....#...", "####.....####", ".#.........#.", "..#.......#..", "...#.....#...", "....#...#....", ".....#.#.....", "......#......", }; static char *KDL_KEY_ICON_RETURN[] = { // width height ncolors chars_per_pixel "17 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...##............", "..###............", ".###.............", "###############..", "################.", ".###..........###", "..###..........##", "...##..........##", "...............##", "..............###", "...........#####.", "...........####..", ".................", }; static char *KDL_KEY_ICON_ENTER[] = { // width height ncolors chars_per_pixel "11 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...........", "...........", "##.......##", "###.....###", ".###...###.", "..###.###..", "...#####...", "....###....", ".....#.....", "###########", "###########", "...........", "...........", }; static char *KDL_KEY_ICON_UP[] = { // width height ncolors chars_per_pixel "12 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".....##.....", ".....##.....", ".....##.....", ".....##.....", ".....##.....", ".....##.....", "##...##...##", "###..##..###", ".###.##.###.", "..########..", "...######...", "....####....", ".....##.....", }; static char *KDL_KEY_ICON_DOWN[] = { // width height ncolors chars_per_pixel "12 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".....##.....", "....####....", "...######...", "..########..", ".###.##.###.", "###..##..###", "##...##...##", ".....##.....", ".....##.....", ".....##.....", ".....##.....", ".....##.....", ".....##.....", }; static char *KDL_KEY_ICON_RIGHT[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", "......##.....", "......###....", ".......###...", "........###..", ".........###.", "#############", "#############", ".........###.", "........###..", ".......###...", "......###....", "......##.....", }; static char *KDL_KEY_ICON_LEFT[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".....##......", "....###......", "...###.......", "..###........", ".###.........", "#############", "#############", ".###.........", "..###........", "...###.......", "....###......", ".....##......", }; static char *KDL_KEY_ICON_HOME[] = { // width height ncolors chars_per_pixel "11 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...........", ".........##", "........###", ".......###.", "#.....###..", "##...###...", "##..###....", "##.###.....", "#####......", "####.......", "#######....", "########...", "...........", }; static char *KDL_KEY_ICON_END[] = { // width height ncolors chars_per_pixel "11 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...........", "...########", "....#######", ".......####", "......#####", ".....###.##", "....###..##", "...###...##", "..###.....#", ".###.......", "###........", "##.........", "...........", }; static char *KDL_KEY_ICON_PAGEUP[] = { // width height ncolors chars_per_pixel "12 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".....##.....", "...######...", "...######...", ".....##.....", "...######...", "...######...", "##...##...##", "###..##..###", ".###.##.###.", "..########..", "...######...", "....####....", ".....##.....", }; static char *KDL_KEY_ICON_PAGEDOWN[] = { // width height ncolors chars_per_pixel "12 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".....##.....", "....####....", "...######...", "..########..", ".###.##.###.", "###..##..###", "##...##...##", "...######...", "...######...", ".....##.....", "...######...", "...######...", ".....##.....", }; /* static char *KDL_KEY_ICON_CAPSLOCK[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "...#######...", "...#.....#...", "...#######...", ".............", "...#######...", "...#.....#...", "####.....####", ".#.........#.", "..#.......#..", "...#.....#...", "....#...#....", ".....#.#.....", "......#......", }; */ static char *KDL_KEY_ICON_BACKSPACE[] = { // width height ncolors chars_per_pixel "19 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".....##############", "....###############", "...###...........##", "..###...##...##..##", ".###....###.###..##", "###......#####...##", "##........###....##", "###......#####...##", ".###....###.###..##", "..###...##...##..##", "...###...........##", "....###############", ".....##############", }; static char *KDL_KEY_ICON_DELETE[] = { // width height ncolors chars_per_pixel "19 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "##############.....", "###############....", "##...........###...", "##..##...##...###..", "##..###.###....###.", "##...#####......###", "##....###........##", "##...#####......###", "##..###.###....###.", "##..##...##...###..", "##...........###...", "###############....", "##############.....", }; static char *KDL_KEY_ICON_TAB[] = { // width height ncolors chars_per_pixel "17 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".................", "........##.....##", "........###....##", ".........###...##", "..........###..##", "...........###.##", "#################", "#################", "...........###.##", "..........###..##", ".........###...##", "........###....##", "........##.....##", }; static char *KDL_KEY_ICON_KP[] = { // width height ncolors chars_per_pixel "4 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "....", ".###", ".#.#", ".###", "....", ".###", ".#.#", ".###", "....", ".###", ".#.#", ".###", "....", }; #endif kiki/kodilib/src/tools/KKeyTools.cpp0000666000000000000000000004020007644705703016453 0ustar rootroot/* * KKeyTools.cpp * kodisein */ #include "KKeyTools.h" #include "KStringTools.h" #include "KTools.h" #include #define SDLLastModSym 17 #define KDL_MOD_ICON_WIDTH 13 #define KDL_MOD_ICON_HEIGHT 13 #define KDL_MOD_ICON_SPACING 2 #define KDL_MOD_KEY_SPACING 5 #define KDL_MENU_CHARACTER_WIDTH 9 #define KDL_MENU_CHARACTER_HEIGHT 15 #include "KKeySymbols.h" const char * SDLKeyNames[] = { "FIRST", "", "", "", "", "", "", "", "BACKSPACE", "TAB", // 9 "", "", "CLEAR", "RETURN", // 13 "", "", "", "", "", "PAUSE", "RETURN", // 20 "", "", "", "", "", "", "ESCAPE", // 27 "", "", "", "", "SPACE", // 32 "EXCLAIM", "QUOTEDBL", "HASH", "DOLLAR", "", "AMPERSAND", "QUOTE", "LEFTPAREN", "RIGHTPAREN", "ASTERISK", "PLUS", "COMMA", "MINUS", "PERIOD", "SLASH", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "COLON", "SEMICOLON", "LESS", "EQUALS", "GREATER", "QUESTION", "AT", // skip uppercase letters 64 "", "", "", "", "", "", // 70 "", "", "", "", "", "", "", "", "", "", // 80 "", "", "", "", "", "", "", "", "", "", // 90 "LEFTBRACKET", "BACKSLASH", "RIGHTBRACKET", "CARET", "UNDERSCORE", "BACKQUOTE", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", // 122 "", "", "", "", "DELETE", // end of ASCII mapped keysyms 127 "", "", "", // 130 "", "", "", "", "", "", "", "", "", "", // 140 "", "", "", "", "", "", "", "", "", "", // 150 "", "", "", "", "", "", "", "", "", "WORLD0", // international keyboard syms 160 "WORLD1", "WORLD2", "WORLD3", "WORLD4", "WORLD5", "WORLD6", "WORLD7", "WORLD8", "WORLD9", "WORLD10", "WORLD11", "WORLD12", "WORLD13", "WORLD14", "WORLD15", "WORLD16", "WORLD17", "WORLD18", "WORLD19", "WORLD20", "WORLD21", "WORLD22", "WORLD23", "WORLD24", "WORLD25", "WORLD26", "WORLD27", "WORLD28", "WORLD29", "WORLD30", "WORLD31", "WORLD32", "WORLD33", "WORLD34", "WORLD35", "WORLD36", "WORLD37", "WORLD38", "WORLD39", "WORLD40", "WORLD41", "WORLD42", "WORLD43", "WORLD44", "WORLD45", "WORLD46", "WORLD47", "WORLD48", "WORLD49", "WORLD50", "WORLD51", "WORLD52", "WORLD53", "WORLD54", "WORLD55", "WORLD56", "WORLD57", "WORLD58", "WORLD59", "WORLD60", "WORLD61", "WORLD62", "WORLD63", "WORLD64", "WORLD65", "WORLD66", "WORLD67", "WORLD68", "WORLD69", "WORLD70", "WORLD71", "WORLD72", "WORLD73", "WORLD74", "WORLD75", "WORLD76", "WORLD77", "WORLD78", "WORLD79", "WORLD80", "WORLD81", "WORLD82", "WORLD83", "WORLD84", "WORLD85", "WORLD86", "WORLD87", "WORLD88", "WORLD89", "WORLD90", "WORLD91", "WORLD92", "WORLD93", "WORLD94", "WORLD95", // numeric keypad 256 "KP0", "KP1", "KP2", "KP3", "KP4", "KP5", "KP6", "KP7", "KP8", "KP9", "KPPERIOD", "KPDIVIDE", "KPMULTIPLY", "KPMINUS", "KPPLUS", "KPENTER", "KPEQUALS", // 272 // arrows + home/end pad 273 "UP", "DOWN", "RIGHT", "LEFT", "INSERT", "HOME", "END", "PAGEUP", "PAGEDOWN", // function keys 282 "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", // 296 "", "", "", // key state modifier keys 300 "NUMLOCK", "CAPSLOCK", "SCROLLOCK", "SHIFT", "SHIFT", "CTRL", "CTRL", "ALT", "ALT", "META", "META", "SUPER", // left "Windows" key "SUPER", // right "Windows" key "MODE", // "Alt Gr" key "COMPOSE", // multi-key compose key "HELP", "PRINT", "SYSREQ", "BREAK", "MENU", "POWER", // power Macintosh power key "EURO", // some european keyboards "UNDO", // atari keyboard has Undo "LAST" // 323 }; const char * SDLModNames[] = { "NONE", "SHIFT", "CTRL", "ALT", "META", "LSHIFT", "RSHIFT", "LCTRL", "RCTRL", "LALT", "RALT", "LMETA", "RMETA", "NUM", "CAPS", "MODE", "RESERVED" }; const int SDLModNameMapping[] = { KMOD_NONE, KMOD_SHIFT, KMOD_CTRL, KMOD_ALT, KMOD_META, KMOD_LSHIFT, KMOD_RSHIFT, KMOD_LCTRL, KMOD_RCTRL, KMOD_LALT, KMOD_RALT, KMOD_LMETA, KMOD_RMETA, KMOD_NUM, KMOD_CAPS, KMOD_MODE, KMOD_RESERVED }; // -------------------------------------------------------------------------------------------------------- int kKeyGetDisplayWidthForPureKey ( const std::string & keyName ) { SDLKey keySym = kKeyGetSymForSymName(keyName); if (keySym > 32 && keySym < 127) // ascii characters { return KDL_MENU_CHARACTER_WIDTH; } else if (keySym >= 256 && keySym <= 272) // key pad keys { // display KP symbol and character if (keySym == SDLK_KP_ENTER) return (atoi(KDL_KEY_ICON_ENTER[0])); int width = atoi(KDL_KEY_ICON_KP[0]); return (width + KDL_MENU_CHARACTER_WIDTH); } switch (keySym) { case SDLK_BACKSPACE: return atoi(KDL_KEY_ICON_BACKSPACE[0]); case SDLK_TAB: return atoi(KDL_KEY_ICON_TAB[0]); case SDLK_UP: return atoi(KDL_KEY_ICON_UP[0]); case SDLK_DOWN: return atoi(KDL_KEY_ICON_DOWN[0]); case SDLK_LEFT: return atoi(KDL_KEY_ICON_LEFT[0]); case SDLK_RIGHT: return atoi(KDL_KEY_ICON_RIGHT[0]); case SDLK_PAGEUP: return atoi(KDL_KEY_ICON_PAGEUP[0]); case SDLK_PAGEDOWN: return atoi(KDL_KEY_ICON_PAGEDOWN[0]); case SDLK_DELETE: return atoi(KDL_KEY_ICON_DELETE[0]); case SDLK_HOME: return atoi(KDL_KEY_ICON_HOME[0]); case SDLK_END: return atoi(KDL_KEY_ICON_END[0]); case SDLK_RETURN: return atoi(KDL_KEY_ICON_RETURN[0]); case SDLK_KP_ENTER: return atoi(KDL_KEY_ICON_ENTER[0]); default: return KDL_MENU_CHARACTER_WIDTH * keyName.length(); } return 0; } // -------------------------------------------------------------------------------------------------------- int kKeyGetDisplayWidthForModifier ( const std::string & modName ) { switch (modName[0]) { case 'M': // META (APPLE) return atoi(KDL_KEY_ICON_META[0]); case 'S': // SHIFT return atoi(KDL_KEY_ICON_SHIFT[0]); case 'A': // ALT return atoi(KDL_KEY_ICON_ALT[0]); case 'C': // CTRL return atoi(KDL_KEY_ICON_CTRL[0]); } return 0; } // -------------------------------------------------------------------------------------------------------- int kKeyGetDisplayWidthForKey ( const std::string & keyName ) { unsigned int keyPos = keyName.find('_', 0); if (keyPos == std::string::npos) { return kKeyGetDisplayWidthForPureKey(keyName) + KDL_MOD_KEY_SPACING; } std::string mod = keyName.substr(0, keyPos); std::string key = keyName.substr(keyPos+1); int width = 0; // width of the modifier symbols std::vector modNames = kStringGetComponents(mod, "+"); std::vector::iterator iter = modNames.begin(); while (iter != modNames.end()) { width += kKeyGetDisplayWidthForModifier ((*iter)); width += KDL_MOD_ICON_SPACING; iter++; } // width of the pure key width += kKeyGetDisplayWidthForPureKey (key); width += KDL_MOD_KEY_SPACING; return width; } // -------------------------------------------------------------------------------------------------------- int kKeyGetDisplayWidthForKeySequence ( const std::string & shortcut ) { int width = 0; std::vector keyNames = kStringGetComponents(shortcut, " "); std::vector::iterator iter = keyNames.begin(); while (iter != keyNames.end()) { width += kKeyGetDisplayWidthForKey((*iter)); // the key width width += KDL_MOD_KEY_SPACING; // plus the dividing space iter++; } return width; } // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- int kKeyDisplayModifier ( const std::string & modName, const KPosition & pos ) { KPosition iconPos(pos.x, pos.y - KDL_MOD_ICON_SPACING); switch (modName[0]) { case 'M': // META (APPLE) return kDisplayXPMIcon(KDL_KEY_ICON_META, iconPos); case 'S': // SHIFT return kDisplayXPMIcon(KDL_KEY_ICON_SHIFT, iconPos); case 'A': // ALT return kDisplayXPMIcon(KDL_KEY_ICON_ALT, iconPos); case 'C': // CTRL return kDisplayXPMIcon(KDL_KEY_ICON_CTRL, iconPos); } return 0; } // -------------------------------------------------------------------------------------------------------- int kKeyDisplayPureKey ( const std::string & keyName, const KPosition & pos ) { KPosition start = pos; KPosition iconPos(pos.x, pos.y - KDL_MOD_ICON_SPACING); SDLKey keySym = kKeyGetSymForSymName(keyName); if (keySym > 32 && keySym < 127) // ascii characters { kDisplayString(std::string(1, keySym), pos); return KDL_MENU_CHARACTER_WIDTH; } else if (keySym >= 256 && keySym <= 272) // key pad keys { if (keySym == SDLK_KP_ENTER) { return (start.x + kDisplayXPMIcon(KDL_KEY_ICON_ENTER, iconPos)); } // display KP symbol and character start.x += kDisplayXPMIcon(KDL_KEY_ICON_KP, iconPos) + KDL_MOD_ICON_SPACING; switch (keySym) { case SDLK_KP0: kDisplayString("0", start); break; case SDLK_KP1: kDisplayString("1", start); break; case SDLK_KP2: kDisplayString("2", start); break; case SDLK_KP3: kDisplayString("3", start); break; case SDLK_KP4: kDisplayString("4", start); break; case SDLK_KP5: kDisplayString("5", start); break; case SDLK_KP6: kDisplayString("6", start); break; case SDLK_KP7: kDisplayString("7", start); break; case SDLK_KP8: kDisplayString("8", start); break; case SDLK_KP9: kDisplayString("9", start); break; case SDLK_KP_PERIOD: kDisplayString(".", start); break; case SDLK_KP_DIVIDE: kDisplayString("/", start); break; case SDLK_KP_MULTIPLY: kDisplayString("*", start); break; case SDLK_KP_MINUS: kDisplayString("-", start); break; case SDLK_KP_PLUS: kDisplayString("+", start); break; case SDLK_KP_EQUALS: kDisplayString("+", start); break; default: break; } return (start.x + KDL_MENU_CHARACTER_WIDTH); } switch (keySym) { case SDLK_BACKSPACE: return kDisplayXPMIcon(KDL_KEY_ICON_BACKSPACE, iconPos); case SDLK_TAB: return kDisplayXPMIcon(KDL_KEY_ICON_TAB, iconPos); case SDLK_UP: return kDisplayXPMIcon(KDL_KEY_ICON_UP, iconPos); case SDLK_DOWN: return kDisplayXPMIcon(KDL_KEY_ICON_DOWN, iconPos); case SDLK_LEFT: return kDisplayXPMIcon(KDL_KEY_ICON_LEFT, iconPos); case SDLK_RIGHT: return kDisplayXPMIcon(KDL_KEY_ICON_RIGHT, iconPos); case SDLK_PAGEUP: return kDisplayXPMIcon(KDL_KEY_ICON_PAGEUP, iconPos); case SDLK_PAGEDOWN: return kDisplayXPMIcon(KDL_KEY_ICON_PAGEDOWN, iconPos); case SDLK_DELETE: return kDisplayXPMIcon(KDL_KEY_ICON_DELETE, iconPos); case SDLK_HOME: return kDisplayXPMIcon(KDL_KEY_ICON_HOME, iconPos); case SDLK_END: return kDisplayXPMIcon(KDL_KEY_ICON_END, iconPos); case SDLK_RETURN: return kDisplayXPMIcon(KDL_KEY_ICON_RETURN, iconPos); default: kDisplayString(keyName, pos); return KDL_MENU_CHARACTER_WIDTH * keyName.length(); } return 0; } // -------------------------------------------------------------------------------------------------------- int kKeyDisplayKey ( const std::string & keyName, const KPosition & pos ) { KPosition start = pos; unsigned int keyPos = keyName.find('_', 0); if (keyPos == std::string::npos) { return start.x + kKeyDisplayPureKey(keyName, start) + KDL_MOD_KEY_SPACING; } std::string mod = keyName.substr(0, keyPos); std::string key = keyName.substr(keyPos+1); // display the modifier symbols std::vector modNames = kStringGetComponents(mod, "+"); std::vector::iterator iter = modNames.begin(); while (iter != modNames.end()) { start.x += kKeyDisplayModifier ((*iter), start); start.x += KDL_MOD_ICON_SPACING; iter++; } // display the pure key symbol start.x += kKeyDisplayPureKey (key, start); start.x += KDL_MOD_KEY_SPACING; return start.x; } // -------------------------------------------------------------------------------------------------------- void kKeyDisplayKeySequence ( const std::string & shortcut, const KPosition & pos ) { KPosition start = pos; std::vector keyNames = kStringGetComponents(shortcut, " "); std::vector::iterator iter = keyNames.begin(); while (iter != keyNames.end()) { start.x = kKeyDisplayKey((*iter), start); iter++; } } // -------------------------------------------------------------------------------------------------------- SDLKey kKeyGetSymForSymName ( const std::string & keyName ) { for (int i = SDLK_FIRST; i < SDLK_LAST; i++) { if (SDLKeyNames[i] == keyName) { return (SDLKey)i; } } return SDLK_LAST; } // -------------------------------------------------------------------------------------------------------- SDLMod kKeyGetModForModName ( const std::string & modName ) { if (modName == "") return KMOD_NONE; for (int i = 0; i < SDLLastModSym; i++) { if (SDLModNames[i] == modName) { return (SDLMod)SDLModNameMapping[i]; } } return KMOD_NONE; } // -------------------------------------------------------------------------------------------------------- SDL_keysym kKeyGetKeysymForKeyName ( const std::string & keyName ) { unsigned int pos = keyName.find('_'); std::string modString; std::string symString = keyName; SDL_keysym key; if (pos != std::string::npos) { modString = keyName.substr(0, pos); symString = keyName.substr(pos+1); } key.sym = kKeyGetSymForSymName (symString); key.mod = kKeyGetModForModName (modString); return key; } // -------------------------------------------------------------------------------------------------------- std::string kKeyGetNameForSym ( SDLKey keySym ) { return SDLKeyNames[keySym]; } // -------------------------------------------------------------------------------------------------------- std::string kKeyGetNameForMod ( int keyMod ) { for (int i = 0; i < SDLLastModSym; i++) { if (SDLModNameMapping[i] == keyMod) { return SDLModNames[i]; } } return SDLKeyNames[SDLLastModSym]; } // -------------------------------------------------------------------------------------------------------- std::string kKeyGetNameForKeysym ( SDL_keysym keySym ) { std::string keyName = kKeyGetNameForSym(keySym.sym); if (keySym.mod) { std::string modifierString; if (keySym.mod & KMOD_SHIFT) modifierString += kKeyGetNameForMod(KMOD_SHIFT) + "+"; if (keySym.mod & KMOD_CTRL) modifierString += kKeyGetNameForMod(KMOD_CTRL) + "+"; if (keySym.mod & KMOD_ALT) modifierString += kKeyGetNameForMod(KMOD_ALT) + "+"; if (keySym.mod & KMOD_META) modifierString += kKeyGetNameForMod(KMOD_META) + "+"; if (modifierString.size() > 0) { modifierString.erase(modifierString.size()-1); keyName = modifierString + "_" + keyName; } } return keyName; } kiki/kodilib/src/tools/KKeyTools.h0000666000000000000000000000202107644705703016117 0ustar rootroot/* * KKeyTools.h * kodisein */ #ifndef __KKeyTools #define __KKeyTools #include #include extern const char * SDLKeyNames[]; extern const char * SDLModNames[]; class KPosition; // -------------------------------------------------------------------------------------------------------- SDLKey kKeyGetSymForSymName ( const std::string & symName ); SDLMod kKeyGetModForModName ( const std::string & modName ); SDL_keysym kKeyGetKeysymForKeyName ( const std::string & keyName ); std::string kKeyGetNameForSym ( SDLKey keySym ); std::string kKeyGetNameForMod ( int keyMod ); std::string kKeyGetNameForKeysym ( SDL_keysym keySym ); int kKeyGetDisplayWidthForKeyName ( const std::string & keyName ); int kKeyGetDisplayWidthForKeySequence ( const std::string & shortcut ); int kKeyDisplayKey ( const std::string & keyName, const KPosition & pos ); void kKeyDisplayKeySequence ( const std::string & sequence, const KPosition & pos ); #endif kiki/kodilib/src/tools/KNotificationObject.cpp0000666000000000000000000002773707644705704020504 0ustar rootroot/* * KNotificationObject.cpp * kodisein */ #include "KNotificationObject.h" KDL_CLASS_INTROSPECTION (KObject) KDL_CLASS_INTROSPECTION (KNotificationObject) // -------------------------------------------------------------------------------------------------------- KNotificationObject::~KNotificationObject () { removeAllReceivers(); } // -------------------------------------------------------------------------------------------------------- KNamedReceiverCallbacks * KNotificationObject::getOrCreateNamedReceiverCallbacks ( int name ) { KNamedReceiverCallbacks * namedReceiverCallbacks = getNamedReceiverCallbacks (name); if (namedReceiverCallbacks == NULL) { namedReceiverCallbacks = new KNamedReceiverCallbacks(name); named_receiver_callbacks.push_back(namedReceiverCallbacks); } return namedReceiverCallbacks; } // -------------------------------------------------------------------------------------------------------- KNamedReceiverCallbacks * KNotificationObject::getNamedReceiverCallbacks ( int name ) const { std::vector::const_iterator iter = named_receiver_callbacks.begin(); while (iter != named_receiver_callbacks.end()) { if ((*iter)->name == name) { return (*iter); } iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::removeReceiverCallback ( KObject * rec, KCallbackPtr cbPtr ) { KNamedReceiverCallbacks * namedReceiverCallbacks = getNamedReceiverCallbacks(KDL_NOTIFICATION_TYPE_CALLBACK); if (namedReceiverCallbacks == NULL) return; // there is no receiver registered for callback std::vector::iterator iter = namedReceiverCallbacks->receiver_callbacks.begin(); while (iter != namedReceiverCallbacks->receiver_callbacks.end()) { if ((*iter)->receiver == rec && (*iter)->callback.callback_ptr == cbPtr) { delete (*iter); iter = namedReceiverCallbacks->receiver_callbacks.erase(iter); iter--; receivers_removed = true; } iter++; } } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::removeReceiver ( KObject * rec, int name ) { KNamedReceiverCallbacks * namedReceiverCallbacks = getNamedReceiverCallbacks(name); if (namedReceiverCallbacks == NULL) return; std::vector::iterator iter = namedReceiverCallbacks->receiver_callbacks.begin(); while (iter != namedReceiverCallbacks->receiver_callbacks.end()) { if ((*iter)->receiver == rec) { delete (*iter); iter = namedReceiverCallbacks->receiver_callbacks.erase(iter); iter--; receivers_removed = true; } iter++; } } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::removeReceiver ( KObject * rec ) { std::vector::iterator iter = named_receiver_callbacks.begin(); while (iter != named_receiver_callbacks.end()) { removeReceiver(rec, (*iter)->name); iter++; } } // -------------------------------------------------------------------------------------------------------- void removeReceiversInReceiverCallbackVector ( std::vector * receiverCallbacks ) { while (receiverCallbacks->empty() == false) { delete receiverCallbacks->back(); receiverCallbacks->pop_back(); } } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::removeReceivers ( int name ) { KNamedReceiverCallbacks * namedReceiverCallbacks = getNamedReceiverCallbacks(name); if (namedReceiverCallbacks) { while (namedReceiverCallbacks->receiver_callbacks.empty() == false) { delete namedReceiverCallbacks->receiver_callbacks.back(); namedReceiverCallbacks->receiver_callbacks.pop_back(); receivers_removed = true; } } } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::removeAllReceivers () { while (named_receiver_callbacks.empty() == false) { KNamedReceiverCallbacks * namedReceiverCallbacks = named_receiver_callbacks.back(); while (namedReceiverCallbacks->receiver_callbacks.empty() == false) { delete namedReceiverCallbacks->receiver_callbacks.back(); namedReceiverCallbacks->receiver_callbacks.pop_back(); } delete namedReceiverCallbacks; named_receiver_callbacks.pop_back(); receivers_removed = true; } } // -------------------------------------------------------------------------------------------------------- // is there any receiver with callback registered? bool KNotificationObject::hasCallback ( KCallbackPtr callback ) { KNamedReceiverCallbacks * namedReceiverCallbacks; namedReceiverCallbacks = getNamedReceiverCallbacks(KDL_NOTIFICATION_TYPE_CALLBACK); if (namedReceiverCallbacks == NULL) return false; std::vector::iterator iter = namedReceiverCallbacks->receiver_callbacks.begin(); while (iter != namedReceiverCallbacks->receiver_callbacks.end()) { if ((*iter)->callback.callback_ptr == callback) { return true; } iter++; } return false; } // -------------------------------------------------------------------------------------------------------- // is there any receiver registered? bool KNotificationObject::hasReceivers () const { for (int index = 0; index < (int)named_receiver_callbacks.size(); index++) { if (named_receiver_callbacks[index]->receiver_callbacks.size() != 0) { // found at least one receiver return true; } } // found no receiver for no notificationType return false; } // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- #define ADD_RECEIVER_CALLBACK(cbType, notificationType, cbPtr) \ void KNotificationObject::addReceiverCallback ( KObject * rec, cbType cb, int name ) \ { \ KNamedReceiverCallbacks * namedReceiverCallbacks = getOrCreateNamedReceiverCallbacks(name); \ KReceiverCallback * newReceiverCallback = new KReceiverCallback(notificationType, rec); \ newReceiverCallback->callback.cbPtr = cb; \ namedReceiverCallbacks->receiver_callbacks.push_back(newReceiverCallback); \ } #define SET_PROVIDER_CALLBACK(cbType, notificationType, cbPtr) \ void KNotificationObject::setProviderCallback ( KObject * rec, cbType cb, int name ) \ { \ KNamedReceiverCallbacks * namedReceiverCallbacks = getOrCreateNamedReceiverCallbacks(name); \ KReceiverCallback * newReceiverCallback = new KReceiverCallback(notificationType, rec); \ newReceiverCallback->callback.cbPtr = cb; \ namedReceiverCallbacks->receiver_callbacks.clear(); \ namedReceiverCallbacks->receiver_callbacks.push_back(newReceiverCallback); \ providerSet(); \ } #define NOTIFY_RECEIVERS(valueType, notificationType, cbPtr) \ void KNotificationObject::notifyReceivers ( valueType value, int name ) const \ { \ KNamedReceiverCallbacks * namedReceiverCallbacks = getNamedReceiverCallbacks(name); \ if (namedReceiverCallbacks == NULL) return; \ ((KNotificationObject*)this)->receivers_removed = false; \ std::vector::const_iterator iter = namedReceiverCallbacks->receiver_callbacks.begin(); \ while (iter != namedReceiverCallbacks->receiver_callbacks.end()) \ { \ if ((*iter)->type == notificationType) \ { \ (((*iter)->receiver)->*((*iter)->callback.cbPtr))(value); \ } \ if (receivers_removed) return; \ iter++; \ } \ } #define RECEIVE_VALUE(valueType, notificationType, cbPtr) \ bool KNotificationObject::receiveValue ( valueType * value, int name ) const \ { \ KNamedReceiverCallbacks * namedReceiverCallbacks = getNamedReceiverCallbacks(name); \ if (namedReceiverCallbacks == NULL) return false; \ if (namedReceiverCallbacks->receiver_callbacks.empty()) return false; \ KReceiverCallback * receiverCallback = namedReceiverCallbacks->receiver_callbacks[0]; \ if (receiverCallback->type != notificationType) return false; \ *value = ((receiverCallback->receiver)->*(receiverCallback->callback.cbPtr))(); \ return true; \ } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::notifyReceiver ( KReceiverCallback * recCbPtr ) const { ((recCbPtr->receiver)->*(recCbPtr->callback.callback_ptr))(); } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::notifyReceiversType ( int name ) const { KNamedReceiverCallbacks * namedReceiverCallbacks=getNamedReceiverCallbacks(name); if (namedReceiverCallbacks == NULL) return; ((KNotificationObject*)this)->receivers_removed = false; std::vector::iterator iter = namedReceiverCallbacks->receiver_callbacks.begin(); while (iter != namedReceiverCallbacks->receiver_callbacks.end()) { notifyReceiver(*iter); if (receivers_removed) return; iter++; } } // -------------------------------------------------------------------------------------------------------- void KNotificationObject::notifyReceivers () const { notifyReceiversType(KDL_NOTIFICATION_TYPE_CALLBACK); } ADD_RECEIVER_CALLBACK(KCallbackPtr, KDL_NOTIFICATION_TYPE_CALLBACK, callback_ptr) ADD_RECEIVER_CALLBACK(KSetDataPtr, KDL_NOTIFICATION_TYPE_SET_DATA, set_data_ptr) ADD_RECEIVER_CALLBACK(KSetFloatPtr, KDL_NOTIFICATION_TYPE_SET_FLOAT, set_float_ptr) ADD_RECEIVER_CALLBACK(KSetIntPtr, KDL_NOTIFICATION_TYPE_SET_INT, set_int_ptr) ADD_RECEIVER_CALLBACK(KSetBoolPtr, KDL_NOTIFICATION_TYPE_SET_BOOL, set_bool_ptr) ADD_RECEIVER_CALLBACK(KSetStringPtr, KDL_NOTIFICATION_TYPE_SET_STRING, set_string_ptr) ADD_RECEIVER_CALLBACK(KSetSizePtr, KDL_NOTIFICATION_TYPE_SET_SIZE, set_size_ptr) SET_PROVIDER_CALLBACK(KGetDataPtr, KDL_NOTIFICATION_TYPE_GET_DATA, get_data_ptr) SET_PROVIDER_CALLBACK(KGetFloatPtr, KDL_NOTIFICATION_TYPE_GET_FLOAT, get_float_ptr) SET_PROVIDER_CALLBACK(KGetIntPtr, KDL_NOTIFICATION_TYPE_GET_INT, get_int_ptr) SET_PROVIDER_CALLBACK(KGetBoolPtr, KDL_NOTIFICATION_TYPE_GET_BOOL, get_bool_ptr) SET_PROVIDER_CALLBACK(KGetStringPtr, KDL_NOTIFICATION_TYPE_GET_STRING, get_string_ptr) SET_PROVIDER_CALLBACK(KGetSizePtr, KDL_NOTIFICATION_TYPE_GET_SIZE, get_size_ptr) NOTIFY_RECEIVERS(void*, KDL_NOTIFICATION_TYPE_SET_DATA, set_data_ptr) NOTIFY_RECEIVERS(float, KDL_NOTIFICATION_TYPE_SET_FLOAT, set_float_ptr) NOTIFY_RECEIVERS(int, KDL_NOTIFICATION_TYPE_SET_INT, set_int_ptr) NOTIFY_RECEIVERS(bool, KDL_NOTIFICATION_TYPE_SET_BOOL, set_bool_ptr) NOTIFY_RECEIVERS(const std::string &, KDL_NOTIFICATION_TYPE_SET_STRING, set_string_ptr) NOTIFY_RECEIVERS(const KSize &, KDL_NOTIFICATION_TYPE_SET_SIZE, set_size_ptr) RECEIVE_VALUE(void*, KDL_NOTIFICATION_TYPE_GET_DATA, get_data_ptr) RECEIVE_VALUE(float, KDL_NOTIFICATION_TYPE_GET_FLOAT, get_float_ptr) RECEIVE_VALUE(int, KDL_NOTIFICATION_TYPE_GET_INT, get_int_ptr) RECEIVE_VALUE(bool, KDL_NOTIFICATION_TYPE_GET_BOOL, get_bool_ptr) RECEIVE_VALUE(std::string, KDL_NOTIFICATION_TYPE_GET_STRING, get_string_ptr) RECEIVE_VALUE(KSize, KDL_NOTIFICATION_TYPE_GET_SIZE, get_size_ptr) kiki/kodilib/src/tools/KNotificationObject.h0000666000000000000000000001455507644705704020143 0ustar rootroot/* * KNotificationObject.h * kodisein */ #ifndef __KNotificationObject #define __KNotificationObject #include "KIntrospection.h" #include "KVector.h" #include #define DEBUG_NOTIFICATION false // -------------------------------------------------------------------------------------------------------- class KObject { INTROSPECTION }; // -------------------------------------------------------------------------------------------------------- typedef void (KObject::*KCallbackPtr) (); typedef void (KObject::*KSetDataPtr) (void*); typedef void (KObject::*KSetFloatPtr) (float); typedef void (KObject::*KSetIntPtr) (int); typedef void (KObject::*KSetBoolPtr) (bool); typedef void (KObject::*KSetStringPtr) (const std::string &); typedef void (KObject::*KSetSizePtr) (const KSize &); typedef void * (KObject::*KGetDataPtr) (); typedef float (KObject::*KGetFloatPtr) (); typedef int (KObject::*KGetIntPtr) (); typedef bool (KObject::*KGetBoolPtr) () const; typedef std::string (KObject::*KGetStringPtr) (); typedef KSize (KObject::*KGetSizePtr) (); enum { KDL_NOTIFICATION_TYPE_CALLBACK, KDL_NOTIFICATION_TYPE_SET_DATA, KDL_NOTIFICATION_TYPE_GET_DATA, KDL_NOTIFICATION_TYPE_SET_FLOAT, KDL_NOTIFICATION_TYPE_GET_FLOAT, KDL_NOTIFICATION_TYPE_SET_INT, KDL_NOTIFICATION_TYPE_GET_INT, KDL_NOTIFICATION_TYPE_SET_BOOL, KDL_NOTIFICATION_TYPE_GET_BOOL, KDL_NOTIFICATION_TYPE_SET_STRING, KDL_NOTIFICATION_TYPE_GET_STRING, KDL_NOTIFICATION_TYPE_SET_SIZE, KDL_NOTIFICATION_TYPE_GET_SIZE, KDL_NOTIFICATION_TYPE_NOTIFICATION_END }; // -------------------------------------------------------------------------------------------------------- union KCallback { KCallbackPtr callback_ptr; KSetDataPtr set_data_ptr; KSetFloatPtr set_float_ptr; KSetIntPtr set_int_ptr; KSetBoolPtr set_bool_ptr; KSetStringPtr set_string_ptr; KSetSizePtr set_size_ptr; KGetDataPtr get_data_ptr; KGetFloatPtr get_float_ptr; KGetIntPtr get_int_ptr; KGetBoolPtr get_bool_ptr; KGetStringPtr get_string_ptr; KGetSizePtr get_size_ptr; }; // -------------------------------------------------------------------------------------------------------- struct KReceiverCallback { int type; KObject * receiver; KCallback callback; KReceiverCallback ( int t, KObject * r ) { type = t; receiver = r; } ~KReceiverCallback() { type=0; receiver=NULL; callback.callback_ptr=NULL; } }; // -------------------------------------------------------------------------------------------------------- struct KNamedReceiverCallbacks { int name; std::vector receiver_callbacks; KNamedReceiverCallbacks ( int n ) { name=n; } }; // -------------------------------------------------------------------------------------------------------- class KNotificationObject { INTROSPECTION protected: std::vector named_receiver_callbacks; KNamedReceiverCallbacks * getOrCreateNamedReceiverCallbacks ( int ); KNamedReceiverCallbacks * getNamedReceiverCallbacks ( int ) const; virtual void notifyReceiver ( KReceiverCallback * ) const; bool receivers_removed; public: KNotificationObject () {} virtual ~KNotificationObject (); void addReceiverCallback ( KObject *, KCallbackPtr, int = KDL_NOTIFICATION_TYPE_CALLBACK); void addReceiverCallback ( KObject *, KSetDataPtr, int = KDL_NOTIFICATION_TYPE_SET_DATA); void addReceiverCallback ( KObject *, KSetFloatPtr, int = KDL_NOTIFICATION_TYPE_SET_FLOAT); void addReceiverCallback ( KObject *, KSetIntPtr, int = KDL_NOTIFICATION_TYPE_SET_INT); void addReceiverCallback ( KObject *, KSetBoolPtr, int = KDL_NOTIFICATION_TYPE_SET_BOOL); void addReceiverCallback ( KObject *, KSetStringPtr, int = KDL_NOTIFICATION_TYPE_SET_STRING); void addReceiverCallback ( KObject *, KSetSizePtr, int = KDL_NOTIFICATION_TYPE_SET_SIZE); void setProviderCallback ( KObject *, KGetDataPtr, int = KDL_NOTIFICATION_TYPE_GET_DATA); void setProviderCallback ( KObject *, KGetFloatPtr, int = KDL_NOTIFICATION_TYPE_GET_FLOAT); void setProviderCallback ( KObject *, KGetIntPtr, int = KDL_NOTIFICATION_TYPE_GET_INT); void setProviderCallback ( KObject *, KGetBoolPtr, int = KDL_NOTIFICATION_TYPE_GET_BOOL); void setProviderCallback ( KObject *, KGetStringPtr, int = KDL_NOTIFICATION_TYPE_GET_STRING); void setProviderCallback ( KObject *, KGetSizePtr, int = KDL_NOTIFICATION_TYPE_GET_SIZE); void removeReceiver ( KObject *, int); void removeReceiver ( KObject * ); void removeReceivers ( int); void removeAllReceivers (); void removeReceiverCallback ( KObject *, KCallbackPtr ); virtual void providerSet () {} bool hasCallback ( KCallbackPtr ); void notifyReceiversType ( int = KDL_NOTIFICATION_TYPE_CALLBACK ) const; void notifyReceivers () const; void notifyReceivers ( void *, int = KDL_NOTIFICATION_TYPE_SET_DATA ) const; void notifyReceivers ( float, int = KDL_NOTIFICATION_TYPE_SET_FLOAT ) const; void notifyReceivers ( int, int = KDL_NOTIFICATION_TYPE_SET_INT ) const; void notifyReceivers ( bool, int = KDL_NOTIFICATION_TYPE_SET_BOOL ) const; void notifyReceivers ( const std::string &, int = KDL_NOTIFICATION_TYPE_SET_STRING ) const; void notifyReceivers ( const KSize &, int = KDL_NOTIFICATION_TYPE_SET_SIZE ) const; bool receiveValue ( void **, int = KDL_NOTIFICATION_TYPE_GET_DATA ) const; bool receiveValue ( float *, int = KDL_NOTIFICATION_TYPE_GET_FLOAT ) const; bool receiveValue ( int *, int = KDL_NOTIFICATION_TYPE_GET_INT ) const; bool receiveValue ( bool *, int = KDL_NOTIFICATION_TYPE_GET_BOOL ) const; bool receiveValue ( std::string *, int = KDL_NOTIFICATION_TYPE_GET_STRING ) const; bool receiveValue ( KSize *, int = KDL_NOTIFICATION_TYPE_GET_SIZE ) const; bool hasReceivers () const; }; #endif kiki/kodilib/src/tools/KStringTools.cpp0000666000000000000000000002136507646354665017215 0ustar rootroot/* * KStringTools.cpp * kodisein */ #include "KStringTools.h" #include "KVector.h" #include // INT_MAX #include // -------------------------------------------------------------------------------------------------------- void kStringInsertStringBehindTags ( std::string & str, const std::string & insertString, const std::string & tag ) { unsigned int oldPos = 0; while ((oldPos = str.find(tag, oldPos)) != std::string::npos) { oldPos += tag.size(); str.insert(oldPos, insertString); oldPos += insertString.size(); } } // -------------------------------------------------------------------------------------------------------- void kStringMerge ( std::string & str, const std::string & str2, const std::string & divider ) { if (str == "") str = str2; else if (str2 != "") str += divider + str2; } // -------------------------------------------------------------------------------------------------------- std::vector kStringGetComponents ( const std::string & str, const std::string & divider ) { std::vector components; unsigned int dividerLength = divider.size(); unsigned int oldpos = 0, pos; while ((pos = str.find(divider, oldpos)) != std::string::npos) { components.push_back(str.substr(oldpos, pos - oldpos)); oldpos = pos + dividerLength; } components.push_back(str.substr(oldpos)); return components; } // -------------------------------------------------------------------------------------------------------- void kStringReplace ( std::string & str, const std::string & toReplace, const std::string & replacement ) { unsigned int pos = 0, chars = toReplace.size(); while ((pos = str.find(toReplace, pos)) != std::string::npos) { str.replace(pos, chars, replacement); } } // -------------------------------------------------------------------------------------------------------- void kStringReplaceTabs ( std::string & str, unsigned int tabWidth ) { unsigned int tabPos; while ((tabPos = str.find('\t')) != std::string::npos) { unsigned int lastNewlinePos = str.rfind('\n', tabPos-1); unsigned int relPos = (lastNewlinePos == std::string::npos) ? tabPos : tabPos - lastNewlinePos; str.replace(tabPos, 1, std::string(tabWidth-(relPos % tabWidth), ' ')); } } // -------------------------------------------------------------------------------------------------------- std::string kStringGetSharedPrefix ( const std::vector & strings ) { if (strings.empty()) return ""; std::vector::const_iterator iter = strings.begin(); unsigned int maxlength = INT_MAX; while (iter != strings.end()) { maxlength = kMin(maxlength, iter->size()); iter++; } if (maxlength == 0) return ""; std::string prefix; unsigned int index = 0; while (index < maxlength) { iter = strings.begin(); char c = (*iter)[index]; iter++; while (iter != strings.end()) { if ((*iter)[index] != c) return prefix; iter++; } prefix += c; index++; } return prefix; } // -------------------------------------------------------------------------------------------------------- unsigned int kStringCountChars ( const std::string & str, char c ) { unsigned int count = 0; for (int i = 0; i < (int)str.size(); i++) { if (str[i] == c) count++; } return count; } // -------------------------------------------------------------------------------------------------------- unsigned int kStringNthCharPos ( const std::string & str, unsigned int n, char c ) { unsigned int loc = n, oloc = 0; while (n > 0 && (loc = str.find(c, oloc)) != std::string::npos) { n--; oloc = loc+1; } if (n > 0) return INT_MAX; return loc; } // -------------------------------------------------------------------------------------------------------- void kStringCropRows ( std::string & str, unsigned int rows ) { unsigned int lines = kStringRows(str); if (lines > rows) { unsigned int loc = kStringNthCharPos(str, (lines-rows), '\n'); str.erase(0, loc+1); } } // -------------------------------------------------------------------------------------------------------- void kStringCropCols ( std::string & str, unsigned int columns ) { unsigned int oloc = 0, nloc = 0; while ((nloc = str.find('\n', oloc)) != std::string::npos) { if ((nloc - oloc) > columns) { str.erase(oloc + columns, nloc - (oloc + columns)); nloc = oloc + columns; } oloc = nloc + 1; } nloc = (str.size() < nloc) ? str.size() : nloc; int d = nloc - (oloc + columns); if (d > 0) { str.erase(oloc + columns, d); } } // -------------------------------------------------------------------------------------------------------- unsigned int kStringCols ( const std::string & str ) { if (str.size() == 0) return 0; int oloc = 0, nloc; std::string substring; int maxlength = 0, length; while ((nloc = str.find('\n', oloc)) != (int)std::string::npos) { substring = str.substr(oloc, nloc - oloc); length = substring.size(); maxlength = (length > maxlength) ? length : maxlength; oloc = nloc + 1; } substring = str.substr(oloc); length = substring.size(); maxlength = (length > maxlength) ? length : maxlength; return maxlength; } // -------------------------------------------------------------------------------------------------------- unsigned int kStringRows ( const std::string & str ) { if (str.size() == 0) return 1; unsigned int loc = 0, lines = 0; while ((loc = str.find('\n', loc)) != std::string::npos) { lines++; loc++; } if (str[str.size()-1] == '\n') return lines; return lines+1; } // -------------------------------------------------------------------------------------------------------- unsigned int kStringWidth ( const std::string & str, bool largeFont ) { return ((largeFont ? 9 : 8) * kStringCols(str)); } // -------------------------------------------------------------------------------------------------------- unsigned int kStringHeight ( const std::string & str, bool largeFont ) { return ((largeFont ? 15 : 13) * kStringRows(str)); } // -------------------------------------------------------------------------------------------------------- std::string kStringPrintf ( const std::string & fmt, va_list * argList ) { static char str[256]; std::string format(fmt), subformat, text; unsigned int oloc = 0; unsigned int nloc = 0; kStringReplaceTabs(format); while ((nloc = format.find('%', oloc)) != std::string::npos) { text += format.substr(oloc, nloc - oloc); oloc = nloc; nloc = format.find_first_of("diouXxfeEgGbcs", oloc); if (nloc == std::string::npos) break; // should not happen subformat = format.substr(oloc, nloc - oloc + 1); if (format[nloc] == 's' || format[nloc] == 'b') { text += (char *)va_arg(*argList, const char *); } else { switch (format[nloc]) { case 'c': case 'd': case 'i': case 'o': case 'u': case 'X': case 'x': sprintf(str, subformat.c_str(), va_arg(*argList, int)); break; case 'f': case 'e': case 'E': case 'g': case 'G': sprintf(str, subformat.c_str(), va_arg(*argList, double)); break; } text += str; } oloc = nloc+1; } text += format.substr(oloc); return text; } // -------------------------------------------------------------------------------------------------------- std::string kStringPrintf ( const char * fmt ...) { va_list argList; va_start(argList, fmt); std::string text(kStringPrintf(std::string(fmt), &argList)); va_end(argList); return text; } // -------------------------------------------------------------------------------------------------------- bool kStringHasSuffix ( const std::string & str, const std::string & suffix ) { unsigned int result = str.rfind(suffix); if (result == std::string::npos) return false; return (result == str.size()-suffix.size()); } kiki/kodilib/src/tools/KStringTools.h0000666000000000000000000000414307644705704016645 0ustar rootroot/* * KStringTools.h * kodisein */ #ifndef __KStringTools #define __KStringTools #include #include #include // -------------------------------------------------------------------------------------------------------- void kStringInsertStringBehindTags ( std::string & str, const std::string & insertString, const std::string & tag); void kStringMerge ( std::string & str, const std::string & str2, const std::string & divider ); std::vector kStringGetComponents ( const std::string & str, const std::string & divider ); void kStringReplace ( std::string &, const std::string & , const std::string & ); void kStringReplaceTabs ( std::string &, unsigned int = 4 ); std::string kStringGetSharedPrefix ( const std::vector & ); void kStringCropCols ( std::string & , unsigned int ); void kStringCropRows ( std::string & , unsigned int ); unsigned int kStringNthCharPos ( const std::string & , unsigned int, char ); unsigned int kStringRows ( const std::string & ); unsigned int kStringCols ( const std::string & ); unsigned int kStringWidth ( const std::string & , bool = true); unsigned int kStringHeight ( const std::string & , bool = true); unsigned int kStringCountChars ( const std::string &, char ); std::string kStringPrintf ( const char * ... ); std::string kStringPrintf ( const std::string &, va_list * ); bool kStringHasSuffix ( const std::string &, const std::string & ); // -------------------------------------------------------------------------------------------------------- struct eqstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) == 0; } }; // -------------------------------------------------------------------------------------------------------- struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; #endif kiki/kodilib/src/tools/KTools.h0000666000000000000000000000030007644705704015445 0ustar rootroot/* * KTools.h * kodisein */ #ifndef __KTools #define __KTools #include "KDisplayTools.h" #include "KStringTools.h" #include "KFileTools.h" #include "KXMLTools.h" #endif kiki/kodilib/src/tools/KXMLTools.cpp0000666000000000000000000003463607646354665016414 0ustar rootroot/* * KXMLTools.cpp * kodisein */ #include "KXMLTools.h" #include "KConsole.h" #include "KSeparatedMatrix.h" #include // -------------------------------------------------------------------------------------------------------- std::string kXMLTag ( const std::string & name, const std::string & attributes, int depth ) { std::string xml(depth, ' '); xml += "<"; xml += name; if (attributes.size() > 0) xml += " "; xml += attributes; xml += " />\n"; return xml; } // -------------------------------------------------------------------------------------------------------- std::string kXMLOpenTag ( const std::string & name, const std::string & attributes, int depth ) { std::string xml(depth, ' '); xml += "<"; xml += name; if (attributes.size() > 0) xml += " "; xml += attributes; xml += ">\n"; return xml; } // -------------------------------------------------------------------------------------------------------- std::string kXMLCloseTag ( const std::string & name, int depth ) { std::string xml(depth, ' '); xml += "\n"; return xml; } // -------------------------------------------------------------------------------------------------------- std::string kXMLPrintf ( int depth, const char * fmt ...) { std::string text(depth, ' '); va_list argList; va_start(argList, fmt); text += kStringPrintf(std::string(fmt), &argList); va_end(argList); return text; } // -------------------------------------------------------------------------------------------------------- std::string kXMLParseToTagsInVector ( std::string & xml, const std::vector & tags ) { std::string open("<"); unsigned int minLoc = std::string::npos; std::vector::const_iterator iter = tags.begin(); while (iter != tags.end()) { unsigned int loc = xml.find(open+(*iter)); if (loc < minLoc) minLoc = loc; iter++; } std::string substring = xml.substr(0, minLoc); xml.erase(0, minLoc); return substring; } // -------------------------------------------------------------------------------------------------------- std::string kXMLReadNamedAttribute ( const std::string & xml, const std::string & name ) { std::string value; std::string nameStr(name); nameStr += "='"; unsigned int loc = xml.find(nameStr); if (loc != std::string::npos) { loc += nameStr.size(); value = xml.substr(loc, xml.find("'", loc) - loc); } return value; } // -------------------------------------------------------------------------------------------------------- bool kXMLParseNamedCloseTag ( std::string & xml, const std::string & name, bool printError ) { unsigned int loc = xml.find('<'); if (loc == std::string::npos) { if (printError) KConsole::printError(kStringPrintf("invalid XML:\nmissing close tag '%s'", name.c_str())); return false; } xml.erase(0, loc); std::string closeTag; closeTag += ""; if ((loc = xml.find(closeTag)) != 0) { if (printError) KConsole::printError(kStringPrintf("invalid XML:\nmissing close tag '%s'", name.c_str())); return false; } xml.erase(0, closeTag.size()); return true; } // -------------------------------------------------------------------------------------------------------- bool kXMLReadNamedOpenTag ( const std::string & xml, const std::string & name, std::string * attributes ) { unsigned int loc = xml.find('<'), endloc; if (loc == std::string::npos || xml[loc+1] == '/') return false; loc++; endloc = xml.find_first_of(" >", loc); if (xml.substr(loc, endloc-loc) != name) return false; if (attributes == NULL || xml[endloc] == '>') return true; loc = endloc+1; endloc = xml.find(">", loc); *attributes = xml.substr(loc, endloc-loc); return true; } // -------------------------------------------------------------------------------------------------------- std::string kXMLParseNamedOpenTag ( std::string & xml, const std::string & name, std::string * attributes, bool printError ) { unsigned int loc = xml.find('<'); if (loc == std::string::npos || xml[loc+1] == '/') { if (printError) KConsole::printError(kStringPrintf("invalid XML:\nmissing tag '%s'", name.c_str())); return ""; } std::string tagString("<"); xml.erase(0, loc+1); loc = xml.find_first_of(" >"); if (xml.substr(0, loc) != name) { xml.insert(0, "<"); if (printError) KConsole::printError(kStringPrintf("invalid XML:\nmissing tag '%s'", name.c_str())); return ""; } if (attributes == NULL) { loc = xml.find(">")+1; tagString += xml.substr(0,loc); xml.erase(0, loc); return tagString; } tagString += xml.substr(0,loc); xml.erase(0, loc); if (xml[0] == ' ') { tagString += " "; xml.erase(0, 1); loc = xml.find('>'); *attributes = xml.substr(0, loc); tagString += xml.substr(0, loc+1); xml.erase(0, loc+1); } else { tagString += ">"; xml.erase(0, 1); } return tagString; } // -------------------------------------------------------------------------------------------------------- bool kXMLParseOpenTag ( std::string & xml, std::string & name, std::string * attributes, bool printError ) { unsigned int loc = xml.find('<'); if (loc == std::string::npos || xml[loc+1] == '/') { if (printError) KConsole::printError("invalid XML:\nmissing open tag"); return false; } xml.erase(0, loc+1); loc = xml.find_first_of(" >"); name = xml.substr(0, loc); if (attributes == NULL) { xml.erase(0, xml.find(">")+1); return true; } xml.erase(0, loc); if (xml[0] == ' ') { xml.erase(0, 1); loc = xml.find('>'); *attributes = xml.substr(0, loc); xml.erase(0, loc+1); } else { xml.erase(0, 1); } return true; } // -------------------------------------------------------------------------------------------------------- std::string kXMLValue( const std::string & name, int type, const void * value, int depth ) { switch (type) { case KDL_XML_VALUE_FLOAT: return kXMLTag("Value", kStringPrintf("name='%s' type='float' value='%g'", name.c_str(), *(float *)value), depth); case KDL_XML_VALUE_INT: return kXMLTag("Value", kStringPrintf("name='%s' type='int' value='%d'", name.c_str(), *(int *)value), depth); case KDL_XML_VALUE_CHAR: return kXMLTag("Value", kStringPrintf("name='%s' type='char' value='%c'", name.c_str(), *(char *)value), depth); case KDL_XML_VALUE_BOOL: return kXMLTag("Value", kStringPrintf("name='%s' type='bool' value='%s'", name.c_str(), *(bool *)value ? "true" : "false"), depth); case KDL_XML_VALUE_VERTEX: return kXMLTag("Value", kStringPrintf("name='%s' type='vector' x='%g' y='%g', z='%g'", name.c_str(), (*(KVector*)value)[0], (*(KVector*)value)[1], (*(KVector*)value)[2]), depth); case KDL_XML_VALUE_SIZE: return kXMLTag("Value", kStringPrintf("name='%s' type='size' w='%d' h='%d'", name.c_str(), (*(KSize*)value).w, (*(KSize*)value).h), depth); case KDL_XML_VALUE_POSITION: return kXMLTag("Value", kStringPrintf("name='%s' type='position' x='%d' y='%d'", name.c_str(), (*(KPosition*)value).x, (*(KPosition*)value).y), depth); } std::string xml; if (type == KDL_XML_VALUE_STRING) { xml += kXMLOpenTag("Value", kStringPrintf("name='%s' type='string'", name.c_str()), depth); xml += kXMLPrintf(depth+KDL_XML_INDENT, "\"%s\"\n", ((std::string*)value)->c_str()); } else if (type == KDL_XML_VALUE_MATRIX) { xml += kXMLOpenTag("Value", kStringPrintf("name='%s' type='matrix'", name.c_str()), depth); KMatrix m = *(KMatrix*)value; xml += kXMLPrintf (depth+KDL_XML_INDENT, "%g %g %g %g\n", m[0], m[4], m[8], m[12]); xml += kXMLPrintf (depth+KDL_XML_INDENT, "%g %g %g %g\n", m[1], m[5], m[9], m[13]); xml += kXMLPrintf (depth+KDL_XML_INDENT, "%g %g %g %g\n", m[2], m[6], m[10], m[14]); xml += kXMLPrintf (depth+KDL_XML_INDENT, "%g %g %g %g\n", m[3], m[7], m[11], m[15]); } else if (type == KDL_XML_VALUE_SEPARATED_MATRIX) { xml += kXMLOpenTag("Value", kStringPrintf("name='%s' type='transformation'", name.c_str()), depth); xml += kXMLPrintf (depth+KDL_XML_INDENT, "%g %g %g %g %g %g %g %g %g\n", ((KSeparatedMatrix*)value)->getTX(), ((KSeparatedMatrix*)value)->getTY(), ((KSeparatedMatrix*)value)->getTZ(), ((KSeparatedMatrix*)value)->getRX(), ((KSeparatedMatrix*)value)->getRY(), ((KSeparatedMatrix*)value)->getRZ(), ((KSeparatedMatrix*)value)->getSX(), ((KSeparatedMatrix*)value)->getSY(), ((KSeparatedMatrix*)value)->getSZ()); } xml += kXMLCloseTag("Value", depth); return xml; } // -------------------------------------------------------------------------------------------------------- bool kXMLParseValue( std::string & xml, const std::string & name, int type, void * value, bool printError ) { unsigned int loc = xml.find('<'); if (loc == std::string::npos || xml[loc+1] == '/') { if (printError) KConsole::printError(kStringPrintf("invalid XML:\nmissing value '%s'", name.c_str())); return false; } std::string saveString = xml.substr(0, loc); xml.erase(0, loc); std::string valueTag; valueTag += "")); if (typeString == "matrix") { float m[16]; sscanf(substring.c_str(), "%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g", &m[0], &m[4], &m[8], &m[12], &m[1], &m[5], &m[9], &m[13], &m[2], &m[6], &m[10], &m[14], &m[3], &m[7], &m[11], &m[15]); *((KMatrix*)value) = KMatrix(m); } else if (typeString == "transformation") { float m[9]; sscanf(substring.c_str(), "%g %g %g %g %g %g %g %g %g", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5], &m[6], &m[7], &m[8]); ((KSeparatedMatrix*)value)->reset(); ((KSeparatedMatrix*)value)->translate(m[0],m[1],m[2]); ((KSeparatedMatrix*)value)->rotate (m[3],m[4],m[5]); ((KSeparatedMatrix*)value)->scale (m[6],m[7],m[8]); } else if (typeString == "string") { unsigned int first = substring.find("\"")+1; unsigned int last = substring.rfind("\"", std::string::npos); *((std::string*)value) = substring.substr(first, last-first); } std::vector tags(1, "/Value"); kXMLParseToTagsInVector(xml, tags); kXMLParseNamedCloseTag(xml, "Value"); } return true; } kiki/kodilib/src/tools/KXMLTools.h0000666000000000000000000000276007644705705016043 0ustar rootroot/* * KXMLTools.h * kodisein */ #ifndef __KXMLTools #define __KXMLTools #include "KStringTools.h" #define KDL_XML_INDENT 2 enum { KDL_XML_VALUE_FLOAT, KDL_XML_VALUE_INT, KDL_XML_VALUE_CHAR, KDL_XML_VALUE_BOOL, KDL_XML_VALUE_STRING, KDL_XML_VALUE_VERTEX, KDL_XML_VALUE_SIZE, KDL_XML_VALUE_POSITION, KDL_XML_VALUE_MATRIX, KDL_XML_VALUE_SEPARATED_MATRIX }; // -------------------------------------------------------------------------------------------------------- std::string kXMLReadNamedAttribute ( const std::string &, const std::string & ); bool kXMLReadNamedOpenTag ( const std::string &, const std::string &, std::string * = NULL); std::string kXMLParseToTagsInVector ( std::string &, const std::vector & ); std::string kXMLParseNamedOpenTag ( std::string &, const std::string &, std::string * = NULL, bool = true ); bool kXMLParseNamedCloseTag ( std::string &, const std::string &, bool = true ); bool kXMLParseOpenTag ( std::string &, std::string &, std::string * = NULL, bool = true ); bool kXMLParseValue ( std::string &, const std::string &, int, void *, bool = true); std::string kXMLTag ( const std::string &, const std::string & = "", int = 0 ); std::string kXMLOpenTag ( const std::string &, const std::string & = "", int = 0 ); std::string kXMLCloseTag ( const std::string &, int = 0 ); std::string kXMLPrintf ( int, const char * ...); std::string kXMLValue ( const std::string &, int, const void * , int = 0 ); #endif kiki/kodilib/src/types/0000777000000000000000000000000010336064534014063 5ustar rootrootkiki/kodilib/src/types/KColor.h0000666000000000000000000000752410070562132015425 0ustar rootroot/* * KColor.h * kodisein */ #ifndef __KColor #define __KColor #include "KIntrospection.h" #if defined(__APPLE__) && defined(__MACH__) #include #else #ifdef _WIN32 #include #endif #include #endif enum { R, G, B, A }; class KColor { protected: GLfloat values[4]; public: KColor () { values[R] = 1.0; values[G] = 1.0; values[B] = 1.0; values[A] = 1.0; } KColor ( const KColor & c ) { values[R] = c.values[R]; values[G] = c.values[G]; values[B] = c.values[B]; values[A] = c.values[A]; } KColor ( GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0 ) { values[R] = r; values[G] = g; values[B] = b; values[A] = a; } void setValues ( const GLfloat r, const GLfloat g, const GLfloat b, const GLfloat a = 1.0 ) { values[R] = r; values[G] = g; values[B] = b; values[A] = a; } void setValues4fv ( const GLfloat * v ) { values[R] = v[R]; values[G] = v[G]; values[B] = v[B]; values[A] = v[A]; } const GLfloat * getValues () const { return values; } void setRed ( const GLfloat r ) { values[R] = r; } void setGreen ( const GLfloat g ) { values[G] = g; } void setBlue ( const GLfloat b ) { values[B] = b; } void setAlpha ( const GLfloat a ) { values[A] = a; } GLfloat getRed ( ) const { return values[R]; } GLfloat getGreen ( ) const { return values[G]; } GLfloat getBlue ( ) const { return values[B]; } GLfloat getAlpha ( ) const { return values[A]; } void operator = ( const KColor & c ) { values[R] = c.values[R]; values[G] = c.values[G]; values[B] = c.values[B]; values[A] = c.values[A]; } bool operator == ( const KColor & c ) const { return (values[R] == c.values[R] && values[G] == c.values[G] && values[B] == c.values[B] && values[A] == c.values[A]); } bool operator != ( const KColor & c ) const { return !((*this) == c); } GLfloat operator[] (int i) const { return values[i]; } void glColor () const { glColor4fv(values); } }; #endif kiki/kodilib/src/types/KKey.cpp0000666000000000000000000000261107644705705015444 0ustar rootroot/* * KKey.cpp * kodisein */ #include "KKey.h" #include "KKeyTools.h" // -------------------------------------------------------------------------------------------------------- KKey::KKey ( SDL_keysym keySym ) { name = kKeyGetNameForKeysym(keySym); character = 0; if ( (keySym.unicode & 0xFF80) == 0 ) { character = keySym.unicode & 0x7F; } sym = keySym.sym; mod = keySym.mod; } // -------------------------------------------------------------------------------------------------------- KKey::KKey ( std::string keyName ) { name = keyName; character = 0; // should maybe be fixed sometimes sym = kKeyGetSymForSymName (getUnmodifiedName ()); mod = kKeyGetModForModName (getModifierName ()); } // -------------------------------------------------------------------------------------------------------- std::string KKey::getUnmodifiedName () const { unsigned int keyPos = name.find('_', 0); if (keyPos == std::string::npos) { return name; } return name.substr(keyPos+1); } // -------------------------------------------------------------------------------------------------------- std::string KKey::getModifierName () const { unsigned int keyPos = name.find('_', 0); if (keyPos == std::string::npos) { return ""; } return name.substr(0, keyPos); } kiki/kodilib/src/types/KKey.h0000666000000000000000000000077007644705705015115 0ustar rootroot/* * KKey.h * kodisein */ #ifndef __KKey #define __KKey #include #include // -------------------------------------------------------------------------------------------------------- struct KKey { KKey ( SDL_keysym keySym ); KKey ( std::string keyName ); std::string name; char character; SDLKey sym; int mod; std::string getUnmodifiedName () const; std::string getModifierName () const; }; #endif kiki/kodilib/src/types/KLight.cpp0000666000000000000000000001203007644705705015757 0ustar rootroot/* * KLight.cpp * kodisein */ #include "KLight.h" #include "KConsole.h" // -------------------------------------------------------------------------------------------------------- KLight::KLight ( GLenum lightNumber ) { light_number = lightNumber; ambient_color = KColor (0, 0, 0, 1); diffuse_color = KColor (1, 1, 1, 1); specular_color = KColor (1, 1, 1, 1); spot_direction = KVector (0, -1, 0); spot_cutoff = 180.0; constant_attenuation = 1.0; linear_attenuation = 0.0; quadratic_attenuation = 0.0; if (light_number) { initialize (light_number); } } // -------------------------------------------------------------------------------------------------------- void KLight::initialize ( GLenum lightNumber ) { if (lightNumber == 0 && light_number == 0) { GLint maxLights; glGetIntegerv(GL_MAX_LIGHTS, &maxLights); for (light_number = GL_LIGHT1; light_number < (GL_LIGHT0+(GLuint)maxLights); light_number++) { if (glIsEnabled (light_number) == false) { break; } } if (light_number == GL_LIGHT0+(GLuint)maxLights) { KConsole::printError("KLight::initialize unable to enable light ;-)"); light_number = 0; return; } } else if (lightNumber) { light_number = lightNumber; } glLightfv (light_number, GL_AMBIENT, ambient_color.getValues()); glLightfv (light_number, GL_DIFFUSE, diffuse_color.getValues()); glLightfv (light_number, GL_SPECULAR, specular_color.getValues()); glLightf (light_number, GL_CONSTANT_ATTENUATION, constant_attenuation); glLightf (light_number, GL_LINEAR_ATTENUATION, linear_attenuation); glLightf (light_number, GL_QUADRATIC_ATTENUATION, quadratic_attenuation); glLightfv (light_number, GL_POSITION, spot_position.getValues()); glLightf (light_number, GL_SPOT_CUTOFF, spot_cutoff); if (spot_cutoff <= 90.0) { glLightfv (light_number, GL_SPOT_DIRECTION, spot_direction.getValues()); } GLboolean enabled; glGetBooleanv (light_number, &enabled); if (enabled == GL_FALSE) { glEnable (light_number); } } // -------------------------------------------------------------------------------------------------------- void KLight::setPosition ( const KVector & position ) { spot_position = position; if (light_number) { glLightfv (light_number, GL_POSITION, spot_position.getValues()); } } // -------------------------------------------------------------------------------------------------------- void KLight::setDirection ( const KVector & direction ) { spot_direction = direction; if (spot_cutoff <= 90.0 && light_number) { glLightfv(light_number, GL_SPOT_DIRECTION, spot_direction.getValues()); } } // -------------------------------------------------------------------------------------------------------- void KLight::setAttenuation ( float constant, float linear, float quadratic ) { constant_attenuation = constant; linear_attenuation = linear; quadratic_attenuation = quadratic; if (light_number) { glLightf (light_number, GL_CONSTANT_ATTENUATION, constant_attenuation); glLightf (light_number, GL_LINEAR_ATTENUATION, linear_attenuation); glLightf (light_number, GL_QUADRATIC_ATTENUATION, quadratic_attenuation); } } // -------------------------------------------------------------------------------------------------------- void KLight::setCutoff ( float cutoff ) { spot_cutoff = cutoff; if (light_number) { glLightf (light_number, GL_SPOT_CUTOFF, spot_cutoff); if (spot_cutoff <= 90.0) { glLightfv(light_number, GL_SPOT_DIRECTION, spot_direction.getValues()); } } } // -------------------------------------------------------------------------------------------------------- void KLight::setAmbientColor ( const KColor & ambientColor ) { ambient_color = ambientColor; if (light_number) { glLightfv (light_number, GL_AMBIENT, ambient_color.getValues()); } } // -------------------------------------------------------------------------------------------------------- void KLight::setDiffuseColor ( const KColor & diffuseColor ) { diffuse_color = diffuseColor; if (light_number) { glLightfv (light_number, GL_DIFFUSE, diffuse_color.getValues()); } } // -------------------------------------------------------------------------------------------------------- void KLight::setSpecularColor ( const KColor & specularColor ) { specular_color = specularColor; if (light_number) { glLightfv (light_number, GL_SPECULAR, specular_color.getValues()); } } kiki/kodilib/src/types/KLight.h0000666000000000000000000000225207644705705015431 0ustar rootroot/* * KLight.h * kodisein */ #include "KColor.h" #include "KVector.h" #ifndef __KLight #define __KLight // -------------------------------------------------------------------------------------------------------- class KLight { protected: GLenum light_number; KVector spot_position; KVector spot_direction; float spot_cutoff; float constant_attenuation; float linear_attenuation; float quadratic_attenuation; KColor ambient_color; KColor diffuse_color; KColor specular_color; public: KLight ( GLenum lightNumber = 0 ); void initialize ( GLenum lightNumber = 0 ); void setPosition ( const KVector & position ); void setDirection ( const KVector & direction ); void setAttenuation ( float constant, float linear = 0.0, float quadratic = 0.0 ); void setCutoff ( float cutoff ); void setAmbientColor ( const KColor & ambientColor ); void setDiffuseColor ( const KColor & diffuseColor ); void setSpecularColor( const KColor & specularColor ); }; #endif kiki/kodilib/src/types/KLightingProjection.cpp0000666000000000000000000000324507644705705020522 0ustar rootroot/* * KLightingProjection.cpp * kodisein */ #include "KLightingProjection.h" #include "KConsole.h" KDL_CLASS_INTROSPECTION_1 (KLightingProjection, KPerspectiveProjection) // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- KLightingProjection::KLightingProjection ( GLfloat f, GLfloat zn, GLfloat zf ) : KPerspectiveProjection (f, zn, zf) { light.setDirection (KVector(0.0, 0.0, -1.0)); light.setCutoff(90.0); } // -------------------------------------------------------------------------------------------------------- KLightingProjection::KLightingProjection ( const KProjection & p ) : KPerspectiveProjection (p) { } // -------------------------------------------------------------------------------------------------------- KLightingProjection::KLightingProjection ( const KLightingProjection & p ) : KPerspectiveProjection (p) { light = p.light; } // -------------------------------------------------------------------------------------------------------- KProjection * KLightingProjection::copy () const { return new KLightingProjection (*this); } // -------------------------------------------------------------------------------------------------------- void KLightingProjection::apply () { KPerspectiveProjection::apply(); KVector pos = getPosition() + light_offset; light.setDirection(-getZVector()); light.setPosition (KVector(pos[X], pos[Y], pos[Z], 1.0)); // positional light source light.initialize (GL_LIGHT0); } kiki/kodilib/src/types/KLightingProjection.h0000666000000000000000000000160007644705705020160 0ustar rootroot/* * KLightingProjection.h * kodisein */ #ifndef __KLightingProjection #define __KLightingProjection #include "KPerspectiveProjection.h" #include "KLight.h" // -------------------------------------------------------------------------------------------------------- class KLightingProjection : public KPerspectiveProjection { INTROSPECTION KVector light_offset; KLight light; public: KLightingProjection ( GLfloat = 60.0, GLfloat = 0.1, GLfloat = 300.0 ); KLightingProjection ( const KProjection & ); KLightingProjection ( const KLightingProjection & ); KLight & getLight () { return light; } void setLightOffset ( const KVector & offset ) { light_offset = offset; } KProjection * copy () const; void apply (); }; #endif kiki/kodilib/src/types/KMatrix.cpp0000666000000000000000000003220007645543103016146 0ustar rootroot/* * KMatrix.cpp * kodisein */ #include "KMatrix.h" #include "KQuaternion.h" #include "KConsole.h" #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KMatrix, KObject) // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- KMatrix::KMatrix () : KObject () { reset(); } // -------------------------------------------------------------------------------------------------------- KMatrix::KMatrix ( const KMatrix & m ) : KObject () { matrix[0]=m.matrix[0];matrix[1]=m.matrix[1];matrix[2]=m.matrix[2];matrix[3]=m.matrix[3]; matrix[4]=m.matrix[4];matrix[5]=m.matrix[5];matrix[6]=m.matrix[6];matrix[7]=m.matrix[7]; matrix[8]=m.matrix[8];matrix[9]=m.matrix[9];matrix[10]=m.matrix[10];matrix[11]=m.matrix[11]; matrix[12]=m.matrix[12];matrix[13]=m.matrix[13];matrix[14]=m.matrix[14];matrix[15]=m.matrix[15]; } // -------------------------------------------------------------------------------------------------------- KMatrix::KMatrix ( const GLdouble * m ) : KObject () { matrix[0]=m[0];matrix[1]=m[1];matrix[2]=m[2];matrix[3]=m[3]; matrix[4]=m[4];matrix[5]=m[5];matrix[6]=m[6];matrix[7]=m[7]; matrix[8]=m[8];matrix[9]=m[9];matrix[10]=m[10];matrix[11]=m[11]; matrix[12]=m[12];matrix[13]=m[13];matrix[14]=m[14];matrix[15]=m[15]; } // -------------------------------------------------------------------------------------------------------- KMatrix::KMatrix ( const GLmat m ) : KObject () { matrix[0]=m[0];matrix[1]=m[1];matrix[2]=m[2];matrix[3]=m[3]; matrix[4]=m[4];matrix[5]=m[5];matrix[6]=m[6];matrix[7]=m[7]; matrix[8]=m[8];matrix[9]=m[9];matrix[10]=m[10];matrix[11]=m[11]; matrix[12]=m[12];matrix[13]=m[13];matrix[14]=m[14];matrix[15]=m[15]; } // -------------------------------------------------------------------------------------------------------- KMatrix::KMatrix ( const KVector & x, const KVector & y, const KVector & z ) : KObject () { matrix[0] = x.values[X]; matrix[4] = y.values[X]; matrix[8] = z.values[X]; matrix[12] = 0.0; matrix[1] = x.values[Y]; matrix[5] = y.values[Y]; matrix[9] = z.values[Y]; matrix[13] = 0.0; matrix[2] = x.values[Z]; matrix[6] = y.values[Z]; matrix[10] = z.values[Z]; matrix[14] = 0.0; matrix[3] = x.values[W]; matrix[7] = y.values[W]; matrix[11] = z.values[W]; matrix[15] = 1.0; } // -------------------------------------------------------------------------------------------------------- KMatrix::KMatrix ( const KQuaternion & quat ) : KObject () { float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; // calculate coefficients x2 = quat.x + quat.x; y2 = quat.y + quat.y; z2 = quat.z + quat.z; xx = quat.x * x2; xy = quat.x * y2; xz = quat.x * z2; yy = quat.y * y2; yz = quat.y * z2; zz = quat.z * z2; wx = quat.w * x2; wy = quat.w * y2; wz = quat.w * z2; matrix[0] = 1.0 - (yy + zz); matrix[1] = xy + wz; matrix[2] = xz - wy; matrix[3] = 0.0; matrix[4] = xy - wz; matrix[5] = 1.0 - (xx + zz); matrix[6] = yz + wx; matrix[7] = 0.0; matrix[8] = xz + wy; matrix[9] = yz - wx; matrix[10] = 1.0 - (xx + yy); matrix[11] = 0.0; matrix[12] = 0.0; matrix[13] = 0.0; matrix[14] = 0.0; matrix[15] = 1.0; } // -------------------------------------------------------------------------------------------------------- KMatrix & KMatrix::operator= ( const KMatrix & m ) { matrix[0]=m.matrix[0];matrix[1]=m.matrix[1];matrix[2]=m.matrix[2];matrix[3]=m.matrix[3]; matrix[4]=m.matrix[4];matrix[5]=m.matrix[5];matrix[6]=m.matrix[6];matrix[7]=m.matrix[7]; matrix[8]=m.matrix[8];matrix[9]=m.matrix[9];matrix[10]=m.matrix[10];matrix[11]=m.matrix[11]; matrix[12]=m.matrix[12];matrix[13]=m.matrix[13];matrix[14]=m.matrix[14];matrix[15]=m.matrix[15]; return (*this); } // -------------------------------------------------------------------------------------------------------- KMatrix & KMatrix::operator*= ( const KMatrix & m ) { *this = (*this * m); return (*this); } // -------------------------------------------------------------------------------------------------------- KMatrix KMatrix::operator* ( const KMatrix & m ) const { KMatrix mm; mm.matrix[0]=matrix[0]*m.matrix[0]+matrix[4]*m.matrix[1]+matrix[8]*m.matrix[2]+matrix[12]*m.matrix[3]; mm.matrix[1]=matrix[1]*m.matrix[0]+matrix[5]*m.matrix[1]+matrix[9]*m.matrix[2]+matrix[13]*m.matrix[3]; mm.matrix[2]=matrix[2]*m.matrix[0]+matrix[6]*m.matrix[1]+matrix[10]*m.matrix[2]+matrix[14]*m.matrix[3]; mm.matrix[3]=matrix[3]*m.matrix[0]+matrix[7]*m.matrix[1]+matrix[11]*m.matrix[2]+matrix[15]*m.matrix[3]; mm.matrix[4]=matrix[0]*m.matrix[4]+matrix[4]*m.matrix[5]+matrix[8]*m.matrix[6]+matrix[12]*m.matrix[7]; mm.matrix[5]=matrix[1]*m.matrix[4]+matrix[5]*m.matrix[5]+matrix[9]*m.matrix[6]+matrix[13]*m.matrix[7]; mm.matrix[6]=matrix[2]*m.matrix[4]+matrix[6]*m.matrix[5]+matrix[10]*m.matrix[6]+matrix[14]*m.matrix[7]; mm.matrix[7]=matrix[3]*m.matrix[4]+matrix[7]*m.matrix[5]+matrix[11]*m.matrix[6]+matrix[15]*m.matrix[7]; mm.matrix[8]=matrix[0]*m.matrix[8]+matrix[4]*m.matrix[9]+matrix[8]*m.matrix[10]+matrix[12]*m.matrix[11]; mm.matrix[9]=matrix[1]*m.matrix[8]+matrix[5]*m.matrix[9]+matrix[9]*m.matrix[10]+matrix[13]*m.matrix[11]; mm.matrix[10]=matrix[2]*m.matrix[8]+matrix[6]*m.matrix[9]+matrix[10]*m.matrix[10]+matrix[14]*m.matrix[11]; mm.matrix[11]=matrix[3]*m.matrix[8]+matrix[7]*m.matrix[9]+matrix[11]*m.matrix[10]+matrix[15]*m.matrix[11]; mm.matrix[12]=matrix[0]*m.matrix[12]+matrix[4]*m.matrix[13]+matrix[8]*m.matrix[14]+matrix[12]*m.matrix[15]; mm.matrix[13]=matrix[1]*m.matrix[12]+matrix[5]*m.matrix[13]+matrix[9]*m.matrix[14]+matrix[13]*m.matrix[15]; mm.matrix[14]=matrix[2]*m.matrix[12]+matrix[6]*m.matrix[13]+matrix[10]*m.matrix[14]+matrix[14]*m.matrix[15]; mm.matrix[15]=matrix[3]*m.matrix[12]+matrix[7]*m.matrix[13]+matrix[11]*m.matrix[14]+matrix[15]*m.matrix[15]; return mm; } // -------------------------------------------------------------------------------------------------------- KVector KMatrix::operator* ( const KVector & v ) const { return KVector( matrix[0]*v.values[0] + matrix[4]*v.values[1] + matrix[8] *v.values[2] + matrix[12]*v.values[3], matrix[1]*v.values[0] + matrix[5]*v.values[1] + matrix[9] *v.values[2] + matrix[13]*v.values[3], matrix[2]*v.values[0] + matrix[6]*v.values[1] + matrix[10]*v.values[2] + matrix[14]*v.values[3], matrix[3]*v.values[0] + matrix[7]*v.values[1] + matrix[11]*v.values[2] + matrix[15]*v.values[3] ); } // -------------------------------------------------------------------------------------------------------- void KMatrix::reset() { matrix[0]=matrix[5]=matrix[10]=matrix[15]=1.0; matrix[1]=matrix[4]=matrix[8] =matrix[12]=0.0; matrix[2]=matrix[6]=matrix[9] =matrix[13]=0.0; matrix[3]=matrix[7]=matrix[11]=matrix[14]=0.0; } // -------------------------------------------------------------------------------------------------------- void KMatrix::transform ( const KMatrix & m ) { *this *= m; } // -------------------------------------------------------------------------------------------------------- void KMatrix::rotate ( GLfloat x, GLfloat y, GLfloat z ) { GLfloat rx = DEG2RAD(x), ry = DEG2RAD(y), rz = DEG2RAD(z); GLfloat cx=cos(rx), sx=sin(rx), cy=cos(ry), sy=sin(ry), cz = cos(rz), sz = sin(rz); GLfloat b0 = cy*cz, b1 = sx*sy*cz+cx*sz, b2 = -cx*sy*cz+sx*sz, b4 = -cy*sz; GLfloat b5 = -sx*sy*sz+cx*cz, b6 = cx*sy*sz+sx*cz, b8 = sy, b9 = -sx*cy, b10 = cx*cy; GLfloat a0 = matrix[0], a1 = matrix[1], a2 = matrix[2], a3 = matrix[3]; GLfloat a4 = matrix[4], a5 = matrix[5], a6 = matrix[6], a7 = matrix[7]; GLfloat a8 = matrix[8], a9 = matrix[9], a10 = matrix[10], a11 = matrix[11]; matrix[0]=a0*b0+a4*b1+a8*b2; matrix[1]=a1*b0+a5*b1+a9*b2; matrix[2]=a2*b0+a6*b1+a10*b2; matrix[3]=a3*b0+a7*b1+a11*b2; matrix[4]=a0*b4+a4*b5+a8*b6; matrix[5]=a1*b4+a5*b5+a9*b6; matrix[6]=a2*b4+a6*b5+a10*b6; matrix[7]=a3*b4+a7*b5+a11*b6; matrix[8]=a0*b8+a4*b9+a8*b10; matrix[9]=a1*b8+a5*b9+a9*b10; matrix[10]=a2*b8+a6*b9+a10*b10; matrix[11]=a3*b8+a7*b9+a11*b10; } // -------------------------------------------------------------------------------------------------------- void KMatrix::scale ( GLfloat x, GLfloat y, GLfloat z ) { matrix[0] *= x; matrix[1] *= x; matrix[2] *= x; matrix[3] *= x; matrix[4] *= y; matrix[5] *= y; matrix[6] *= y; matrix[7] *= y; matrix[8] *= z; matrix[9] *= z; matrix[10] *= z; matrix[11] *= z; } #define COFACTOR_4X4_IJ(fac,m,i,j) \ { \ int ii[4], jj[4], k; \ \ /* compute which row, columnt to skip */ \ for (k=0; k 0.0) { s = sqrt (tr + 1.0); ss = 0.5 / s; return KQuaternion(s/2.0, (matrix[6]-matrix[9])*ss, (matrix[8]-matrix[2])*ss, (matrix[1]-matrix[4])*ss); } else // diagonal is negative { int i = 0, j, k, nxt[3] = {1, 2, 0}; float q[4]; if (matrix[5] > matrix[0]) i = 1; if (matrix[10] > matrix[i*4+i]) i = 2; j = nxt[i]; k = nxt[j]; s = sqrt ((matrix[i*4+i] - (matrix[j*4+j] + matrix[k*4+k])) + 1.0); q[i] = s * 0.5; if (s != 0.0) s = 0.5 / s; q[3] = (matrix[j*4+k] - matrix[k*4+j]) * s; q[j] = (matrix[i*4+j] + matrix[j*4+i]) * s; q[k] = (matrix[i*4+k] + matrix[k*4+i]) * s; return KQuaternion(q[3], q[0], q[1], q[2]); } } // -------------------------------------------------------------------------------------------------------- GLfloat KMatrix::getDepthValue () const { GLdouble model[16], proj[16], wx, wy, wz; GLint view[4]; glGetDoublev(GL_MODELVIEW_MATRIX, model); glGetDoublev(GL_PROJECTION_MATRIX, proj); glGetIntegerv(GL_VIEWPORT, view); if (gluProject(matrix[TX], matrix[TY], matrix[TZ], model, proj, view, &wx, &wy, &wz) == false) { KConsole::printError("unable to calculate depth value"); return 0.0; } return wz; } kiki/kodilib/src/types/KMatrix.h0000666000000000000000000001260607644705705015632 0ustar rootroot/* * KMatrix.h * kodisein */ #ifndef __KMatrix #define __KMatrix #include "KVector.h" #include "KNotificationObject.h" class KQuaternion; class KMatrix : public KObject { INTROSPECTION protected: GLmat matrix; public: KMatrix (); KMatrix ( const KMatrix & ); KMatrix ( const GLmat ); KMatrix ( const GLdouble * ); KMatrix ( const KVector &, const KVector &, const KVector & ); KMatrix ( const KQuaternion & ); virtual ~KMatrix () {} KQuaternion getQuaternion () const; virtual void transform ( const KMatrix & ); virtual void scale ( GLfloat, GLfloat, GLfloat = 1.0 ); virtual void rotate ( const GLfloat, const GLfloat, const GLfloat = 0.0 ); virtual void reset (); inline void translate ( GLfloat, GLfloat, GLfloat = 0.0 ); inline void translate ( const KVector & ); KMatrix & invert (); void setTX ( GLfloat x ) { matrix[TX] = x; } void setTY ( GLfloat y ) { matrix[TY] = y; } void setTZ ( GLfloat z ) { matrix[TZ] = z; } GLfloat getTX () const { return matrix[TX]; } GLfloat getTY () const { return matrix[TY]; } GLfloat getTZ () const { return matrix[TZ]; } GLfloat getDepthValue () const; inline virtual void setPosition ( const KPosition & ); inline virtual void setPosition ( GLfloat, GLfloat, GLfloat = 0.0 ); inline virtual void setPosition ( const KVector & ); inline KVector getPosition () const; inline KVector getXVector () const; inline KVector getYVector () const; inline KVector getZVector () const; inline void setXVector ( const KVector & ); inline void setYVector ( const KVector & ); inline void setZVector ( const KVector & ); KMatrix & operator = ( const KMatrix & ); KMatrix & operator *= ( const KMatrix & ); KMatrix operator * ( const KMatrix & ) const; KVector operator * ( const KVector & ) const; GLfloat operator [] (int i) const { return matrix[i]; } void glMultMatrix () const { glMultMatrixf(matrix); } KMatrix getInverse () const { return KMatrix(*this).invert(); } }; // -------------------------------------------------------------------------------------------------------- void KMatrix::translate ( const KVector & v ) { translate(v.values[X], v.values[Y], v.values[Z]); } // -------------------------------------------------------------------------------------------------------- void KMatrix::translate ( GLfloat x, GLfloat y, GLfloat z ) { matrix[12] += matrix[0]*x+matrix[4]*y+matrix[8]*z; matrix[13] += matrix[1]*x+matrix[5]*y+matrix[9]*z; matrix[14] += matrix[2]*x+matrix[6]*y+matrix[10]*z; matrix[15] += matrix[3]*x+matrix[7]*y+matrix[11]*z; } // -------------------------------------------------------------------------------------------------------- void KMatrix::setPosition ( const KPosition & pos ) { matrix[TX] = pos.x; matrix[TY] = pos.y; } // -------------------------------------------------------------------------------------------------------- void KMatrix::setPosition ( GLfloat x, GLfloat y, GLfloat z ) { matrix[TX] = x; matrix[TY] = y; matrix[TZ] = z; } // -------------------------------------------------------------------------------------------------------- void KMatrix::setPosition ( const KVector & p ) { matrix[TX] = p.values[X]; matrix[TY] = p.values[Y]; matrix[TZ] = p.values[Z]; } // -------------------------------------------------------------------------------------------------------- KVector KMatrix::getPosition () const { return KVector(matrix[TX], matrix[TY], matrix[TZ]); } // -------------------------------------------------------------------------------------------------------- void KMatrix::setXVector ( const KVector & v ) { matrix[0] = v[0]; matrix[1] = v[1]; matrix[2] = v[2]; } // -------------------------------------------------------------------------------------------------------- KVector KMatrix::getXVector () const { return KVector(matrix[0], matrix[1], matrix[2]); } // -------------------------------------------------------------------------------------------------------- void KMatrix::setYVector ( const KVector & v ) { matrix[4] = v[0]; matrix[5] = v[1]; matrix[6] = v[2]; } // -------------------------------------------------------------------------------------------------------- KVector KMatrix::getYVector () const { return KVector(matrix[4], matrix[5], matrix[6]); } // -------------------------------------------------------------------------------------------------------- void KMatrix::setZVector ( const KVector & v ) { matrix[8] = v[0]; matrix[9] = v[1]; matrix[10] = v[2]; } // -------------------------------------------------------------------------------------------------------- KVector KMatrix::getZVector () const { return KVector(matrix[8], matrix[9], matrix[10]); } #endif kiki/kodilib/src/types/KOrthographicProjection.cpp0000666000000000000000000000276607645543103021406 0ustar rootroot/* * KOrthographicProjection.cpp * kodisein */ #include "KOrthographicProjection.h" #include "KConsole.h" #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KOrthographicProjection, KProjection) // -------------------------------------------------------------------------------------------------------- KOrthographicProjection::KOrthographicProjection (GLfloat zn, GLfloat zf) : KProjection ( zn, zf) { } // -------------------------------------------------------------------------------------------------------- KOrthographicProjection::KOrthographicProjection ( const KProjection & p ) : KProjection (p) { } // -------------------------------------------------------------------------------------------------------- KProjection * KOrthographicProjection::copy() const { return new KOrthographicProjection(*this); } // -------------------------------------------------------------------------------------------------------- void KOrthographicProjection::apply () { glViewport(vp[0], vp[1], vp[2], vp[3]); if (fov == 0) { gluOrtho2D( -0.5, vp[2]-0.5, -vp[3]+0.5, +0.5); } else { GLfloat sinus = sin(DEG2RAD(fov/2.0)); GLfloat ar = getCurrentAspectRatio(); GLfloat zf = zfar / 10.0; glOrtho( -sinus * ar * zf, sinus * ar * zf, -sinus * zf, sinus * zf, znear, zfar); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMultMatrixf(matrix); } kiki/kodilib/src/types/KOrthographicProjection.h0000666000000000000000000000115107644705705021045 0ustar rootroot/* * KOrthographicProjection.h * kodisein */ #ifndef __KOrthographicProjection #define __KOrthographicProjection #include "KProjection.h" // -------------------------------------------------------------------------------------------------------- class KOrthographicProjection : public KProjection { INTROSPECTION public: KOrthographicProjection ( GLfloat = -1.0, GLfloat = 1.0 ); KOrthographicProjection ( const KProjection & ); KProjection * copy () const; void apply (); }; #endif kiki/kodilib/src/types/KPerspectiveProjection.cpp0000666000000000000000000001222307645543103021233 0ustar rootroot/* * KPerspectiveProjection.cpp * kodisein */ #include "KPerspectiveProjection.h" #include "KConsole.h" #include "KXMLTools.h" #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KPerspectiveProjection, KProjection) // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- KPerspectiveProjection::KPerspectiveProjection ( GLfloat f, GLfloat zn, GLfloat zf ) : KProjection ( zn, zf ) { reset (); fov = f; } // -------------------------------------------------------------------------------------------------------- KPerspectiveProjection::KPerspectiveProjection ( const KProjection & p ) : KProjection (p) { } // -------------------------------------------------------------------------------------------------------- KProjection * KPerspectiveProjection::copy() const { return new KPerspectiveProjection(*this); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::rotate ( const GLfloat x, const GLfloat y, const GLfloat z ) { KVector savePos = getLookAtPosition(); translate(-getPosition()); KVector up = getYVector(); KVector look = getZVector(); KMatrix rotxz; rotxz.rotate (x, 0.0, z); KMatrix roty; roty.rotate (0.0, y, 0.0); KVector yunit(0.0, 1.0, 0.0), zunit (0.0, 0.0, 1.0); KVector lookperp = look.perpendicular (yunit); // y-axis rotation if (lookperp.length() > 0) { look = roty * lookperp + look.parallel(yunit); up = roty * up.perpendicular(yunit) + up.parallel(yunit); } // x & z-axis rotation KMatrix transmat(up.cross(look), up, look); KVector uprotxz = rotxz * yunit; KVector lookrotxz = rotxz * zunit; up = transmat * uprotxz; look = transmat * lookrotxz; *((KMatrix*)this) = KMatrix(up.cross(look), up, look); setPosition( savePos + eye_distance * getZVector()); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::apply () { glViewport(vp[0], vp[1], vp[2], vp[3]); gluPerspective (fov, getCurrentAspectRatio(), znear, zfar); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); KVector lookAt = getLookAtPosition(); gluLookAt( matrix[TX], matrix[TY], matrix[TZ], lookAt[X], lookAt[Y], lookAt[Z], matrix[4], matrix[5], matrix[6]); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::focusOn ( const KVector & pos ) { setPosition (pos + eye_distance*getZVector()); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::setEyeDistance ( GLfloat ed ) { KVector lookAtPos = getLookAtPosition(); eye_distance = kMin( kMax(znear, ed), 0.9 * zfar ); setPosition(lookAtPos + eye_distance * getZVector()); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::setLookAtPosition ( const KVector & lookAtPos ) { KVector up = getYVector(); KVector newLook = (lookAtPos - getPosition()).normal(); KVector newRight = up.cross(newLook).normal(); KVector newUp = newLook.cross(newRight).normal(); setXVector(newRight); setYVector(newUp); setZVector(newLook); eye_distance = (lookAtPos - getPosition()).length(); } // -------------------------------------------------------------------------------------------------------- KVector KPerspectiveProjection::getLookAtPosition () const { return (-eye_distance * getZVector() + getPosition()); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::reset () { fov = 60.0; eye_distance = znear; KMatrix::reset(); translate(0.0, 0.0, eye_distance); } // -------------------------------------------------------------------------------------------------------- void KPerspectiveProjection::setXML ( std::string & xml ) { kXMLParseNamedOpenTag(xml, "Projection"); kXMLParseValue(xml, "matrix", KDL_XML_VALUE_MATRIX, this); kXMLParseValue(xml, "eye distance", KDL_XML_VALUE_FLOAT, &eye_distance, false); kXMLParseNamedCloseTag(xml, "Projection"); } // -------------------------------------------------------------------------------------------------------- std::string KPerspectiveProjection::getXML ( int depth ) const { std::string xml; xml += kXMLOpenTag("Projection", "", depth); xml += kXMLValue("matrix", KDL_XML_VALUE_MATRIX, this, depth+KDL_XML_INDENT); xml += kXMLValue("eye distance", KDL_XML_VALUE_FLOAT, &eye_distance, depth+KDL_XML_INDENT); xml += kXMLCloseTag("Projection", depth); return xml; } kiki/kodilib/src/types/KPerspectiveProjection.h0000666000000000000000000000212107644705705020703 0ustar rootroot/* * KPerspectiveProjection.h * kodisein */ #ifndef __KPerspectiveProjection #define __KPerspectiveProjection #include "KProjection.h" // -------------------------------------------------------------------------------------------------------- class KPerspectiveProjection : public KProjection { INTROSPECTION public: KPerspectiveProjection ( GLfloat = 60.0, GLfloat = 0.1, GLfloat = 300.0 ); KPerspectiveProjection ( const KProjection & ); virtual KProjection * copy () const; virtual void apply (); virtual void focusOn ( const KVector & ); virtual void rotate ( const GLfloat, const GLfloat, const GLfloat ); virtual void reset (); virtual KVector getLookAtPosition () const; virtual void setLookAtPosition ( const KVector & lookAtPos ); virtual void setEyeDistance ( GLfloat ); virtual std::string getXML ( int = 0 ) const; virtual void setXML ( std::string & ); }; #endif kiki/kodilib/src/types/KProjection.cpp0000666000000000000000000004116707645543103017032 0ustar rootroot/* * KProjection.cpp * kodisein */ #include "KProjection.h" #include "KEventHandler.h" #include "KConsole.h" #include #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KProjection, KMatrix) // -------------------------------------------------------------------------------------------------------- KProjection::KProjection ( float zn, float zf ) : KMatrix () { aspect_ratio = -1.0; znear = zn; zfar = zf; fov = 0.0; eye_distance = 5.0; border[0] = border[1] = border[2] = border[3] = 0; setViewport(0.0, 0.0, 1.0, 1.0); KEventHandler::notification_center.addReceiverCallback (this, (KCallbackPtr)&KProjection::updateViewport, KDL_NOTIFICATION_TYPE_VIDEO_MODE_CHANGED); KEventHandler::notification_center.addReceiverCallback (this, (KCallbackPtr)&KProjection::updateViewport, KDL_NOTIFICATION_TYPE_WINDOW_SIZE_CHANGED); } // -------------------------------------------------------------------------------------------------------- KProjection::~KProjection () { KEventHandler::notification_center.removeReceiver (this); } // -------------------------------------------------------------------------------------------------------- KProjection::KProjection ( const KProjection & p ) : KMatrix ( p ) { znear = p.znear; zfar = p.zfar; aspect_ratio = p.aspect_ratio; border[0] = p.border[0]; border[1] = p.border[1]; border[2] = p.border[2]; border[3] = p.border[3]; fov = p.fov; eye_distance = p.eye_distance; setViewport(p.viewport[0], p.viewport[1], p.viewport[2], p.viewport[3]); } // -------------------------------------------------------------------------------------------------------- void KProjection::initProjection () { glMatrixMode(GL_PROJECTION); glLoadIdentity(); apply(); } // -------------------------------------------------------------------------------------------------------- void KProjection::updateViewport () { KSize screenSize = KEventHandler::getScreenSize(); vp[0] = (int)(viewport[0] * (float)screenSize.w + (int)border[0]); vp[1] = (int)(viewport[1] * (float)screenSize.h + (int)border[1]); vp[2] = (int)(viewport[2] * (float)screenSize.w - (int)(border[0]+border[2])); vp[3] = (int)(viewport[3] * (float)screenSize.h - (int)(border[1]+border[3])); } // -------------------------------------------------------------------------------------------------------- /* returns the position of the locator in "viewport coordinates" */ KPosition KProjection::getLocatorViewportPos () const { return (KEventHandler::getMousePos() - getViewportScreenPos()); } // -------------------------------------------------------------------------------------------------------- float KProjection::getCurrentAspectRatio () const { KSize viewportSize = getViewportSize(); return (aspect_ratio <= 0.0) ? ((float)viewportSize.w/viewportSize.h) : aspect_ratio; } // -------------------------------------------------------------------------------------------------------- void KProjection::getSaveMatrices (GLdouble * model, GLdouble * proj, GLint * view) { glMatrixMode(GL_MODELVIEW); glPushMatrix(); glMatrixMode(GL_PROJECTION); glPushMatrix(); initProjection(); glGetDoublev(GL_PROJECTION_MATRIX, proj); glGetDoublev(GL_MODELVIEW_MATRIX, model); glGetIntegerv(GL_VIEWPORT, (GLint*)view); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } // -------------------------------------------------------------------------------------------------------- void KProjection::getXYValuesForScreenDeltasAndMatrix (float dx, float dy, const KMatrix & cm, float * x, float * y ) { KMatrix m(cm); GLdouble dxpox, dxpoy, dypox, dypoy, ox, oy, xpox, xpoy, ypox, ypoy, tz, model[16], proj[16]; GLint view[4]; getSaveMatrices(model, proj, view); GLdouble screenUnits, xx, xy, yx, yy, zx, zy; gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ox, &oy, &tz); gluProject(m[TX] + 1.0, m[TY], m[TZ], model, proj, view, &xx, &xy, &tz); gluProject(m[TX], m[TY] + 1.0, m[TZ], model, proj, view, &yx, &yy, &tz); gluProject(m[TX], m[TY], m[TZ] + 1.0, model, proj, view, &zx, &zy, &tz); screenUnits=(kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ox, &oy, &tz); KMatrix r(m); r.translate(1.0, 0.0, 0.0); gluProject(r[TX], r[TY], r[TZ], model, proj, view, &xpox, &xpoy, &tz); m.translate(0.0, 1.0, 0.0); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ypox, &ypoy, &tz); dxpox = xpox - ox; dxpoy = xpoy - oy; dypox = ypox - ox; dypoy = ypoy - oy; if (kAbs(dxpox) >= kAbs(dypox)) // x-axis differnce in x-direction is bigger -> map x movement to x { if (dxpox >= 0) *x = dx/screenUnits; // positive movement in x direction else *x = -dx/screenUnits; // negative movement in x direction if (dypoy >= 0) *y = dy/screenUnits; // positive movement in y direction else *y = -dy/screenUnits; // negative movement in y direction } else // x-axis differnce in y-direction is bigger -> map x movement to y { if (dypox >= 0) *y = dx/screenUnits; // positive movement in x direction else *y = -dx/screenUnits; // negative movement in x direction if (dxpoy >= 0) *x = dy/screenUnits; // positive movement in y direction else *x = -dy/screenUnits; // negative movement in y direction } } // -------------------------------------------------------------------------------------------------------- void KProjection::getXZValuesForScreenDeltasAndMatrix ( float dx, float dy, const KMatrix & cm, float * x, float * z ) { KMatrix m(cm); GLdouble dxpox, dxpoy, dypox, dypoy, ox, oy, xpox, xpoy, ypox, ypoy, tz, model[16], proj[16]; GLint view[4]; getSaveMatrices(model, proj, view); GLdouble screenUnits, xx, xy, yx, yy, zx, zy; gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ox, &oy, &tz); gluProject(m[TX] + 1.0, m[TY], m[TZ], model, proj, view, &xx, &xy, &tz); gluProject(m[TX], m[TY] + 1.0, m[TZ], model, proj, view, &yx, &yy, &tz); gluProject(m[TX], m[TY], m[TZ] + 1.0, model, proj, view, &zx, &zy, &tz); screenUnits=(kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ox, &oy, &tz); KMatrix r(m); r.translate(1.0, 0.0, 0.0); gluProject(r[TX], r[TY], r[TZ], model, proj, view, &xpox, &xpoy, &tz); m.translate(0.0, 0.0, 1.0); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ypox, &ypoy, &tz); dxpox = xpox - ox; dxpoy = xpoy - oy; dypox = ypox - ox; dypoy = ypoy - oy; if (kAbs(dxpox) >= kAbs(dypox)) // x-axis differnce in x-direction is bigger -> map x movement to x { if (dxpox >= 0) *x = dx/screenUnits; // positive movement in x direction else *x = -dx/screenUnits; // negative movement in x direction if (dypoy >= 0) *z = dy/screenUnits; // positive movement in y direction else *z = -dy/screenUnits; // negative movement in y direction } else // x-axis differnce in y-direction is bigger -> map x movement to y { if (dypox >= 0) *z = dx/screenUnits; // positive movement in x direction else *z = -dx/screenUnits; // negative movement in x direction if (dxpoy >= 0) *x = dy/screenUnits; // positive movement in y direction else *x = -dy/screenUnits; // negative movement in y direction } } // -------------------------------------------------------------------------------------------------------- void KProjection::getYZValuesForScreenDeltasAndMatrix ( float dx, const float dy, const KMatrix & cm, float * y, float * z ) { KMatrix m(cm); GLdouble dxpox, dxpoy, dypox, dypoy, ox, oy, xpox, xpoy, ypox, ypoy, tz, model[16], proj[16]; GLint view[4]; getSaveMatrices(model, proj, view); GLdouble screenUnits, xx, xy, yx, yy, zx, zy; gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ox, &oy, &tz); gluProject(m[TX] + 1.0, m[TY], m[TZ], model, proj, view, &xx, &xy, &tz); gluProject(m[TX], m[TY] + 1.0, m[TZ], model, proj, view, &yx, &yy, &tz); gluProject(m[TX], m[TY], m[TZ] + 1.0, model, proj, view, &zx, &zy, &tz); screenUnits=(kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ox, &oy, &tz); KMatrix r(m); r.translate(0.0, 1.0, 0.0); gluProject(r[TX], r[TY], r[TZ], model, proj, view, &xpox, &xpoy, &tz); m.translate(0.0, 0.0, 1.0); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &ypox, &ypoy, &tz); dxpox = xpox - ox; dxpoy = xpoy - oy; dypox = ypox - ox; dypoy = ypoy - oy; if (kAbs(dxpox) >= kAbs(dypox)) // x-axis differnce in x-direction is bigger -> map x movement to x { if (dxpox >= 0) *y = dx/screenUnits; // positive movement in x direction else *y = -dx/screenUnits; // negative movement in x direction if (dypoy >= 0) *z = dy/screenUnits; // positive movement in y direction else *z = -dy/screenUnits; // negative movement in y direction } else // x-axis differnce in y-direction is bigger -> map x movement to y { if (dypox >= 0) *z = dx/screenUnits; // positive movement in x direction else *z = -dx/screenUnits; // negative movement in x direction if (dxpoy >= 0) *y = dy/screenUnits; // positive movement in y direction else *y = -dy/screenUnits; // negative movement in y direction } } // -------------------------------------------------------------------------------------------------------- float KProjection::getXValueForScreenDeltasAndMatrix (float dx, float dy, const KMatrix & cm) { KMatrix m(cm); GLdouble maxDelta, dox, doy, ox, oy, oxpo, oypo, z, model[16], proj[16]; GLint view[4]; getSaveMatrices(model, proj, view); GLdouble screenUnits, xx, xy, yx, yy, zx, zy; GLdouble mx = m[TX], my = m[TY], mz = m[TZ]; gluProject(mx, my, mz, model, proj, view, &ox, &oy, &z); gluProject(mx + 1.0, my, mz, model, proj, view, &xx, &xy, &z); gluProject(mx, my + 1.0, mz, model, proj, view, &yx, &yy, &z); gluProject(mx, my, mz + 1.0, model, proj, view, &zx, &zy, &z); screenUnits=(kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); gluProject(mx, my, mz, model, proj, view, &ox, &oy, &z); m.translate(1.0, 0.0, 0.0); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &oxpo, &oypo, &z); dox = oxpo - ox; doy = oypo - oy; if (dox >= 0 && doy >= 0) maxDelta = kAbsMax(dx, dy); // upper right - keep directions else if (dox <= 0 && doy <= 0) maxDelta = -kAbsMax(dx, dy); // lower left - invert both else if (dox < 0) maxDelta = (kAbs(dx) > kAbs(dy)) ? -dx : dy; // upper left - invert x else maxDelta = (kAbs(dx) > kAbs(dy)) ? dx : -dy; // lower right - invert y return (maxDelta/screenUnits); } // -------------------------------------------------------------------------------------------------------- float KProjection::getYValueForScreenDeltasAndMatrix ( float dx, float dy, const KMatrix & cm) { KMatrix m(cm); GLdouble maxDelta, dox, doy, ox, oy, oxpo, oypo, z, model[16], proj[16]; GLint view[4]; getSaveMatrices(model, proj, view); GLdouble screenUnits, xx, xy, yx, yy, zx, zy; GLdouble mx = m[TX], my = m[TY], mz = m[TZ]; gluProject(mx, my, mz, model, proj, view, &ox, &oy, &z); gluProject(mx + 1.0, my, mz, model, proj, view, &xx, &xy, &z); gluProject(mx, my + 1.0, mz, model, proj, view, &yx, &yy, &z); gluProject(mx, my, mz + 1.0, model, proj, view, &zx, &zy, &z); screenUnits=(kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); gluProject(mx, my, mz, model, proj, view, &ox, &oy, &z); m.translate(0.0, 1.0, 0.0); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &oxpo, &oypo, &z); dox = oxpo - ox; doy = oypo - oy; if (dox >= 0 && doy >= 0) maxDelta = kAbsMax(dx, dy); // upper right - keep directions else if (dox <= 0 && doy <= 0) maxDelta = -kAbsMax(dx, dy); // lower left - invert both else if (dox < 0) maxDelta = (kAbs(dx) > kAbs(dy)) ? -dx : dy; // upper left - invert x else maxDelta = (kAbs(dx) > kAbs(dy)) ? dx : -dy; // lower right - invert y return (maxDelta/screenUnits); } // -------------------------------------------------------------------------------------------------------- float KProjection::getZValueForScreenDeltasAndMatrix ( float dx, float dy, const KMatrix & cm) { KMatrix m(cm); GLdouble maxDelta, dox, doy, ox, oy, oxpo, oypo, z, model[16], proj[16]; GLint view[4]; getSaveMatrices(model, proj, view); GLdouble screenUnits, xx, xy, yx, yy, zx, zy; GLdouble mx = m[TX], my = m[TY], mz = m[TZ]; gluProject(mx, my, mz, model, proj, view, &ox, &oy, &z); gluProject(mx + 1.0, my, mz, model, proj, view, &xx, &xy, &z); gluProject(mx, my + 1.0, mz, model, proj, view, &yx, &yy, &z); gluProject(mx, my, mz + 1.0, model, proj, view, &zx, &zy, &z); screenUnits=(kMax(kMax(kAbs(xx-ox)+kAbs(xy-oy),kAbs(yx-ox)+kAbs(yy-oy)),kAbs(zx-ox)+kAbs(zy-oy))); gluProject(mx, my, mz, model, proj, view, &ox, &oy, &z); m.translate(0.0, 0.0, 1.0); gluProject(m[TX], m[TY], m[TZ], model, proj, view, &oxpo, &oypo, &z); dox = oxpo - ox; doy = oypo - oy; if (dox >= 0 && doy >= 0) maxDelta = kAbsMax(dx, dy); // upper right - keep directions else if (dox <= 0 && doy <= 0) maxDelta = -kAbsMax(dx, dy); // lower left - invert both else if (dox < 0) maxDelta = (kAbs(dx) > kAbs(dy)) ? -dx : dy; // upper left - invert x else maxDelta = (kAbs(dx) > kAbs(dy)) ? dx : -dy; // lower right - invert y return (maxDelta/screenUnits); } // -------------------------------------------------------------------------------------------------------- bool KProjection::getScreenCoordinates ( const KVector & pos, double * sx, double * sy) { GLdouble sz, model[16], proj[16]; GLint view[4]; getSaveMatrices (model, proj, view); if (gluProject(pos[X], pos[Y], pos[Z], model, proj, view, sx, sy, &sz)) { return true; } else { KConsole::printError("unable to calculate projection screen coordinates!"); return false; } } // -------------------------------------------------------------------------------------------------------- bool KProjection::moveObjectRelativeToWindow ( const KPosition & delta, KVector & pos ) { GLdouble wx, wy, wz, model[16], proj[16]; GLint view[4]; getSaveMatrices (model, proj, view); if (gluProject(pos[X], pos[Y], pos[Z], model, proj, view, &wx, &wy, &wz)) { GLdouble ox, oy, oz; if (gluUnProject(wx+delta.x, wy+delta.y, wz, model, proj, view, &ox, &oy, &oz) == false) { return false; } pos = KVector(ox, oy, oz); } else { return false; } return true; } // -------------------------------------------------------------------------------------------------------- void KProjection::setViewportBorder ( unsigned int l, unsigned int b, unsigned int r, unsigned int t ) { border[0] = l; border[1] = b; border[2] = r; border[3] = t; updateViewport(); } // -------------------------------------------------------------------------------------------------------- void KProjection::setViewport ( float l, float b, float w, float h ) { viewport[0] = l; viewport[1] = b; viewport[2] = w; viewport[3] = h; updateViewport(); } // -------------------------------------------------------------------------------------------------------- void KProjection::setFov ( float f ) { fov = kMax(2.0, kMin(f, 175.0)); } // -------------------------------------------------------------------------------------------------------- void KProjection::setEyeDistance ( float ed ) { eye_distance = kMin( kMax(znear, ed), 0.9 * zfar ); } kiki/kodilib/src/types/KProjection.h0000666000000000000000000000766307644705706016512 0ustar rootroot/* * KProjection.h * kodisein */ #ifndef __KProjection #define __KProjection #include "KMatrix.h" #include // -------------------------------------------------------------------------------------------------------- class KProjection : public KMatrix { INTROSPECTION protected: float fov; float eye_distance; float znear, zfar; float aspect_ratio; float viewport[4]; unsigned int border[4]; int vp[4]; public: KProjection ( float = 0.5, float = 200.0 ); KProjection ( const KProjection & ); virtual ~KProjection (); virtual void initProjection (); virtual void apply () = 0; virtual KProjection * copy () const = 0; void getSaveMatrices ( GLdouble *, GLdouble *, GLint * ); bool moveObjectRelativeToWindow ( const KPosition &, KVector & ); bool getScreenCoordinates ( const KVector &, double *, double *); float getXValueForScreenDeltasAndMatrix (float, float, const KMatrix &); float getYValueForScreenDeltasAndMatrix (float, float, const KMatrix &); float getZValueForScreenDeltasAndMatrix (float, float, const KMatrix &); void getXYValuesForScreenDeltasAndMatrix (float, float, const KMatrix &, float *, float *); void getXZValuesForScreenDeltasAndMatrix (float, float, const KMatrix &, float *, float *); void getYZValuesForScreenDeltasAndMatrix (float, float, const KMatrix &, float *, float *); virtual void focusOn ( const KVector & ) {} float getZFar () const { return zfar; } float getZNear () const { return znear; } void setZFar ( float z ) { zfar = z; } void setZNear ( float z ) { znear = z; } virtual void setViewportRelativePosX ( float x ) { viewport[0] = x; } virtual void setViewportRelativePosY ( float y ) { viewport[1] = y; } virtual void setViewportRelativeWidth ( float w ) { viewport[2] = w; } virtual void setViewportRelativeHeight ( float h ) { viewport[3] = h; } virtual void setAspectRatio ( float ar ) { aspect_ratio = ar; } virtual void setViewportBorder ( unsigned int l, unsigned int b, unsigned int r, unsigned int t ); virtual void setViewport ( float l, float b, float w, float h ); virtual void setEyeDistance ( float ); virtual void setFov ( float ); virtual void updateViewport (); void setEyeDist ( float f ) { eye_distance = f; } KSize getViewportSize () const { return KSize(vp[2], vp[3]); } KPosition getViewportScreenPos () const { return KPosition(vp[0], vp[1]); } int getViewportTopBorder () const { return border[3]; } virtual KPosition getLocatorViewportPos () const; float getViewportRelativePosX () const { return viewport[0]; } float getViewportRelativePosY () const { return viewport[1]; } float getViewportRelativeWidth () const { return viewport[2]; } float getViewportRelativeHeight () const { return viewport[3]; } float getCurrentAspectRatio () const; float getAspectRatio () const { return aspect_ratio; } const int * getViewport () const { return vp; } const float * getViewportRelative () const { return viewport; } float getEyeDistance () const { return eye_distance; } float getFov () const { return fov; } virtual std::string getXML ( int = 0 ) const { return ""; } virtual void setXML ( std::string & ) {} }; #endif kiki/kodilib/src/types/KQuaternion.cpp0000666000000000000000000000267007644705706017047 0ustar rootroot/* * KQuaternion.cpp * kodisein */ #include "KQuaternion.h" // -------------------------------------------------------------------------------------------------------- KQuaternion KQuaternion::slerp ( const KQuaternion & quat, float t ) const { float to1[4]; double omega, cosom, sinom, scale0, scale1; // calc cosine cosom = x * quat.x + y * quat.y + z * quat.z + w * quat.w; // adjust signs (if necessary) if ( cosom < 0.0 ) { cosom = -cosom; to1[0] = - quat.x; to1[1] = - quat.y; to1[2] = - quat.z; to1[3] = - quat.w; } else { to1[0] = quat.x; to1[1] = quat.y; to1[2] = quat.z; to1[3] = quat.w; } // calculate coefficients if ( (1.0 - cosom) > 0.001 ) // ??? { // standard case (slerp) omega = acos(cosom); sinom = sin(omega); scale0 = sin((1.0 - t) * omega) / sinom; scale1 = sin(t * omega) / sinom; } else // "from" and "to" quaternions are very close -> we can do a linear interpolation { scale0 = 1.0 - t; scale1 = t; } // calculate final values return KQuaternion (scale0 * w + scale1 * to1[3], scale0 * x + scale1 * to1[0], scale0 * y + scale1 * to1[1], scale0 * z + scale1 * to1[2]); } kiki/kodilib/src/types/KQuaternion.h0000666000000000000000000001144207644705706016511 0ustar rootroot/* * KQuaternion.h * kodisein */ #ifndef __KQuaternion #define __KQuaternion #include "KVector.h" #include "KMatrix.h" #include // -------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------- class KQuaternion { public: float w, x, y, z; KQuaternion ( float _w = 1.0, float _x = 0.0, float _y = 0.0, float _z = 0.0 ) { w = _w; x = _x; y = _y; z = _z; } KQuaternion ( const KQuaternion & q ) { w = q.w; x = q.x; y = q.y; z = q.z; } KQuaternion ( const KVector & v ) { w = 0.0; x = v[X]; y = v[Y]; z = v[Z]; } static KQuaternion rotationAroundVector ( float theta, const KVector & vector ) { KVector v(vector); v.normalize(); float t = DEG2RAD(theta)/2.0; float s = sin(t); return KQuaternion(cos(t), v[X]*s, v[Y]*s, v[Z]*s).normalize(); } KVector rotate ( const KVector & v ) const { KQuaternion result = (*this) * KQuaternion(v) * this->getConjugate(); return KVector(result.x, result.y, result.z); } KQuaternion & normalize () { float l = sqrt(w*w + x*x + y*y + z*z); if (l != 0.0) { w /= l; x /= l; y /= l; z /= l; } return (*this); } KQuaternion & invert () { float l = sqrt(w*w + x*x + y*y + z*z); if (l != 0.0) { w /= l; x = -x/l; y = -y/l; z = -z/l; } return (*this); } void reset () { w=1.0; x=y=z=0.0; } KQuaternion & conjugate () { x = -x; y = -y; z = -z; return (*this); } KQuaternion getNormal () const { return KQuaternion(*this).normalize(); } KQuaternion getConjugate () const { return KQuaternion(*this).conjugate(); } KQuaternion getInverse () const { return KQuaternion(*this).invert(); } float length () const { return sqrt(w*w + x*x + y*y + z*z); } void glRotate () const { KMatrix(*this).glMultMatrix(); } KQuaternion slerp ( const KQuaternion & quat, float t ) const; operator KVector() const { return KVector(x, y, z); } KQuaternion & operator += ( float f ) { w += f; return(*this); } KQuaternion & operator -= ( float f ) { w -= f; return(*this); } KQuaternion & operator *= ( float f ) { w *= f; x *= f; y *= f; z *= f; return(*this); } KQuaternion & operator /= ( float f ) { w /= f; x /= f; y /= f; z /= f; return(*this); } KQuaternion & operator += ( const KQuaternion & quat ) { w += quat.w; x += quat.x; y += quat.y; z += quat.z; return (*this); } KQuaternion & operator -= ( const KQuaternion & quat ) { w -= quat.w; x -= quat.x; y -= quat.y; z -= quat.z; return (*this); } KQuaternion & operator *= ( const KQuaternion & quat ) { float A, B, C, D, E, F, G, H; A = (w + x)*(quat.w + quat.x); B = (z - y)*(quat.y - quat.z); C = (w - x)*(quat.y + quat.z); D = (y + z)*(quat.w - quat.x); E = (x + z)*(quat.x + quat.y); F = (x - z)*(quat.x - quat.y); G = (w + y)*(quat.w - quat.z); H = (w - y)*(quat.w + quat.z); w = B +(-E - F + G + H)/2; x = A - (E + F + G + H)/2; y = C + (E - F + G - H)/2; z = D + (E - F - G + H)/2; return (*this); } KQuaternion operator * ( const KQuaternion & quat ) const { return (KQuaternion(*this) *= quat); } }; // -------------------------------------------------------------------------------------------------------- inline KQuaternion operator - (const KQuaternion & q) { return KQuaternion(-q.w,-q.x,-q.y,-q.z); } // -------------------------------------------------------------------------------------------------------- inline KQuaternion operator * ( float f, const KQuaternion & quat ) { KQuaternion result(quat); result *= f; return result; } // -------------------------------------------------------------------------------------------------------- inline bool operator == (const KQuaternion & lquat, const KQuaternion & rquat) { return ((rquat.w == lquat.w) && (rquat.x == lquat.x) && (rquat.y == lquat.y) && (rquat.z == lquat.z)); } // -------------------------------------------------------------------------------------------------------- inline bool operator != (const KQuaternion & lquat, const KQuaternion & rquat) { return(!(lquat == rquat)); } #endif kiki/kodilib/src/types/KSeparatedMatrix.cpp0000666000000000000000000001101707644705706020012 0ustar rootroot/* * KSeparatedMatrix.cpp * kodisein */ #include "KSeparatedMatrix.h" KDL_CLASS_INTROSPECTION_1 (KSeparatedMatrix, KMatrix) // -------------------------------------------------------------------------------------------------------- KSeparatedMatrix::KSeparatedMatrix () : KMatrix () { scl[X] = 1.0; scl[Y] = 1.0; scl[Z] = 1.0; rot[X] = 0.0; rot[Y] = 0.0; rot[Z] = 0.0; } // -------------------------------------------------------------------------------------------------------- KSeparatedMatrix::KSeparatedMatrix ( const KSeparatedMatrix & m ) : KMatrix (m) { scl[X] = m.scl[X]; scl[Y] = m.scl[Y]; scl[Z] = m.scl[Z]; rot[X] = m.rot[X]; rot[Y] = m.rot[Y]; rot[Z] = m.rot[Z]; } // -------------------------------------------------------------------------------------------------------- KSeparatedMatrix & KSeparatedMatrix::operator= ( const KSeparatedMatrix & m ) { KMatrix::operator=(m); scl[X] = m.scl[X]; scl[Y] = m.scl[Y]; scl[Z] = m.scl[Z]; rot[X] = m.rot[X]; rot[Y] = m.rot[Y]; rot[Z] = m.rot[Z]; return (*this); } // -------------------------------------------------------------------------------------------------------- KSeparatedMatrix & KSeparatedMatrix::operator= ( const KMatrix & m ) { KMatrix::operator=(m); scl[X] = 1.0; scl[Y] = 1.0; scl[Z] = 1.0; rot[X] = 0.0; rot[Y] = 0.0; rot[Z] = 0.0; return (*this); } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::reset() { KMatrix::reset(); scl[X] = 1.0; scl[Y] = 1.0; scl[Z] = 1.0; rot[X] = 0.0; rot[Y] = 0.0; rot[Z] = 0.0; } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::rotate ( GLfloat x, GLfloat y, GLfloat z ) { KMatrix::rotate(x, y, z); rot[X] += x; rot[Y] += y; rot[Z] += z; } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::scale ( GLfloat x, GLfloat y, GLfloat z ) { KMatrix::scale(x, y, z); scl[X] *= x; scl[Y] *= y; scl[Z] *= z; } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::setSX ( GLfloat x ) { GLfloat tx = getTX(), ty = getTY(), tz = getTZ(); GLfloat sy = scl[Y], sz = scl[Z]; GLfloat rx = rot[X], ry = rot[Y], rz = rot[Z]; reset(); translate(tx, ty, tz); rotate(rx, ry, rz); scale(x, sy, sz); } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::setSY ( GLfloat y ) { GLfloat tx = getTX(), ty = getTY(), tz = getTZ(); GLfloat sx = scl[X], sz = scl[Z]; GLfloat rx = rot[X], ry = rot[Y], rz = rot[Z]; reset(); translate(tx, ty, tz); rotate(rx, ry, rz); scale(sx, y, sz); } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::setSZ ( GLfloat z ) { GLfloat tx = getTX(), ty = getTY(), tz = getTZ(); GLfloat sx = scl[X], sy = scl[Y]; GLfloat rx = rot[X], ry = rot[Y], rz = rot[Z]; reset(); translate(tx, ty, tz); rotate(rx, ry, rz); scale(sx, sy, z); } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::setRX ( GLfloat x ) { GLfloat tx = getTX(), ty = getTY(), tz = getTZ(); GLfloat sx = scl[X], sy = scl[Y], sz = scl[Z]; GLfloat ry = rot[Y], rz = rot[Z]; reset(); translate(tx, ty, tz); rotate(x, ry, rz); scale(sx, sy, sz); } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::setRY ( GLfloat y ) { GLfloat tx = getTX(), ty = getTY(), tz = getTZ(); GLfloat sx = scl[X], sy = scl[Y], sz = scl[Z]; GLfloat rx = rot[X], rz = rot[Z]; reset(); translate(tx, ty, tz); rotate(rx, y, rz); scale(sx, sy, sz); } // -------------------------------------------------------------------------------------------------------- void KSeparatedMatrix::setRZ ( GLfloat z ) { GLfloat tx = getTX(), ty = getTY(), tz = getTZ(); GLfloat sx = scl[X], sy = scl[Y], sz = scl[Z]; GLfloat rx = rot[X], ry = rot[Y]; reset(); translate(tx, ty, tz); rotate(rx, ry, z); scale(sx, sy, sz); } kiki/kodilib/src/types/KSeparatedMatrix.h0000666000000000000000000000236507644705706017465 0ustar rootroot/* * KSeparatedMatrix.h * kodisein */ #ifndef __KSeparatedMatrix #define __KSeparatedMatrix #include "KMatrix.h" class KSeparatedMatrix : public KMatrix { INTROSPECTION protected: GLfloat scl[3]; GLfloat rot[3]; public: KSeparatedMatrix (); KSeparatedMatrix ( const KSeparatedMatrix & ); KSeparatedMatrix & operator= ( const KSeparatedMatrix & ); KSeparatedMatrix & operator= ( const KMatrix & ); void reset (); void scale ( GLfloat x, GLfloat y, GLfloat z); void rotate ( const GLfloat x, const GLfloat y, const GLfloat z = 0.0 ); void setSX ( GLfloat x ); void setSY ( GLfloat y ); void setSZ ( GLfloat z ); void setRX ( GLfloat x ); void setRY ( GLfloat y ); void setRZ ( GLfloat z ); GLfloat getSX ( ) const { return scl[X]; } GLfloat getSY ( ) const { return scl[Y]; } GLfloat getSZ ( ) const { return scl[Z]; } GLfloat getRX ( ) const { return rot[X]; } GLfloat getRY ( ) const { return rot[Y]; } GLfloat getRZ ( ) const { return rot[Z]; } }; #endif kiki/kodilib/src/types/KTexture.cpp0000666000000000000000000001374207645543104016355 0ustar rootroot/* * KTexture.cpp * kodisein */ #include "KTexture.h" #include "KConsole.h" #include "KTools.h" #include #include #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION (KTexture) // -------------------------------------------------------------------------------------------------------- KTexture::KTexture () : KObject () { texture_id = 0; width = 0; height = 0; bpp = 0; filename = ""; } // -------------------------------------------------------------------------------------------------------- KTexture::KTexture ( const std::string & fn) : KObject () { texture_id = 0; width = 0; height = 0; bpp = 0; filename = ""; setFileName(fn); } // -------------------------------------------------------------------------------------------------------- KTexture::~KTexture () { if (texture_id) { glDeleteTextures(1, &texture_id); } } // -------------------------------------------------------------------------------------------------------- void KTexture::setFileName ( const std::string & fn ) { if (fn != filename) { filename = fn; if (!loadFile()) { KConsole::printError(kStringPrintf("unable to load texture file %s", filename.c_str())); } } } // -------------------------------------------------------------------------------------------------------- bool KTexture::loadFile () { SDL_Surface * imageSurface = IMG_Load (filename.c_str()); if (imageSurface) { SDL_Surface * surface = SDL_ConvertSurface(imageSurface, &KDL_PIXEL_FORMAT, SDL_SWSURFACE); SDL_FreeSurface(imageSurface); if (surface) { if (texture_id) { glDeleteTextures(1, &texture_id); } glGenTextures (1, &texture_id); if (!texture_id) { SDL_FreeSurface (surface); return false; } // ...................................................... map width & height to power of 2 void * scaleImageBuffer = NULL; width = 2; height = 2; while (width <= surface->w/2) width *= 2; while (height <= surface->h/2) height *= 2; // ...................................................... check size before scaling bool foundValidSize = false; while (foundValidSize == false) { GLint checkWidth, checkHeight; glTexImage2D (GL_PROXY_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, surface->pixels); glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &checkWidth); glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &checkHeight); if (checkHeight != height || checkWidth != width) { KConsole::printf("WARNING cannot handle texture size (%dx%d)", width, height); width /= 2; height /= 2; if (width == 1 || height == 1) { // paranoid -> maybe another problem than size occured KConsole::printError("unable to handle texture!"); SDL_FreeSurface (surface); return false; } KConsole::printf("WARNING trying texture size (%dx%d)", width, height); } else { foundValidSize = true; } } // ...................................................... power of 2 scaling if (width != surface->w || height != surface->h) { KConsole::printf("WARNING texture file %s:", filename.c_str()); KConsole::printf("WARNING size (%dx%d) not a power of 2!", surface->w, surface->h); KConsole::printf("WARNING scaling to size (%dx%d)", width, height); if ((scaleImageBuffer = malloc (width * height * sizeof(GLuint))) == NULL) { KConsole::printError("unable to allocate memory for scaling "); return false; } if (gluScaleImage(GL_RGBA, surface->w, surface->h, GL_UNSIGNED_INT_8_8_8_8, surface->pixels, width, height, GL_UNSIGNED_INT_8_8_8_8, scaleImageBuffer) != 0) { KConsole::printError("unable to scale texture file %s!", filename.c_str()); free (scaleImageBuffer); SDL_FreeSurface (surface); return false; } glBindTexture (GL_TEXTURE_2D, texture_id); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, scaleImageBuffer); free (scaleImageBuffer); } else { glBindTexture (GL_TEXTURE_2D, texture_id); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, surface->pixels); } glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); SDL_FreeSurface (surface); return true; } } return false; } kiki/kodilib/src/types/KTexture.h0000666000000000000000000000154407644705706016026 0ustar rootroot/* * KTexture.h * kodisein */ #ifndef __KTexture #define __KTexture #include "KNotificationObject.h" #if defined(__APPLE__) && defined(__MACH__) #include #else #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include #endif #include #endif class KTexture : public KObject { INTROSPECTION public: int bpp; int width; int height; GLuint texture_id; std::string filename; KTexture (); KTexture ( const std::string & ); virtual ~KTexture (); bool loadFile (); void setFileName ( const std::string & ); std::string getFileName () const { return filename; } GLuint getTextureId () const { return texture_id; } }; #endif kiki/kodilib/src/types/KTrash.cpp0000666000000000000000000000157107644705706016002 0ustar rootroot/* * KTrash.cpp * kodisein */ #include "KTrash.h" #include "KNotificationObject.h" #include std::vector KTrash::trash_can; // -------------------------------------------------------------------------------------------------------- void KTrash::addObject ( KObject * object ) { std::vector::iterator result = std::find (KTrash::trash_can.begin(), KTrash::trash_can.end(), object); if (result == KTrash::trash_can.end()) { KTrash::trash_can.push_back(object); } } // -------------------------------------------------------------------------------------------------------- void KTrash::recycle () { std::vector::iterator iter = KTrash::trash_can.begin(); if (iter != KTrash::trash_can.end()) { delete (*iter); iter++; } trash_can.clear(); } kiki/kodilib/src/types/KTrash.h0000666000000000000000000000061207644705706015442 0ustar rootroot/* * KTrash.h * kodisein */ #ifndef __KTrash #define __KTrash #include class KObject; class KTrash { static std::vector trash_can; public: ~KTrash () { recycle(); } static void addObject ( KObject * ); static void recycle (); }; #endif kiki/kodilib/src/types/KVector.h0000666000000000000000000003016210070562132015603 0ustar rootroot/* * KVector.h * kodisein */ #ifndef __KVector #define __KVector #include #include #if defined(__APPLE__) && defined(__MACH__) #include #else #ifdef WIN32 #define rint(x) (((x) < 0.0) ? (double)(int)((x) - 0.5) : (double)(int)((x) + 0.5)) #include #endif #include #endif // -------------------------------------------------------------------------------------------------------- typedef GLfloat GLmat[16]; typedef GLfloat GLvec[4]; // -------------------------------------------------------------------------------------------------------- class KSize { public: int w, h; KSize (int _w = 0, int _h = 0) { w=_w; h=_h; } KSize operator/ ( float d ) const { return KSize((int)(w/d), (int)(h/d)); } KSize operator* ( float d ) const { return KSize((int)(w*d), (int)(h*d)); } KSize operator- ( KSize s ) const { return KSize(w-s.w,h-s.h); } KSize operator+ ( KSize s ) const { return KSize(w+s.w,h+s.h); } bool operator==( KSize s ) const { return (w==s.w && h==s.h); } }; // -------------------------------------------------------------------------------------------------------- #ifndef M_PI #define M_PI 3.14159265358979323846f #endif #ifndef M_PI_2 #define M_PI_2 1.5707963267948965580f #endif #define DEG2RAD(d) (M_PI*(d)/180.0) #define RAD2DEG(r) ((r)*180.0/M_PI) #define kMin(a,b) (((a) <= (b)) ? (a) : (b)) #define kMax(a,b) (((a) >= (b)) ? (a) : (b)) #define kMinMax(a,b,c) (kMax((a), kMin((b), (c)))) #define kAbs(d) (((d) >= 0) ? (d) : -(d)) #define kAbsMax(a,b) ((kAbs((a)) >= kAbs((b))) ? (a) : (b)) #define kAbsMin(a,b) ((kAbs((a)) < kAbs((b))) ? (a) : (b)) // -------------------------------------------------------------------------------------------------------- enum { X = 0, SX = 0, Y, Z, W, SY = 5, SZ = 10, TX = 12, TY, TZ }; class KVector { friend class KMatrix; friend KVector operator* (const GLfloat, const KVector &); friend KVector operator- (const KVector &); protected: GLvec values; public: KVector () { values[X]=values[Y]=values[Z]=values[W] = 0.0; } KVector ( const GLfloat x, const GLfloat y, const GLfloat z = 0.0, const GLfloat w = 0.0 ) { values[X]=x; values[Y]=y; values[Z]=z; values[W]=w; } KVector ( const KVector & v ) { values[X]=v.values[X]; values[Y]=v.values[Y]; values[Z]=v.values[Z]; values[W]=v.values[W]; } inline KVector & reset (); inline KVector & normalize (); inline KVector & operator= ( const KVector & ); inline KVector & operator+= ( const KVector & ); inline KVector & operator-= ( const KVector & ); inline KVector & operator*= ( GLfloat ); inline KVector & operator/= ( GLfloat ); inline KVector cross ( const KVector & ) const; inline GLfloat operator* ( const KVector & ) const; inline KVector operator- ( const KVector & ) const; inline KVector operator+ ( const KVector & ) const; inline KVector operator* ( GLfloat ) const; inline KVector operator/ ( GLfloat ) const; inline GLfloat operator[] (int i) const { return values[i]; } inline GLfloat & operator[] (int i) { return values[i]; } inline KVector perpendicular ( const KVector & ) const; inline KVector parallel ( const KVector & ) const; inline KVector reflect ( const KVector & ) const; inline KVector normal () const { return KVector(*this).normalize(); } inline GLfloat length () const; inline GLfloat angle ( const KVector & ) const; inline GLfloat xyangle ( const KVector & ) const; inline KVector xyperp () const; inline KVector round () const; inline const GLfloat * getValues () const { return values; } inline void glVertex () const { glVertex3fv(values); } inline void glTranslate () const { glTranslatef(values[X],values[Y],values[Z]); } }; // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::operator= ( const KVector & v ) { values[X] = v.values[X]; values[Y] = v.values[Y]; values[Z] = v.values[Z]; values[W] = v.values[W]; return (*this); } // -------------------------------------------------------------------------------------------------------- // returns the projection of this vector on ray with normized normalized vector n to this vector. inline KVector KVector::parallel ( const KVector & n ) const { float dot = values[X]*n.values[X] + values[Y]*n.values[Y] + values[Z]*n.values[Z]; return KVector(dot*n.values[X], dot*n.values[Y], dot*n.values[Z]); } // -------------------------------------------------------------------------------------------------------- // returns the projection of normalized vector n to vector that is perpendicular to this inline KVector KVector::perpendicular ( const KVector & n ) const { float dot = values[X]*n.values[X] + values[Y]*n.values[Y] + values[Z]*n.values[Z]; return KVector(values[X]-dot*n.values[X], values[Y]-dot*n.values[Y], values[Z]-dot*n.values[Z]); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::reflect ( const KVector & n ) const { float dot = 2.0*(values[X]*n.values[X] + values[Y]*n.values[Y] + values[Z]*n.values[Z]); return KVector(values[X]-dot*n.values[X], values[Y]-dot*n.values[Y], values[Z]-dot*n.values[Z]); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::cross ( const KVector & v ) const { return KVector( values[Y]*v.values[Z]-values[Z]*v.values[Y], values[Z]*v.values[X]-values[X]*v.values[Z], values[X]*v.values[Y]-values[Y]*v.values[X]); } // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::normalize () { float l = length(); if (l != 0.0) { l = 1.0/l; values[X] *= l; values[Y] *= l; values[Z] *= l; values[W] *= l; } return (*this); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::xyperp () const { return KVector(-values[Y], values[X]); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::round () const { return KVector(rint(values[X]), rint(values[Y]), rint(values[Z]), values[W]); } // -------------------------------------------------------------------------------------------------------- inline GLfloat KVector::xyangle ( const KVector & v ) const { KVector thisXY = KVector(values[X], values[Y]).normal(); KVector otherXY = KVector(v[X], v[Y]).normal(); if (thisXY.xyperp() * otherXY >= 0) return RAD2DEG(acos(thisXY * otherXY)); return -RAD2DEG(acos(thisXY * otherXY)); } // -------------------------------------------------------------------------------------------------------- inline GLfloat KVector::angle ( const KVector & v ) const { return RAD2DEG(acos(this->normal()*v.normal())); } // -------------------------------------------------------------------------------------------------------- inline GLfloat KVector::length () const { return sqrt(values[X]*values[X]+values[Y]*values[Y]+values[Z]*values[Z]+values[W]*values[W]); } // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::operator+= ( const KVector & v ) { values[X]+=v.values[X]; values[Y]+=v.values[Y]; values[Z]+=v.values[Z]; values[W]+=v.values[W]; return (*this); } // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::operator-= ( const KVector & v ) { values[X]-=v.values[X]; values[Y]-=v.values[Y]; values[Z]-=v.values[Z]; values[W]-=v.values[W]; return (*this); } // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::operator*= ( const GLfloat f ) { values[X] *= f; values[Y] *= f; values[Z] *= f; values[W] *= f; return (*this); } // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::operator/= ( const GLfloat f ) { values[X] /= f; values[Y] /= f; values[Z] /= f; values[W] /= f; return (*this); } // -------------------------------------------------------------------------------------------------------- inline GLfloat KVector::operator* ( const KVector & v ) const { return values[X]*v.values[X] + values[Y]*v.values[Y] + values[Z]*v.values[Z] + values[W]*v.values[W]; } // -------------------------------------------------------------------------------------------------------- inline KVector operator* ( const GLfloat f, const KVector & v ) { return KVector (f*v.values[X], f*v.values[Y], f*v.values[Z], f*v.values[W]); } // -------------------------------------------------------------------------------------------------------- inline KVector operator- ( const KVector & v ) { return KVector (-v.values[X], -v.values[Y], -v.values[Z], -v.values[W]); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::operator* ( const GLfloat f ) const { return KVector(values[X]*f, values[Y]*f, values[Z]*f, values[W]*f); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::operator/ ( const GLfloat f ) const { return KVector(values[X]/f, values[Y]/f, values[Z]/f, values[W]/f); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::operator- ( const KVector & v ) const { return KVector(values[X]-v.values[X],values[Y]-v.values[Y],values[Z]-v.values[Z],values[W]-v.values[W]); } // -------------------------------------------------------------------------------------------------------- inline KVector KVector::operator+ ( const KVector & v ) const { return KVector(values[X]+v.values[X],values[Y]+v.values[Y],values[Z]+v.values[Z],values[W]+v.values[W]); } // -------------------------------------------------------------------------------------------------------- inline KVector & KVector::reset () { values[X] = 0.0; values[Y] = 0.0; values[Z] = 0.0; values[W] = 0.0; return (*this); } // -------------------------------------------------------------------------------------------------------- class KPosition { public: int x, y; KPosition (int _x = 0, int _y = 0) { x=_x; y=_y; } KPosition operator+ ( KPosition p ) const { return KPosition(x+p.x,y+p.y); } KPosition operator- ( KPosition p ) const { return KPosition(x-p.x,y-p.y); } KPosition operator+ ( KSize p ) const { return KPosition(x+p.w,y+p.h); } KPosition operator- ( KSize p ) const { return KPosition(x-p.w,y-p.h); } operator KVector () const { return KVector(x,y); } bool operator==( KPosition p ) const { return (x==p.x && y==p.y); } }; #endif kiki/kodilib/src/widgets/0000777000000000000000000000000010336064534014365 5ustar rootrootkiki/kodilib/src/widgets/KButton.cpp0000666000000000000000000000370207644705707016475 0ustar rootroot/* * KButton.cpp * kodisein */ #include "KButton.h" #include "KConsole.h" #include "KColor.h" KDL_CLASS_INTROSPECTION_2 (KButton, KLabel, KNotificationObject) // -------------------------------------------------------------------------------------------------------- KButton::KButton ( const std::string & n ) : KLabel(n) { flags[KDL_WIDGET_FLAG_FIXED_SIZE] = false; flags[KDL_WIDGET_FLAG_FRAMED] = true; } // -------------------------------------------------------------------------------------------------------- void KButton::setPicked ( bool p ) { if (p) activate(); //picked = p; } // -------------------------------------------------------------------------------------------------------- void KButton::activate() { picked = true; notifyReceivers(); notifyReceivers(true); notifyReceivers(text); } // -------------------------------------------------------------------------------------------------------- void KButton::deactivate () { picked = false; notifyReceivers(false); } // -------------------------------------------------------------------------------------------------------- KColor * KButton::getFGColor () const { if (fg_color) return fg_color; if (parent) return parent->getFGColor(); return NULL; } // -------------------------------------------------------------------------------------------------------- KColor * KButton::getBGColor () const { if (bg_color) return bg_color; if (parent) return parent->getBGColor(); return NULL; } // -------------------------------------------------------------------------------------------------------- void KButton::render () { glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); if (picked) { glColor4f(1.0, 1.0, 1.0, 1.0); } else if (getFGColor()) { getFGColor()->glColor(); } KLabel::render(); glPopAttrib(); } kiki/kodilib/src/widgets/KButton.h0000666000000000000000000000106307644705707016140 0ustar rootroot/* * KButton.h * kodisein */ #ifndef __KButton #define __KButton #include "KLabel.h" #include "KNotificationObject.h" class KButton : public KLabel, public KNotificationObject { INTROSPECTION public: KButton ( const std::string & = "" ); virtual void setPicked ( bool ); virtual void render (); virtual void activate (); virtual void deactivate (); virtual KColor * getFGColor () const; virtual KColor * getBGColor () const; }; #endif kiki/kodilib/src/widgets/KButtonBox.cpp0000666000000000000000000000210307644705707017140 0ustar rootroot/* * KButtonBox.cpp * kodisein */ #include "KButtonBox.h" #include "KButton.h" #include "KConsole.h" #include "KNotificationObject.h" KDL_CLASS_INTROSPECTION_1 (KButtonBox, KWidgetArray) // -------------------------------------------------------------------------------------------------------- KButtonBox::KButtonBox () : KWidgetArray () { } // -------------------------------------------------------------------------------------------------------- void KButtonBox::addButton ( KButton * button ) { addChild (button); button->addReceiverCallback ((KObject*)this, (KSetStringPtr)&KButtonBox::buttonCallback); } // -------------------------------------------------------------------------------------------------------- void KButtonBox::buttonCallback ( const std::string & buttonText ) { PickableVector::iterator iter = children.begin(); while (iter != children.end()) { if (((KButton*)*iter)->getText() != buttonText) { ((KButton*)*iter)->deactivate(); } iter++; } } kiki/kodilib/src/widgets/KButtonBox.h0000666000000000000000000000104007644705707016604 0ustar rootroot/* * KButtonBox.h * kodisein */ #ifndef __KButtonBox #define __KButtonBox #include "KWidgetArray.h" #include class KButton; class KButtonBox : public KWidgetArray { INTROSPECTION public: KButtonBox (); void addButton ( KButton * ); void buttonCallback ( const std::string & ); bool hasSubPickables () const { return true; } const PickableVector * getSubPickables () const { return &children; } }; #endif kiki/kodilib/src/widgets/KButtonSymbols.h0000666000000000000000000001141107644705707017507 0ustar rootroot/* * KIconSymbols.h * kodisein */ #ifndef __KButtonSymbols #define __KButtonSymbols static char *KDS_BUTTONICON_CLEAR[] = { // width height ncolors chars_per_pixel "13 13 1 1", // colors ". c None", // pixels ".............", ".............", ".............", ".............", ".............", ".............", ".............", ".............", ".............", ".............", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_CROSS[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels "#...........#", ".#.........#.", "..#.......#..", "...#.....#...", "....#...#....", ".....#.#.....", "......#......", ".....#.#.....", "....#...#....", "...#.....#...", "..#.......#..", ".#.........#.", "#...........#", }; static char *KDS_BUTTONICON_UP[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", ".............", "..#.......#..", "...#.....#...", "....#...#....", ".....#.#.....", "......#......", ".............", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_DOWN[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", ".............", "......#......", ".....#.#.....", "....#...#....", "...#.....#...", "..#.......#..", ".............", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_ARROW_RIGHT[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", "....##.......", "....#.#......", "....#..#.....", "....#...#....", "....#....#...", "....#...#....", "....#..#.....", "....#.#......", "....##.......", ".............", ".............", }; static char *KDS_BUTTONICON_ARROW_LEFT[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".......##....", "......#.#....", ".....#..#....", "....#...#....", "...#....#....", "....#...#....", ".....#..#....", "......#.#....", ".......##....", ".............", ".............", }; static char *KDS_BUTTONICON_ARROW_UP[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", ".............", "..#########..", "..#.......#..", "...#.....#...", "....#...#....", ".....#.#.....", "......#......", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_ARROW_DOWN[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", "......#......", ".....#.#.....", "....#...#....", "...#.....#...", "..#.......#..", "..#########..", ".............", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_TOP[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", ".............", "..#.......#..", "...#.....#...", "....#...#....", ".....#.#.....", "......#......", "..#########..", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_BOTTOM[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", ".............", "..#########..", "......#......", ".....#.#.....", "....#...#....", "...#.....#...", "..#.......#..", ".............", ".............", ".............", }; static char *KDS_BUTTONICON_DOUBLE_UP[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", "..#.......#..", "...#.....#...", "....#...#....", "..#..#.#..#..", "...#..#..#...", "....#...#....", ".....#.#.....", "......#......", ".............", ".............", }; static char *KDS_BUTTONICON_DOUBLE_DOWN[] = { // width height ncolors chars_per_pixel "13 13 2 1", // colors ". c None", "# c #FFFFFFFFFFFF", // pixels ".............", ".............", ".............", "......#......", ".....#.#.....", "....#...#....", "...#..#..#...", "..#..#.#..#..", "....#...#....", "...#.....#...", "..#.......#..", ".............", ".............", }; #endif kiki/kodilib/src/widgets/KFileNameField.cpp0000666000000000000000000002152507646356122017644 0ustar rootroot/* * KFileNameField.cpp * kodisein */ #include "KFileNameField.h" #include "KFileHandler.h" #include "KFileTools.h" #include "KKey.h" #include "KConsole.h" #include #define DEBUG false KDL_CLASS_INTROSPECTION_1 (KFileNameField, KTextField) // -------------------------------------------------------------------------------------------------------- KFileNameField::KFileNameField ( const std::string & fn ) : KTextField (fn) { KWidget::flags.resize(KDL_FILENAMEFIELD_FLAG_END); KWidget::flags[KDL_FILENAMEFIELD_FLAG_OPEN_FILE_MODE] = false; last_dir = ".!@#$%^&}"; } // -------------------------------------------------------------------------------------------------------- bool KFileNameField::handleKey ( const KKey & key ) { selection_color.setValues(0.0, 0.0, 1.0, 0.25); if (current_dir_path == "") { // nobody set the current dir -> get it from file handler current_dir_path = KFileHandler::getCurrentDir (); } if (key.sym == SDLK_TAB) // completion { std::string croppedPath = text.substr(0, cursor_pos); // path before cursor std::string restPath; // path behind cursor // map cropped path to current directory and rest path to file prefix unsigned int lastSlashPos = croppedPath.rfind("/"); if (lastSlashPos < croppedPath.size()-1) { restPath = croppedPath.substr(lastSlashPos+1); croppedPath.erase(lastSlashPos+1); } else if (lastSlashPos == std::string::npos) { restPath = croppedPath; croppedPath = ""; } // now, rest path contains the prefix that is to complete // and cropped path the absolute or relative path // of the directory which is to search for possible completions KConsole::debugf(DEBUG, "KFileNameField::handleKey croppedPath %s", croppedPath.c_str()); // store absolute path in searchDir std::string searchDir = kFileSubstitutePath(croppedPath); // replaces leading ~ if (searchDir[0] != '/') // no absolute path -> prepend current_dir_path { searchDir = current_dir_path + "/" + searchDir; } KConsole::debugf(DEBUG, "KFileNameField::handleKey current_dir_path %s", current_dir_path.c_str()); KConsole::debugf(DEBUG, "KFileNameField::handleKey searchDir %s", searchDir.c_str()); KConsole::debugf(DEBUG, "KFileNameField::handleKey last_dir %s", last_dir.c_str()); if (last_dir != searchDir) // directory changed since last completion { KConsole::debugf(DEBUG, "KFileNameField::handleKey tab new dir"); dir_entries.clear(); // get entries of new directory if (kFileGetDirEntries(searchDir, dir_entries)) { KConsole::debugf(DEBUG, "KFileNameField::handleKey setting last_dir to searchDir"); last_dir = searchDir; } else { return true; } } // ............................collect list of entries in searchDir that match prefix restPath unsigned int restLength = restPath.size(); std::vector matchingEntries; std::vector::iterator iter = dir_entries.begin(); while (iter != dir_entries.end()) { if (iter->compare(0, restLength, restPath) == 0) { matchingEntries.push_back(*iter); } iter++; } int numMatches = matchingEntries.size(); KConsole::debugf(DEBUG, "KFileNameField::handleKey found %d matches for prefix %s", numMatches, restPath.c_str()); if (numMatches == 0) // no matches, reset path to croppedPath (last valid path part) { setText(croppedPath); } else if (numMatches == 1) // exactly one match -> if directory, append slash { KConsole::debugf(DEBUG, "KFileNameField::handleKey matchingEntries[0] %s", matchingEntries[0].c_str()); if (kFileIsDir(searchDir+matchingEntries[0])) { KConsole::debugf(DEBUG, "KFileNameField::handleKey matchingEntry is dir"); setText(croppedPath+matchingEntries[0]+"/"); } else { KConsole::debugf(DEBUG, "KFileNameField::handleKey matchingEntry is file"); setText(croppedPath+matchingEntries[0]); notifyReceivers(text, KDL_NOTIFICATION_TYPE_SELECTED_FILE_CHANGED); } } else // more than one match { std::string sharedPrefix = kStringGetSharedPrefix(matchingEntries); if (sharedPrefix != restPath) { setText(croppedPath+sharedPrefix); } else { std::string selection = getSelection(); std::vector::iterator lastPos; lastPos = std::find (matchingEntries.begin(), matchingEntries.end(), sharedPrefix+selection); if (key.mod & KMOD_SHIFT) { lastPos--; } else { lastPos++; } if (lastPos >= matchingEntries.end()) { lastPos = matchingEntries.begin(); } else if (lastPos < matchingEntries.begin()) { lastPos = matchingEntries.end()-1; } int saveCursorPos = cursor_pos; setText(croppedPath+(*lastPos)); cursor_pos = saveCursorPos; notifyReceivers(text, KDL_NOTIFICATION_TYPE_SELECTED_FILE_CHANGED); } } update(); return true; } else if (key.sym == SDLK_RETURN) { // store absolute path in currentPath std::string currentPath = kFileSubstitutePath(text); // replaces leading ~ if (currentPath[0] != '/') // no absolute path -> prepend current_dir_path { currentPath = current_dir_path + "/" + currentPath; } KConsole::debugf(DEBUG, "KFileNameField::handleKey RETURN currentPath %s", currentPath.c_str()); KConsole::debugf(DEBUG, "KFileNameField::handleKey RETURN exists %d", kFileExists(currentPath)); // file doesn't exist && open mode -> highlight last path component in red if (kFileExists(currentPath) == false && KWidget::flags[KDL_FILENAMEFIELD_FLAG_OPEN_FILE_MODE]) { KConsole::debugf(DEBUG, "KFileNameField::handleKey red alert!"); selection_color.setValues(1.0, 0.5, 0.0, 0.5); selectLastPathComponent(); return true; } if (kFileIsDir(currentPath)) // file exists and is directory ... { KConsole::debugf(DEBUG, "KFileNameField::handleKey is dir"); if (KWidget::flags[KDL_FILENAMEFIELD_FLAG_SELECT_DIR_MODE] == false) { if (text == "" || text == ".") // switch to absolute mode if current directory { KConsole::debugf(DEBUG, "KFileNameField::handleKey switch to absolute"); setText(kFileAbsPathName(currentPath)); return true; } // change to directory KConsole::debugf(DEBUG, "KFileNameField::handleKey switch to relative"); setText(""); notifyReceivers(kFileAbsPathName(currentPath), KDL_NOTIFICATION_TYPE_CURRENT_DIRECTORY_CHANGED); } else // notify receivers in select directory mode { KConsole::debugf(DEBUG, "KFileNameField::handleKey notify (dir)"); setPicked(false); notify(); } } else // file is file or (it doesn't exists and not in open mode) { KConsole::debugf(DEBUG, "KFileNameField::handleKey notify (file)"); setPicked(false); notify(); } return true; } return KTextField::handleKey (key); } // -------------------------------------------------------------------------------------------------------- void KFileNameField::selectLastPathComponent () { unsigned int lastSlashPos = text.rfind("/"); if (lastSlashPos == text.size()-1) lastSlashPos = text.rfind("/", lastSlashPos-1); if (lastSlashPos < text.size()) cursor_pos = lastSlashPos+1; else cursor_pos = 0; selection_pos = text.size(); } kiki/kodilib/src/widgets/KFileNameField.h0000666000000000000000000000204207644705707017307 0ustar rootroot/* * KFileNameField.h * kodisein */ #ifndef __KFileNameField #define __KFileNameField #include "KTextField.h" enum { KDL_FILENAMEFIELD_FLAG_OPEN_FILE_MODE = KDL_TEXTFIELD_FLAG_END, KDL_FILENAMEFIELD_FLAG_SELECT_DIR_MODE, KDL_FILENAMEFIELD_FLAG_END}; enum { KDL_NOTIFICATION_TYPE_SELECTED_FILE_CHANGED = KDL_NOTIFICATION_TYPE_NOTIFICATION_END, KDL_NOTIFICATION_TYPE_CURRENT_DIRECTORY_CHANGED, KDL_NOTIFICATION_TYPE_FILENAMEFIELD_ACTIVATED, KDL_NOTIFICATION_TYPE_FILENAMEFIELD_END}; class KFileNameField : public KTextField { INTROSPECTION protected: std::vector dir_entries; std::string last_dir; std::string current_dir_path; public: KFileNameField ( const std::string & = "" ); void selectLastPathComponent (); void setCurrentDirPath ( const std::string & s ) { current_dir_path = s; setText(""); } bool handleKey ( const KKey & ); }; #endif kiki/kodilib/src/widgets/KFileTreeDir.cpp0000666000000000000000000000575007644705707017365 0ustar rootroot/* * KFileTreeDir.cpp * kodisein */ #include "KFileTreeDir.h" #include "KEventHandler.h" #include "KFileTreeFile.h" #include "KConsole.h" #include "KFileHandler.h" #include "KFileTools.h" #include "KTools.h" #include #include #include #ifndef WIN32 #include #include #endif #include KDL_CLASS_INTROSPECTION_1 (KFileTreeDir, KFileTreeNode) int KFileTreeDir::max_path_depth = 3; bool KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_END] = { false, true }; // -------------------------------------------------------------------------------------------------------- KFileTreeDir::KFileTreeDir ( const KFileTreeDir * d, const std::string & n ) : KFileTreeNode (n) { parent = d; if (n.find("kodisein") != std::string::npos) { node_color.setValues (1.0, 0.5, 0.0, KDL_FILETREENODE_DEFAULT_ALPHA); } else if (n[0] == '.' && n != ".") { node_color.setValues (0.0, 0.0, 0.5, KDL_FILETREENODE_DEFAULT_ALPHA); } else { node_color.setValues (0.0, 0.0, 1.0, KDL_FILETREENODE_DEFAULT_ALPHA); } type = KDL_FILE_TYPE_DIR; if (getPathLength() < max_path_depth) { createTree(); } } // -------------------------------------------------------------------------------------------------------- KFileTreeDir::KFileTreeDir ( const std::string & n ) : KFileTreeNode (n) { if (n[0] == '.' && n != ".") node_color.setValues (0.0, 0.0, 0.5, KDL_FILETREENODE_DEFAULT_ALPHA); else node_color.setValues (0.0, 0.0, 1.0, KDL_FILETREENODE_DEFAULT_ALPHA); type = KDL_FILE_TYPE_DIR; } // -------------------------------------------------------------------------------------------------------- void KFileTreeDir::render () { kDisplaySolidSphere(0.5, (KEventHandler::flags[KDL_DISPLAY_MODE_FAST] ? 4 : 8)); } // -------------------------------------------------------------------------------------------------------- void KFileTreeDir::createTree () { std::vector entries; std::string pathName = getAbsPathName(); if (kFileGetDirEntries(pathName, entries, flags[KDL_FILETREEDIR_FLAG_SHOW_DOTFILES])) { std::vector::iterator iter = entries.begin(); while (iter != entries.end()) { if (kFileIsDir(pathName + "/" + (*iter))) { addChild (new KFileTreeDir(this, (*iter))); } else { std::string suffix = kFileSuffix((*iter)); if (flags[KDL_FILETREEDIR_FLAG_SHOW_CUBES] || suffix == "kds" || suffix == "kts" || suffix == "tga" || suffix == "tif" || suffix == "jpg" || suffix == "png" || suffix == "gif") { addChild (new KFileTreeFile(this, (*iter))); } } iter++; } } } kiki/kodilib/src/widgets/KFileTreeDir.h0000666000000000000000000000132507644705707017024 0ustar rootroot/* * KFileTreeDir.h * kodisein */ #ifndef __KFileTreeDir #define __KFileTreeDir #include "KFileTreeNode.h" enum { KDL_FILETREEDIR_FLAG_SHOW_DOTFILES, KDL_FILETREEDIR_FLAG_SHOW_CUBES, KDL_FILETREEDIR_FLAG_END }; class KFileTreeDir : public KFileTreeNode { INTROSPECTION public: static bool flags[KDL_FILETREEDIR_FLAG_END]; static int max_path_depth; KFileTreeDir ( const std::string & = "." ); KFileTreeDir ( const KFileTreeDir *, const std::string & ); void createTree (); virtual void render (); }; #endif kiki/kodilib/src/widgets/KFileTreeDirCurrent.cpp0000666000000000000000000000060707644705707020724 0ustar rootroot/* * KFileTreeDirCurrent.cpp * kodisein */ #include "KFileTreeDirCurrent.h" #include "KFileTools.h" // -------------------------------------------------------------------------------------------------------- KFileTreeDirCurrent::KFileTreeDirCurrent ( const std::string & dirName ) : KFileTreeDir (std::string(".")) { current_dir_path = kFileAbsPathName(dirName); } kiki/kodilib/src/widgets/KFileTreeDirCurrent.h0000666000000000000000000000070707644705707020372 0ustar rootroot/* * KFileTreeDirCurrent.h * kodisein */ #ifndef __KFileTreeDirCurrent #define __KFileTreeDirCurrent #include "KFileTreeDir.h" class KFileTreeDirCurrent : public KFileTreeDir { std::string current_dir_path; // absolute path of the current ('.') directory public: KFileTreeDirCurrent ( const std::string & ); std::string getAbsPathName () const { return current_dir_path; } }; #endif kiki/kodilib/src/widgets/KFileTreeDirUp.cpp0000666000000000000000000000324607644705707017670 0ustar rootroot/* * KFileTreeDirUp.cpp * kodisein */ #include "KFileTreeDirUp.h" #include "KFileTreeDir.h" #include "KEventHandler.h" #include "KTools.h" KDL_CLASS_INTROSPECTION_1 (KFileTreeDirUp, KFileTreeNode) // -------------------------------------------------------------------------------------------------------- KFileTreeDirUp::KFileTreeDirUp () : KFileTreeNode ( ".." ) { node_color.setValues (0.0, 0.0, 1.0, KDL_FILETREENODE_DEFAULT_ALPHA); type = KDL_FILE_TYPE_DIR; current_dir_node = NULL; parent = NULL; } // -------------------------------------------------------------------------------------------------------- void KFileTreeDirUp::setCurrentDir ( KFileTreeDir * currentDir ) { current_dir_node = currentDir; relayout(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeDirUp::relayout () { current_dir_node->setPosition(matrix[TX], matrix[TY], matrix[TZ]); current_dir_node->relayout(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeDirUp::render () { int divisions = KEventHandler::flags[KDL_DISPLAY_MODE_FAST] ? 5 : 8; glDisable(GL_LIGHTING); glBegin(GL_LINES); glVertex3f( 0.5, -1.0, 0.0); glVertex3f(-0.5, -1.0, 0.0); glVertex3f( 0.0, 0.0, 0.0); glVertex3f( 0.0, -1.0, 0.0); glEnd(); glEnable(GL_LIGHTING); glPushMatrix(); glTranslated(0.5, -1.0, 0.0); kDisplaySolidSphere(0.4, divisions); glTranslated(-1.0, 0.0, 0.0); kDisplaySolidSphere(0.4, divisions); glPopMatrix(); } kiki/kodilib/src/widgets/KFileTreeDirUp.h0000666000000000000000000000071207644705707017330 0ustar rootroot/* * KFileTreeDirUp.h * kodisein */ #ifndef __KFileTreeDirUp #define __KFileTreeDirUp #include "KFileTreeNode.h" class KFileTreeDir; class KFileTreeDirUp : public KFileTreeNode { INTROSPECTION protected: KFileTreeDir * current_dir_node; public: KFileTreeDirUp (); void render (); void relayout (); void setCurrentDir ( KFileTreeDir * ); }; #endif kiki/kodilib/src/widgets/KFileTreeFile.cpp0000666000000000000000000000415107645543104017510 0ustar rootroot/* * KFileTreeFile.cpp * kodisein */ #include "KFileTreeFile.h" #include "KFileTreeDir.h" #define K_INCLUDE_GLUT #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KFileTreeFile, KFileTreeNode) // -------------------------------------------------------------------------------------------------------- KFileTreeFile::KFileTreeFile ( const KFileTreeDir * d, const std::string & n ) : KFileTreeNode ( n ) { parent = d; type = KDL_FILE_TYPE_UNKNOWN; std::string suffix = getSuffix (); if (suffix == "kds") { node_color.setValues (1.0, 0.5, 0.0, KDL_FILETREENODE_DEFAULT_ALPHA); type = KDL_FILE_TYPE_KODISEIN; } else if (suffix == "kts") { node_color.setValues (0.5, 0.5, 0.5, KDL_FILETREENODE_DEFAULT_ALPHA); type = KDL_FILE_TYPE_KODISEIN_TEXTURESET; } else if (suffix == "tga" || suffix == "tif" || suffix == "jpg" || suffix == "png" || suffix == "gif") { node_color.setValues (0.0, 1.0, 0.0, KDL_FILETREENODE_DEFAULT_ALPHA); type = KDL_FILE_TYPE_TEXTURE; } else { if (n[0] == '.') node_color.setValues (0.1, 0.1, 0.1, KDL_FILETREENODE_DEFAULT_ALPHA); else node_color.setValues (0.25, 0.25, 0.25, KDL_FILETREENODE_DEFAULT_ALPHA); type = KDL_FILE_TYPE_UNKNOWN; } } // -------------------------------------------------------------------------------------------------------- void KFileTreeFile::render () { if (type == KDL_FILE_TYPE_KODISEIN) glutSolidIcosahedron(); else if (type == KDL_FILE_TYPE_TEXTURE) { glPushMatrix(); glScaled(1.0, 0.5, 1.0); glutSolidCube(1.8); glPopMatrix(); } else if (type == KDL_FILE_TYPE_KODISEIN_TEXTURESET) { glPushMatrix(); glTranslated(-0.5, 0.0, 0.5); glutSolidCube(0.8); glTranslated( 0.0, 0.0, -1.0); glutSolidCube(0.8); glTranslated( 1.0, 0.0, 0.0); glutSolidCube(0.8); glTranslated( 0.0, 0.0, 1.0); glutSolidCube(0.8); glPopMatrix(); } else glutSolidCube(0.5); } kiki/kodilib/src/widgets/KFileTreeFile.h0000666000000000000000000000062207644705707017164 0ustar rootroot/* * KFileTreeFile.h * kodisein */ #ifndef __KFileTreeFile #define __KFileTreeFile #include "KFileTreeNode.h" class KFileTreeDir; class KFileTreeFile : public KFileTreeNode { INTROSPECTION public: KFileTreeFile ( const KFileTreeDir *, const std::string & ); virtual void render (); }; #endif kiki/kodilib/src/widgets/KFileTreeNode.cpp0000666000000000000000000001014310313522027017477 0ustar rootroot/* * KFileTreeNode.cpp * kodisein */ #include "KFileTreeNode.h" #include "KConsole.h" KDL_CLASS_INTROSPECTION_2 (KFileTreeNode, KPickable, KMatrix) // -------------------------------------------------------------------------------------------------------- KFileTreeNode::KFileTreeNode ( const std::string & n ) : KPickable (), KMatrix () { name = n; parent = NULL; } // -------------------------------------------------------------------------------------------------------- KFileTreeNode::~KFileTreeNode () { PickableVector::iterator iter = children.begin(); while (iter != children.end()) { delete (*iter); iter++; } children.clear(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeNode::addChild ( KFileTreeNode * c ) { children.push_back(c); } // -------------------------------------------------------------------------------------------------------- KFileTreeNode * KFileTreeNode::getRootNode () const { if (parent) { return parent->getRootNode(); } return (KFileTreeNode*)this; } // -------------------------------------------------------------------------------------------------------- std::string KFileTreeNode::getSuffix () const { unsigned int pos = name.rfind('.'); if (pos < name.size()) { return name.substr(pos+1); } else { return ""; } } // -------------------------------------------------------------------------------------------------------- int KFileTreeNode::getPathLength () const { if (parent) { return parent->getPathLength() + 1; } return 0; } // -------------------------------------------------------------------------------------------------------- std::string KFileTreeNode::getAbsPathName () const { if (parent) { return parent->getAbsPathName() + "/" + name; } return name; } // -------------------------------------------------------------------------------------------------------- std::string KFileTreeNode::getPathName () const { if (parent) { return parent->getPathName() + "/" + name; } return name; } // -------------------------------------------------------------------------------------------------------- void KFileTreeNode::relayout () { int side = (int)ceil(sqrt(double(children.size()))); int pl = getPathLength() + 1; float scalePow = pow(0.6, kMin(4, pl)); float transPow = scalePow; int index = 0; if (pl > 3) { scalePow = 1.0; transPow = 0.5; } PickableVector::iterator iter = children.begin(); while (iter != children.end()) { int x = (index % side) - side/2; int z = (index / side) - side/2; ((KFileTreeNode*)*iter)->reset(); ((KFileTreeNode*)*iter)->transform(*this); ((KFileTreeNode*)*iter)->translate(x*2.0*transPow+0.1, pl*2.0*transPow+0.2, z*2.0*transPow+0.1); ((KFileTreeNode*)*iter)->scale(scalePow, scalePow, scalePow); ((KFileTreeNode*)*iter)->relayout(); iter++; index++; } } // -------------------------------------------------------------------------------------------------------- void KFileTreeNode::display () { glPushMatrix(); glMultMatrix(); loadId (); if (picked) glColor4f (1.0, 1.0, 1.0, 1.0); else node_color.glColor(); render(); glPopMatrix(); glDisable(GL_LIGHTING); glBegin(GL_LINES); PickableVector::iterator iter = children.begin(); while (iter != children.end()) { if (((KFileTreeNode*)*iter)->getType() == KDL_FILE_TYPE_DIR) { getPosition().glVertex(); ((KFileTreeNode*)*iter)->getPosition().glVertex(); } iter++; } glEnd(); glEnable(GL_LIGHTING); iter = children.begin(); while (iter != children.end()) { ((KFileTreeNode*)*iter)->display(); iter++; } } kiki/kodilib/src/widgets/KFileTreeNode.h0000666000000000000000000000347507644705707017203 0ustar rootroot/* * KFileTreeNode.h * kodisein */ #ifndef __KFileTreeNode #define __KFileTreeNode #include "KPickable.h" #include "KMatrix.h" #include "KColor.h" enum { KDL_FILE_TYPE_KODISEIN, KDL_FILE_TYPE_KODISEIN_TEXTURESET, KDL_FILE_TYPE_TEXTURE, KDL_FILE_TYPE_UNKNOWN, KDL_FILE_TYPE_DIR }; #define KDL_FILETREENODE_DEFAULT_ALPHA 0.8 class KFileTreeNode : public KPickable, public KMatrix { INTROSPECTION protected: int min_id; int max_id; int type; std::string name; PickableVector children; const KFileTreeNode * parent; KColor node_color; public: KFileTreeNode ( const std::string & ); ~KFileTreeNode (); KFileTreeNode * getRootNode () const; bool isRootNode () const { return (parent == NULL); } int getPathLength () const; std::string getSuffix () const; int getType () const { return type; } const std::string & getName () const { return name; } virtual std::string getPathName () const; virtual std::string getAbsPathName () const; virtual void addChild ( KFileTreeNode * ); virtual void display (); virtual void relayout (); virtual void render () = 0; virtual bool hasSubPickables () const { return true; } virtual const PickableVector * getSubPickables () const { return &children; } virtual void setMinId ( int i ) { min_id = i; } virtual void setMaxId ( int i ) { max_id = i; } virtual int getMinId () { return min_id; } virtual int getMaxId () { return max_id; } }; #endif kiki/kodilib/src/widgets/KFileTreeWidget.cpp0000666000000000000000000002463507644705710020067 0ustar rootroot/* * KFileTreeWidget.cpp * kodisein */ #include "KFileTreeWidget.h" #include "KFileTreeDirCurrent.h" #include "KFileTreeDirUp.h" #include "KEventHandler.h" #include "KPerspectiveProjection.h" #include "KPopupMenu.h" #include "KSubMenuItem.h" #include "KStatusMenuItem.h" #include "KConsole.h" #include "KFileTools.h" KDL_CLASS_INTROSPECTION_2 (KFileTreeWidget, KProjectionWidget, KNotificationObject) // -------------------------------------------------------------------------------------------------------- KFileTreeWidget::KFileTreeWidget () : KProjectionWidget () { display_list = 0; popup_menu = NULL; current_dir_node = NULL; up_node = new KFileTreeDirUp (); projection->setEyeDistance(6.0); projection->translate(0.0, 1.0, 0.0); KPickHandler::flags[KDL_PICKHANDLER_FLAG_FOCUS_ON_ENABLED] = true; KPickHandler::flags[KDL_PICKHANDLER_FLAG_MENU_ENABLED] = true; KPickHandler::flags[KDL_PICKHANDLER_FLAG_AUTOUNPICK_ENABLED] = false; } // -------------------------------------------------------------------------------------------------------- KFileTreeWidget::~KFileTreeWidget () { if (current_dir_node) { delete current_dir_node; } delete up_node; deleteDisplayList(); } // -------------------------------------------------------------------------------------------------------- std::string KFileTreeWidget::getCurrentDir () const { if (current_dir_node) { return current_dir_node->getAbsPathName(); } return kFileAbsPathName("."); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::setCurrentDir ( const std::string & dirName ) { std::string absDirPath; if (dirName[0] == '.' && current_dir_node) { // path relative to the current directory should begin with a dot absDirPath = current_dir_node->getAbsPathName() + "/" + dirName; } else { absDirPath = kFileAbsPathName(dirName); } if (kFileIsDir(absDirPath) && (current_dir_node == NULL || (current_dir_node->getAbsPathName() != absDirPath))) { removeAllPickables(); if (current_dir_node) { delete current_dir_node; } current_dir_node = new KFileTreeDirCurrent(absDirPath); addPickable(up_node); addPickable(current_dir_node); current_dir_node->createTree(); up_node->setCurrentDir(current_dir_node); initializeIds(); deleteDisplayList(); notifyReceivers (current_dir_node->getAbsPathName(), KDL_NOTIFICATION_TYPE_OPEN_DIRECTORY); } } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::refresh () { if (current_dir_node) // redisplay the current directory { std::string currentDirPath = current_dir_node->getAbsPathName(); removeAllPickables(); delete current_dir_node; current_dir_node = NULL; setCurrentDir(currentDirPath); } } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::doubleClicked () { if (picked_pickable == current_dir_node) return; if (((KFileTreeNode*)picked_pickable)->getType() == KDL_FILE_TYPE_DIR) { setCurrentDir (((KFileTreeNode*)picked_pickable)->getAbsPathName()); } else { notifyReceivers (((KFileTreeNode*)picked_pickable)->getAbsPathName(), KDL_NOTIFICATION_TYPE_OPEN_FILE); notifyReceivers (); } } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::picked () { deleteDisplayList(); notifyReceivers (((KFileTreeNode*)picked_pickable)->getPathName(), KDL_NOTIFICATION_TYPE_SELECT_NODE); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::unpicked () { deleteDisplayList(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::deleteDisplayList () { if (display_list) { glDeleteLists(display_list, 1); display_list = 0; } } // -------------------------------------------------------------------------------------------------------- bool KFileTreeWidget::pick ( const KMouseEvent & event ) { if (KWidget::flags[KDL_WIDGET_FLAG_VISIBLE] == false) return false; KPosition mouseWidgetPos = event.pos - getScreenPos(); if ((mouseWidgetPos.x > 0) && (mouseWidgetPos.x < size.w) && (mouseWidgetPos.y > 0) && (mouseWidgetPos.y < size.h)) { deleteDisplayList(); getWindow()->unpick(); KPickHandler::pick(event); return true; } else { return false; } } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::displayContent () { if (current_dir_node == NULL) return; if (display_list) { glCallList(display_list); return; } display_list = glGenLists(1); if (display_list) { glNewList(display_list, GL_COMPILE_AND_EXECUTE); } if (kFileAbsPathName(current_dir_node->getName()) != "/") { up_node->display(); } current_dir_node->display(); if (display_list) { glEndList(); } } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::setShowDotFiles ( bool b ) { if (KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_SHOW_DOTFILES] != b) { KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_SHOW_DOTFILES] = b; refresh(); } } // -------------------------------------------------------------------------------------------------------- bool KFileTreeWidget::getShowDotFiles () const { return KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_SHOW_DOTFILES]; } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::setShowCubes ( bool b ) { if (KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_SHOW_CUBES] != b) { KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_SHOW_CUBES] = b; refresh(); } } // -------------------------------------------------------------------------------------------------------- bool KFileTreeWidget::getShowCubes () const { return KFileTreeDir::flags[KDL_FILETREEDIR_FLAG_SHOW_CUBES]; } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::menuCallback ( const std::string & itemText ) { if (itemText == "show more") { KFileTreeDir::max_path_depth++; refresh(); return; } else if (itemText == "show less") { if (KFileTreeDir::max_path_depth <= 1) return; KFileTreeDir::max_path_depth--; refresh(); return; } KFileTreeDir * dir; if (picked_pickable) { if (((KFileTreeNode*)picked_pickable)->getType() == KDL_FILE_TYPE_DIR) { dir = (KFileTreeDir*)picked_pickable; if (itemText == "cd") { if (dir != current_dir_node) { setCurrentDir(dir->getAbsPathName()); } return; } else if (itemText == "show texture(s)") { } } else { if (itemText == "show texture(s)") { } } } } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::displayMenu () { if (popup_menu == NULL) { KMenuItem * item; popup_menu = new KPopupMenu(); popup_menu->addMenuItem(item = new KMenuItem ("cd")); item->addReceiverCallback((KWidget*)this, (KSetStringPtr)(void (KWidget::*)(const std::string &))&KFileTreeWidget::menuCallback ); popup_menu->addMenuItem(item = new KMenuItem ("show more")); item->addReceiverCallback((KWidget*)this, (KSetStringPtr)(void (KWidget::*)(const std::string &))&KFileTreeWidget::menuCallback ); popup_menu->addMenuItem(item = new KMenuItem ("show less")); item->addReceiverCallback((KWidget*)this, (KSetStringPtr)(void (KWidget::*)(const std::string &))&KFileTreeWidget::menuCallback ); popup_menu->addMenuItem(item = new KStatusMenuItem ("hide dotfiles", "show dotfiles")); item->addReceiverCallback((KWidget*)this, (KSetBoolPtr)(void (KWidget::*)(bool))&KFileTreeWidget::setShowDotFiles ); item->setProviderCallback((KWidget*)this, (KGetBoolPtr)(bool (KWidget::*)(void) const)&KFileTreeWidget::getShowDotFiles ); popup_menu->addMenuItem(item = new KStatusMenuItem ("hide cubes", "show cubes")); item->addReceiverCallback((KWidget*)this, (KSetBoolPtr)(void (KWidget::*)(bool))&KFileTreeWidget::setShowCubes ); item->setProviderCallback((KWidget*)this, (KGetBoolPtr)(bool (KWidget::*)(void) const)&KFileTreeWidget::getShowCubes ); popup_menu->addMenuItem(item = new KMenuItem ("show texture(s)")); item->addReceiverCallback((KWidget*)this, (KSetStringPtr)(void (KWidget::*)(const std::string &))&KFileTreeWidget::menuCallback ); popup_menu->layout(); popup_menu->initializeIds(); } KPosition popupPos = getWindow()->mapScreenPos(KEventHandler::getMousePos()); popupPos.y -= KDL_MENU_DEFAULT_ITEM_HEIGHT; popup_menu->setPosition(popupPos); popup_menu->show(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWidget::focusOnPickedPickable ( bool zoom ) { if (picked_pickable == NULL) return; projection->focusOn(((KFileTreeNode*)picked_pickable)->getPosition()); if (zoom) projection->setEyeDistance(2.0); } kiki/kodilib/src/widgets/KFileTreeWidget.h0000666000000000000000000000257407644705710017532 0ustar rootroot/* * KFileTreeWidget.h * kodisein */ #ifndef __KFileTreeWidget #define __KFileTreeWidget #include "KProjectionWidget.h" #include "KNotificationObject.h" enum { KDL_NOTIFICATION_TYPE_SELECT_NODE = KDL_NOTIFICATION_TYPE_NOTIFICATION_END, KDL_NOTIFICATION_TYPE_OPEN_DIRECTORY, KDL_NOTIFICATION_TYPE_OPEN_FILE, KDL_NOTIFICATION_TYPE_FILETREE_END }; class KPopupMenu; class KFileTreeDir; class KFileTreeDirUp; class KFileTreeWidget : public KProjectionWidget, public KNotificationObject { INTROSPECTION protected: void deleteDisplayList (); GLuint display_list; KFileTreeDir * current_dir_node; KFileTreeDirUp * up_node; KPopupMenu * popup_menu; public: KFileTreeWidget (); ~KFileTreeWidget (); void displayContent (); void displayMenu (); void refresh (); std::string getCurrentDir () const; void setCurrentDir ( const std::string & ); void setShowDotFiles ( bool ); bool getShowDotFiles () const; void setShowCubes ( bool ); bool getShowCubes () const; void menuCallback ( const std::string & ); bool pick ( const KMouseEvent & ); void picked (); void unpicked (); void doubleClicked (); void focusOnPickedPickable ( bool = false ); }; #endif kiki/kodilib/src/widgets/KIconButton.cpp0000666000000000000000000000372107644705710017301 0ustar rootroot/* * KIconButton.cpp * kodisein */ #include "KIconButton.h" #include "KColor.h" #include "KTools.h" #include "KButtonSymbols.h" KDL_CLASS_INTROSPECTION_1 (KIconButton, KButton) // -------------------------------------------------------------------------------------------------------- KIconButton::KIconButton ( int t ) : KButton () { size.w = 14; size.h = 14; type = t; } // -------------------------------------------------------------------------------------------------------- void KIconButton::render () { glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); if (getFGColor()) getFGColor()->glColor(); KWidget::render(); KPosition iconPos(1, -size.h); switch (type) { case KDL_ICONBUTTON_CROSS: kDisplayXPMIcon (KDS_BUTTONICON_CROSS, iconPos); break; case KDL_ICONBUTTON_ARROW_UP: kDisplayXPMIcon (KDS_BUTTONICON_ARROW_UP, iconPos); break; case KDL_ICONBUTTON_ARROW_DOWN: kDisplayXPMIcon (KDS_BUTTONICON_ARROW_DOWN, iconPos); break; case KDL_ICONBUTTON_ARROW_LEFT: kDisplayXPMIcon (KDS_BUTTONICON_ARROW_LEFT, iconPos); break; case KDL_ICONBUTTON_ARROW_RIGHT: kDisplayXPMIcon (KDS_BUTTONICON_ARROW_RIGHT, iconPos); break; case KDL_ICONBUTTON_SINGLE_UP: kDisplayXPMIcon (KDS_BUTTONICON_UP, iconPos); break; case KDL_ICONBUTTON_SINGLE_DOWN: kDisplayXPMIcon (KDS_BUTTONICON_DOWN, iconPos); break; case KDL_ICONBUTTON_DOUBLE_UP: kDisplayXPMIcon (KDS_BUTTONICON_DOUBLE_UP, iconPos); break; case KDL_ICONBUTTON_DOUBLE_DOWN: kDisplayXPMIcon (KDS_BUTTONICON_DOUBLE_DOWN, iconPos); break; case KDL_ICONBUTTON_TOP: kDisplayXPMIcon (KDS_BUTTONICON_TOP, iconPos); break; case KDL_ICONBUTTON_BOTTOM: kDisplayXPMIcon (KDS_BUTTONICON_BOTTOM, iconPos); break; case KDL_ICONBUTTON_CLEAR: kDisplayXPMIcon (KDS_BUTTONICON_CLEAR, iconPos); break; default: break; }; glPopAttrib(); } kiki/kodilib/src/widgets/KIconButton.h0000666000000000000000000000157307644705710016751 0ustar rootroot/* * KIconButton.h * kodisein */ #ifndef __KIconButton #define __KIconButton #include "KButton.h" enum { KDL_ICONBUTTON_CROSS, KDL_ICONBUTTON_ARROW_UP, KDL_ICONBUTTON_ARROW_DOWN, KDL_ICONBUTTON_ARROW_LEFT, KDL_ICONBUTTON_ARROW_RIGHT, KDL_ICONBUTTON_CLEAR, KDL_ICONBUTTON_DOUBLE_DOWN, KDL_ICONBUTTON_DOUBLE_UP, KDL_ICONBUTTON_SINGLE_UP, KDL_ICONBUTTON_SINGLE_DOWN, KDL_ICONBUTTON_BOTTOM, KDL_ICONBUTTON_TOP }; class KIconButton : public KButton { INTROSPECTION protected: int type; public: KIconButton ( int ); virtual void setType ( int t ) { type = t; } virtual int getType () const { return type; } virtual void render (); }; #endif kiki/kodilib/src/widgets/KKeySequenceField.cpp0000666000000000000000000000612507644705710020403 0ustar rootroot/* * KKeySequenceField.cpp * kodisein */ #include "KKeySequenceField.h" #include "KMenu.h" #include "KColor.h" #include "KKeyTools.h" #include "KConsole.h" KDL_CLASS_INTROSPECTION_2 (KKeySequenceField, KWidget, KNotificationObject) // -------------------------------------------------------------------------------------------------------- KKeySequenceField::KKeySequenceField ( const std::string & s, int maxLength ) : KWidget () { sequence = s; max_sequence_length = maxLength; flags[KDL_WIDGET_FLAG_FIXED_SIZE] = false; flags[KDL_WIDGET_FLAG_FRAMED] = true; setBGColor(KColor(0.2, 0.2, 0.4, 0.5)); } #define DEBUG false // -------------------------------------------------------------------------------------------------------- void KKeySequenceField::setSequence ( const std::string & seq ) { KConsole::debugf(DEBUG, "KKeySequenceField::setSequence const std::string & seq = '%s'", seq.c_str()); KConsole::debugf(DEBUG, "KKeySequenceField::setSequence nolooop here, so let's check how far we get"); KConsole::debugf(DEBUG, "KKeySequenceField::setSequence set sequence"); sequence = seq; if (KMenu::shortcut_recorder.isRecording()) { KConsole::debugf(DEBUG, "KKeySequenceField::setSequence KMenu::shortcut_recorder.isRecording() == true"); return; } KConsole::debugf(DEBUG, "KKeySequenceField::setSequence notifyReceivers(sequence)"); notifyReceivers(sequence); KConsole::debugf(DEBUG, "KKeySequenceField::setSequence setPicked(false)"); setPicked(false); KConsole::debugf(DEBUG, "KKeySequenceField::setSequence getRootWidget()->layout()"); getRootWidget()->layout(); } // -------------------------------------------------------------------------------------------------------- void KKeySequenceField::setPicked ( bool p ) { if (picked != p) { picked = p; if (picked) { sequence = ""; KMenu::shortcut_recorder.startRecordingSequence((KObject*)this, (KSetStringPtr)&KKeySequenceField::setSequence, max_sequence_length); } } } // -------------------------------------------------------------------------------------------------------- KSize KKeySequenceField::getSize () const { int width = kMax(20, kKeyGetDisplayWidthForKeySequence(sequence) + 5); return KSize(width, 20); } // -------------------------------------------------------------------------------------------------------- void KKeySequenceField::render () { KWidget::render(); glPushMatrix(); glTranslatef(5.0, -13.0, 0.0); if (sequence != "") // draw the sequence { glColor4f(0.5, 0.5, 1.0, 1.0); kKeyDisplayKeySequence(sequence, KPosition()); } if (picked) // draw the cursor { int cPos = kKeyGetDisplayWidthForKeySequence(sequence)-5; glBegin(GL_LINES); glVertex2i(cPos, -3); glVertex2i(cPos, 10); glEnd(); } glPopMatrix(); } kiki/kodilib/src/widgets/KKeySequenceField.h0000666000000000000000000000116107644705710020043 0ustar rootroot/* * KKeySequenceField.h * kodisein */ #ifndef __KKeySequenceField #define __KKeySequenceField #include "KWidget.h" #include "KNotificationObject.h" class KKeySequenceField : public KWidget, public KNotificationObject { INTROSPECTION int max_sequence_length; std::string sequence; public: KKeySequenceField ( const std::string &, int = 2 ); void setSequence ( const std::string & ); void setPicked ( bool ); KSize getSize () const; void render (); }; #endif kiki/kodilib/src/widgets/KLabel.cpp0000666000000000000000000000536107644705710016236 0ustar rootroot/* * KLabel.cpp * kodisein */ #include "KLabel.h" #include "KConsole.h" #include "KTools.h" #include "KStringTools.h" KDL_CLASS_INTROSPECTION_1 (KLabel, KWidget) // -------------------------------------------------------------------------------------------------------- KLabel::KLabel ( const std::string & n ) : KWidget () { flags.resize(KDL_LABEL_FLAG_END); flags[KDL_WIDGET_FLAG_FIXED_SIZE] = false; setLargeFont(false); setText(n); } // -------------------------------------------------------------------------------------------------------- void KLabel::updateTextSize () { if (flags[KDL_WIDGET_FLAG_FIXED_SIZE]) { kStringCropRows (text, getTextRows()); kStringCropCols (text, getTextCols()); } else { size.w = kStringWidth (text, flags[KDL_LABEL_FLAG_LARGE_FONT]) + 10; size.h = kStringHeight(text, flags[KDL_LABEL_FLAG_LARGE_FONT]) + 5; } } // -------------------------------------------------------------------------------------------------------- void KLabel::setText( const std::string & t ) { text = t; update(); } // -------------------------------------------------------------------------------------------------------- void KLabel::update () { updateTextSize(); if (flags[KDL_WIDGET_FLAG_FIXED_SIZE] == false) { getRootWidget()->layout(); } } // -------------------------------------------------------------------------------------------------------- void KLabel::setSize ( KSize newSize ) { KSize maxSize(kMax(newSize.w, (int)getColumnWidth() + 10), kMax(newSize.h, (int)getRowHeight() + 5)); KWidget::setSize(maxSize); updateTextSize(); } // -------------------------------------------------------------------------------------------------------- void KLabel::setLargeFont ( bool lf ) { flags[KDL_LABEL_FLAG_LARGE_FONT] = lf; if (flags[KDL_WIDGET_FLAG_FIXED_SIZE] == false) { size.w = kStringWidth(text, flags[KDL_LABEL_FLAG_LARGE_FONT]) + 10; } } // -------------------------------------------------------------------------------------------------------- void KLabel::setTextSize ( KSize newSize ) { flags[KDL_WIDGET_FLAG_FIXED_SIZE] = true; setSize (KSize(getColumnWidth() * newSize.w + 5, getRowHeight() * newSize.h + 5)); } // -------------------------------------------------------------------------------------------------------- void KLabel::render () { KWidget::render(); glPushMatrix(); flags[KDL_LABEL_FLAG_LARGE_FONT] ? glTranslatef(5.0, -16.0, 0.0) : glTranslatef(3.0, -11.0, 0.0); kDisplayString(getText(), KPosition(0,0), flags[KDL_LABEL_FLAG_LARGE_FONT]); glPopMatrix(); } kiki/kodilib/src/widgets/KLabel.h0000666000000000000000000000300607644705710015675 0ustar rootroot/* * KLabel.h * kodisein */ #ifndef __KLabel #define __KLabel #include "KWidget.h" #include enum { KDL_LABEL_FLAG_LARGE_FONT = KDL_WIDGET_FLAG_END, KDL_LABEL_FLAG_END }; class KLabel : public KWidget { INTROSPECTION protected: std::string text; virtual void updateTextSize (); public: KLabel ( const std::string & = "" ); virtual void render (); virtual void update (); virtual void clear () { setText(""); } virtual void setText ( const std::string & n ); virtual void setSize ( KSize ); virtual void setTextCols ( int c ) { setTextSize(KSize(c, getTextRows())); } virtual void setTextSize ( KSize ); virtual void setLargeFont ( bool = true ); bool isLargeFont () const { return flags[KDL_LABEL_FLAG_LARGE_FONT]; } virtual std::string getText () const { return text; } int getTextRows () const { return ((size.h - 5) / getRowHeight()); } int getTextCols () const { return ((size.w - 10) / getColumnWidth()); } KSize getTextSize () const { return KSize(getTextCols(), getTextRows()); } int getColumnWidth () const { return (flags[KDL_LABEL_FLAG_LARGE_FONT] ? 9 : 8); } int getRowHeight () const { return (flags[KDL_LABEL_FLAG_LARGE_FONT] ? 15 : 13); } }; #endif kiki/kodilib/src/widgets/KMenu.cpp0000666000000000000000000000350707644705710016123 0ustar rootroot/* * KMenu.cpp * kodisein */ #include "KMenu.h" #include "KStatusMenuItem.h" #include "KSubMenuItem.h" KDL_CLASS_INTROSPECTION_1 (KMenu, KWidgetArray) bool KMenu::show_shortcuts = false; KKeyRecorder KMenu::shortcut_recorder; // -------------------------------------------------------------------------------------------------------- KMenu::KMenu () : KWidgetArray () { frame_spacing = 0; flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL] = false; } // -------------------------------------------------------------------------------------------------------- void KMenu::close() { PickableVector::iterator iter = children.begin(); while (iter != children.end()) { if ((*iter)->getClassId() >= KMenuItem::classId()) { ((KMenuItem*)*iter)->deactivate(); } iter++; } if (shortcut_recorder.isRecording()) { shortcut_recorder.stopRecording(); } } // -------------------------------------------------------------------------------------------------------- void KMenu::setXML ( std::string & xml ) { PickableVector::iterator iter = children.begin(); while (iter != children.end()) { if ((*iter)->getClassId() >= KMenuItem::classId()) { ((KMenuItem*)*iter)->setXML(xml); } iter++; } } // -------------------------------------------------------------------------------------------------------- std::string KMenu::getXML ( int depth ) const { std::string xml; PickableVector::const_iterator iter = children.begin(); while (iter != children.end()) { if ((*iter)->getClassId() >= KMenuItem::classId()) { xml += ((KMenuItem*)*iter)->getXML(depth); } iter++; } return xml; } kiki/kodilib/src/widgets/KMenu.h0000666000000000000000000000102607644705710015562 0ustar rootroot/* * KMenu.h * kodisein */ #ifndef __KMenu #define __KMenu #define KDL_MENU_DEFAULT_ITEM_HEIGHT 25 #include "KWidgetArray.h" #include "KKeyRecorder.h" class KMenu : public KWidgetArray { INTROSPECTION public: static KKeyRecorder shortcut_recorder; static bool show_shortcuts; KMenu (); virtual void close (); virtual std::string getXML ( int = 0 ) const; virtual void setXML ( std::string & ); }; #endif kiki/kodilib/src/widgets/KMenuItem.cpp0000666000000000000000000001417507644705710016745 0ustar rootroot/* * KMenuItem.cpp * kodisein */ #include "KMenuItem.h" #include "KEventHandler.h" #include "KConsole.h" #include "KMenu.h" #include "KKeyRecorder.h" #include "KColor.h" #include "KTools.h" #include "KXMLTools.h" #include "KKeyTools.h" #include KDL_CLASS_INTROSPECTION_1 (KMenuItem, KButton) // -------------------------------------------------------------------------------------------------------- KMenuItem::KMenuItem (const std::string & n, const std::string & shortCut) : KButton (n) { setLargeFont(true); shortcut = ""; setShortcut(shortCut); size.h = KDL_MENU_DEFAULT_ITEM_HEIGHT; } // -------------------------------------------------------------------------------------------------------- void KMenuItem::setShortcut ( const std::string & shortcutString ) { if (shortcutString != shortcut) { KEventHandler::menu_key_handler.removeSequenceCallback (shortcut, this, (KCallbackPtr)&KMenuItem::activate); shortcut = shortcutString; if (!KEventHandler::menu_key_handler.isSaveSequenceCallback(shortcut)) { // is an unsave shortcut, so restart the shortcut recording std::string errorMessage = kStringPrintf ("You can't use this shortcut (%s)\nbecause it's already in use.\nTry another one.", shortcutString.c_str()); KConsole::printError(errorMessage, true); KMenu::shortcut_recorder.startRecordingSequence((KObject*)this, (KSetStringPtr)&KMenuItem::setShortcut, 2); shortcut = ""; } else { KEventHandler::menu_key_handler.setSequenceCallback (shortcut, this, (KCallbackPtr)&KMenuItem::activate); } if (KMenu::show_shortcuts) { ((KMenu*)parent)->layout(); } } } // -------------------------------------------------------------------------------------------------------- void KMenuItem::highlight () { picked = true; } // -------------------------------------------------------------------------------------------------------- void KMenuItem::setPicked ( bool p ) { if (p) { highlight(); } } // -------------------------------------------------------------------------------------------------------- void KMenuItem::activate () { if (SDL_GetModState() == (KMOD_LALT | KMOD_LCTRL) && flags[KDL_WIDGET_FLAG_VISIBLE]) { KEventHandler::release_handler = NULL; setShortcut(""); KMenu::shortcut_recorder.startRecordingSequence((KObject*)this, (KSetStringPtr)&KMenuItem::setShortcut, 2); } else { activateItem(); } } // -------------------------------------------------------------------------------------------------------- void KMenuItem::activateItem () { KButton::activate(); } // -------------------------------------------------------------------------------------------------------- void KMenuItem::deactivate () { picked = false; } // -------------------------------------------------------------------------------------------------------- std::string KMenuItem::getXMLAttributes () const { std::string attributes = kStringPrintf("name='%s'", text.c_str()); if (shortcut != "") attributes += kStringPrintf(" shortcut='%s'", shortcut.c_str()); return attributes; } // -------------------------------------------------------------------------------------------------------- void KMenuItem::setXMLAttributes ( const std::string & xml ) { std::string shortcutString = kXMLReadNamedAttribute(xml, "shortcut"); if (shortcutString != "") setShortcut(shortcutString); } // -------------------------------------------------------------------------------------------------------- std::string KMenuItem::getXML ( int depth ) const { return kXMLTag("Item", getXMLAttributes(), depth); } // -------------------------------------------------------------------------------------------------------- void KMenuItem::setXML ( std::string & xml ) { std::string attributes; kXMLParseNamedOpenTag(xml, "Item", &attributes); setXMLAttributes(attributes); } // -------------------------------------------------------------------------------------------------------- std::string KMenuItem::getText () const { std::string itemText = KButton::getText(); if (KMenu::show_shortcuts && shortcut != "") itemText += " " + shortcut; return itemText; } // -------------------------------------------------------------------------------------------------------- KSize KMenuItem::getSize () const { int addWidth = 10; if (KMenu::show_shortcuts) { addWidth += kKeyGetDisplayWidthForKeySequence(shortcut) + 5; } return KSize(kStringWidth(KButton::getText(), flags[KDL_LABEL_FLAG_LARGE_FONT]) + addWidth, KDL_MENU_DEFAULT_ITEM_HEIGHT); } // -------------------------------------------------------------------------------------------------------- void KMenuItem::renderShortCut () { if (shortcut == "") return; glColor4f(0.5, 0.5, 1.0, 1.0); KPosition startPos(kStringWidth(text + " ", flags[KDL_LABEL_FLAG_LARGE_FONT]), 0); kKeyDisplayKeySequence(shortcut, startPos); } // -------------------------------------------------------------------------------------------------------- void KMenuItem::render () { glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); if (picked) { glColor4f(1.0, 1.0, 1.0, 1.0); } else if (getFGColor()) { getFGColor()->glColor(); } KWidget::render(); glPushMatrix(); flags[KDL_LABEL_FLAG_LARGE_FONT] ? glTranslatef(5.0, -15.0, 0.0) : glTranslatef(3.0, -10.0, 0.0); kDisplayString(text, KPosition(0, 0), flags[KDL_LABEL_FLAG_LARGE_FONT]); if (KMenu::show_shortcuts) { renderShortCut(); } glPopMatrix(); glPopAttrib(); } kiki/kodilib/src/widgets/KMenuItem.h0000666000000000000000000000204307644705710016401 0ustar rootroot/* * KMenuItem.h * kodisein */ #ifndef __KMenuItem #define __KMenuItem #include "KButton.h" class KMenuItem : public KButton { INTROSPECTION protected: std::string shortcut; public: KMenuItem ( const std::string &, const std::string & = "" ); virtual void setShortcut ( const std::string & ); virtual std::string getShortcut () const { return shortcut; } virtual void setPicked ( bool ); virtual void activate (); virtual void activateItem (); virtual void deactivate (); virtual void highlight (); virtual void render (); virtual void renderShortCut (); virtual std::string getText () const; virtual KSize getSize () const; virtual void setXMLAttributes ( const std::string & ); virtual std::string getXMLAttributes () const; virtual void setXML ( std::string & ); virtual std::string getXML ( int = 0 ) const; }; #endif kiki/kodilib/src/widgets/KNumberField.cpp0000666000000000000000000000264607644705710017416 0ustar rootroot/* * KNumberField.cpp * kodisein */ #include "KNumberField.h" #include "KConsole.h" #include "KKey.h" KDL_CLASS_INTROSPECTION_1 (KNumberField, KTextField) // -------------------------------------------------------------------------------------------------------- KNumberField::KNumberField ( GLfloat number ) : KTextField ("") { KWidget::flags[KDL_TEXTFIELD_FLAG_NOTIFY_ON_UNPICK] = true; setTextCols(9); setText(kStringPrintf("%g", number)); } // -------------------------------------------------------------------------------------------------------- void KNumberField::notify () { KTextField::notify(); notifyReceivers(getValue()); } // -------------------------------------------------------------------------------------------------------- bool KNumberField::handleKey ( const KKey & key ) { if (key.sym == SDLK_DELETE || key.sym == SDLK_BACKSPACE || key.sym == SDLK_TAB || key.sym == SDLK_RETURN || key.sym == SDLK_LEFT || key.sym == SDLK_RIGHT || (key.character >= '+' && key.character <= '.') || (key.character >= '0' && key.character <= '9') || (key.mod > 1)) { return KTextField::handleKey (key); } return true; } // -------------------------------------------------------------------------------------------------------- GLfloat KNumberField::getValue ( ) { return atof(text.c_str()); } kiki/kodilib/src/widgets/KNumberField.h0000666000000000000000000000065307644705710017057 0ustar rootroot/* * KNumberField.h * kodisein */ #ifndef __KNumberField #define __KNumberField #include "KTextField.h" class KNumberField : public KTextField { INTROSPECTION public: KNumberField ( GLfloat ); virtual GLfloat getValue (); virtual void notify (); virtual bool handleKey ( const KKey & ); }; #endif kiki/kodilib/src/widgets/KProjectionWidget.cpp0000666000000000000000000000623107644705710020474 0ustar rootroot/* * KProjectionWidget.cpp * kodisein */ #include "KProjectionWidget.h" #include "KEventHandler.h" #include "KLightingProjection.h" #include "KConsole.h" #include KDL_CLASS_INTROSPECTION_2 (KProjectionWidget, KWidget, KPickHandler) // -------------------------------------------------------------------------------------------------------- KProjectionWidget::KProjectionWidget() : KWidget (), KPickHandler () { KWidget::flags[KDL_WIDGET_FLAG_FIXED_SIZE] = false; KWidget::flags[KDL_WIDGET_FLAG_FILL_X] = true; KWidget::flags[KDL_WIDGET_FLAG_FILL_Y] = true; KPickHandler::flags[KDL_PICKHANDLER_FLAG_PROJECTION_ENABLED] = true; size.w = 300; size.h = 300; projection = new KLightingProjection(); } // -------------------------------------------------------------------------------------------------------- void KProjectionWidget::display () { if (KWidget::flags[KDL_WIDGET_FLAG_VISIBLE] == false) return; KWidget::display(); glPushAttrib( GL_CURRENT_BIT | GL_POLYGON_BIT | GL_LIGHTING_BIT | GL_TRANSFORM_BIT | GL_VIEWPORT_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glMultMatrixf(matrix); glEnable (GL_DEPTH_TEST); glDisable(GL_LIGHTING); glColor4f(0.0, 0.0, 0.0, 0.75); glRasterPos2i(1, -1); glPixelZoom(size.w-2, -(size.h-2)); GLuint depth = (GLuint)-1; glDepthFunc(GL_ALWAYS); glDrawPixels(1, 1, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &depth); glDepthFunc(GL_LESS); glPixelZoom(1, 1); glPolygonMode(GL_FRONT_AND_BACK, KEventHandler::flags[KDL_DISPLAY_MODE_WIREFRAME] ? GL_LINE : GL_FILL); KEventHandler::resetLighting(); KPosition screenPos = getScreenPos(); KSize screenSize = KEventHandler::getScreenSize(); projection->setViewportBorder ( screenPos.x + 1, screenPos.y + 1, screenSize.w - (screenPos.x + size.w) + 1, screenSize.h - (screenPos.y + size.h) + 1); glMatrixMode(GL_PROJECTION); glPushMatrix(); projection->initProjection(); displayContent(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glPopAttrib(); } // -------------------------------------------------------------------------------------------------------- bool KProjectionWidget::pick ( const KMouseEvent & event ) { if (KWidget::flags[KDL_WIDGET_FLAG_VISIBLE] == false) return false; KPosition widgetMousePos = event.pos - getScreenPos(); if ( widgetMousePos.x > 0 && widgetMousePos.x < (int)size.w && widgetMousePos.y > 0 && widgetMousePos.y < (int)size.h) { getWindow()->unpick(); KPickHandler::pick(event); return true; } else { return false; } } // -------------------------------------------------------------------------------------------------------- void KProjectionWidget::displayPickables( int ) { KWidget::display(); displayContent(); } kiki/kodilib/src/widgets/KProjectionWidget.h0000666000000000000000000000110007644705710020127 0ustar rootroot/* * KProjectionWidget.h * kodisein */ #ifndef __KProjectionWidget #define __KProjectionWidget #include "KWidget.h" #include "KPickHandler.h" class KProjectionWidget : public KWidget, public KPickHandler { INTROSPECTION public: KProjectionWidget (); virtual void display (); virtual void display ( int mode ) {} virtual void displayPickables ( int mode ); virtual void displayContent () = 0; virtual bool pick ( const KMouseEvent & ); }; #endif kiki/kodilib/src/widgets/KScrollBar.cpp0000666000000000000000000001243607644705711017104 0ustar rootroot/* * KScrollBar.cpp * kodisein */ #include "KScrollBar.h" #include "KWindow.h" #include "KIconButton.h" #include "KSliderButton.h" #include "KConsole.h" #include "KColor.h" KDL_CLASS_INTROSPECTION_2 (KScrollBar, KWidgetArray, KNotificationObject) // -------------------------------------------------------------------------------------------------------- KScrollBar::KScrollBar ( KWindow * parentWindow ) : KWidgetArray () { spacing = 0; frame_spacing = 0; flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL] = false; flags[KDL_WIDGET_FLAG_FRAMED] = false; pageup_button = new KSliderButton (); addChild(pageup_button); pageup_button->flags[KDL_WIDGET_FLAG_FILL_Y] = true; parentWindow->addPickable (pageup_button); pageup_button->addReceiverCallback(this, (KCallbackPtr)&KScrollBar::pageUpButtonCallback); slider = new KSliderButton (); addChild(slider); parentWindow->addPickable (slider); slider->setBGColor(KColor(0.25, 0.25, 0.25, 0.5)); slider->addReceiverCallback(this, (KCallbackPtr)&KScrollBar::sliderMovedCallback); pagedown_button = new KSliderButton (); addChild(pagedown_button); parentWindow->addPickable (pagedown_button); pagedown_button->addReceiverCallback(this, (KCallbackPtr)&KScrollBar::pageDownButtonCallback); up_button = new KIconButton (KDL_ICONBUTTON_ARROW_UP); addChild(up_button); parentWindow->addPickable (up_button); up_button->addReceiverCallback(this, (KCallbackPtr)&KScrollBar::lineUpButtonCallback); down_button = new KIconButton (KDL_ICONBUTTON_ARROW_DOWN); addChild(down_button); parentWindow->addPickable (down_button); down_button->addReceiverCallback(this, (KCallbackPtr)&KScrollBar::lineDownButtonCallback); layout(); setUnits(0,0,0); } // -------------------------------------------------------------------------------------------------------- void KScrollBar::lineDownButtonCallback () { if (slider_value >= 1.0) return; slider_value = kMin(slider_value+line_increment, 1.0); updateSlider(); notifyReceiversType(KDL_NOTIFICATION_TYPE_SCROLL_LINE_DOWN); } // -------------------------------------------------------------------------------------------------------- void KScrollBar::lineUpButtonCallback () { if (slider_value <= 0.0) return; slider_value = kMax(slider_value-line_increment, 0.0); updateSlider(); notifyReceiversType(KDL_NOTIFICATION_TYPE_SCROLL_LINE_UP); } // -------------------------------------------------------------------------------------------------------- void KScrollBar::pageUpButtonCallback () { if (slider_value <= 0.0) return; slider_value = kMax(slider_value-page_increment, 0.0); updateSlider(); notifyReceiversType(KDL_NOTIFICATION_TYPE_SCROLL_PAGE_UP); } // -------------------------------------------------------------------------------------------------------- void KScrollBar::pageDownButtonCallback () { if (slider_value >= 1.0) return; slider_value = kMin(slider_value+page_increment, 1.0); updateSlider(); notifyReceiversType(KDL_NOTIFICATION_TYPE_SCROLL_PAGE_DOWN); } // -------------------------------------------------------------------------------------------------------- void KScrollBar::sliderMovedCallback () { float slider_y = slider->getPosition()[Y]; //slider_value = kMin(1.0, kMax(0.0, (float)(size.h-getLocatorWidgetPos().y-7)/(size.h - 3*14))); int net_bar_height = size.h - 28 - slider->getSize().h; // minus two arrow buttons and slider slider_value = kMinMax(0.0, 1.0, (float)-slider_y / net_bar_height); updateSlider(); notifyReceivers(slider_value); } // -------------------------------------------------------------------------------------------------------- KSize KScrollBar::relayout ( const KSize & newSize ) { size = KSize(min_size.w, kMax(3*14, newSize.h)); updateSlider(); up_button->setPosition (0,-size.h+28); down_button->setPosition(0,-size.h+14); return size; } // -------------------------------------------------------------------------------------------------------- void KScrollBar::setUnits ( float current, float view, float full ) { if (view < full) { line_increment = 1.0/(full-view); page_increment = view * line_increment; slider_value = kMax(0.0, kMin(1.0, current/(full-view))); slider_size = kMin(1.0, view/full); } else { line_increment = 0.0; page_increment = 0.0; slider_value = 0.0; slider_size = 1.0; } updateSlider(); } // -------------------------------------------------------------------------------------------------------- void KScrollBar::updateSlider () { int bar_height = size.h - 2 * 14; int slider_height = (int)(slider_size * (bar_height-14))+14; slider->KWidget::setSize(KSize(14,slider_height)); int net_bar_height = bar_height - slider_height; int slider_pos_y = (int)(slider_value * net_bar_height); slider->setPosition(0, -slider_pos_y); pageup_button->KWidget::setSize(KSize(14, slider_pos_y)); pagedown_button->KWidget::setSize(KSize(14, net_bar_height - slider_pos_y)); pagedown_button->setPosition(0, -slider_pos_y-slider_height); } kiki/kodilib/src/widgets/KScrollBar.h0000666000000000000000000000217607644705711016551 0ustar rootroot/* * KScrollBar.h * kodisein */ #ifndef __KScrollBar #define __KScrollBar #include "KWidgetArray.h" #include "KButton.h" enum { KDL_NOTIFICATION_TYPE_SCROLL_LINE_UP = KDL_NOTIFICATION_TYPE_NOTIFICATION_END, KDL_NOTIFICATION_TYPE_SCROLL_LINE_DOWN, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_UP, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_DOWN }; class KScrollBar : public KWidgetArray, public KNotificationObject { INTROSPECTION protected: KButton * up_button; KButton * down_button; KButton * pageup_button; KButton * pagedown_button; KButton * slider; float slider_value; float slider_size; float line_increment; float page_increment; void updateSlider (); public: KScrollBar ( KWindow * parentWindow ); KSize relayout ( const KSize & ); void setUnits ( float current, float view, float full ); void sliderMovedCallback (); void lineUpButtonCallback (); void lineDownButtonCallback (); void pageUpButtonCallback (); void pageDownButtonCallback (); }; #endif kiki/kodilib/src/widgets/KSliderButton.cpp0000666000000000000000000000205507644705711017633 0ustar rootroot/* * KSliderButton.cpp * kodisein */ #include "KSliderButton.h" #include "KEventHandler.h" #include "KColor.h" KDL_CLASS_INTROSPECTION_1 (KSliderButton, KButton) // -------------------------------------------------------------------------------------------------------- KSliderButton::KSliderButton () : KButton () { flags[KDL_WIDGET_FLAG_FIXED_SIZE] = true; flags[KDL_WIDGET_FLAG_FRAMED] = true; min_size = KSize(14,14); size = min_size; } // -------------------------------------------------------------------------------------------------------- void KSliderButton::moved ( const KMouseEvent & mouseEvent ) { setPosition (getPosition() + (KVector)mouseEvent.delta); notifyReceivers (); } // -------------------------------------------------------------------------------------------------------- void KSliderButton::render () { glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); if (getFGColor()) { getFGColor()->glColor(); } KWidget::render(); glPopAttrib(); } kiki/kodilib/src/widgets/KSliderButton.h0000666000000000000000000000070107644705711017274 0ustar rootroot/* * KSliderButton.h * kodisein */ #ifndef __KSliderButton #define __KSliderButton #include "KButton.h" #include "KNotificationObject.h" class KSliderButton : public KButton { INTROSPECTION public: KSliderButton (); virtual void moved ( const KMouseEvent & ); virtual void setSize ( KSize & s ) { KWidget::setSize(s); } virtual void render (); }; #endif kiki/kodilib/src/widgets/KStatusMenuItem.cpp0000666000000000000000000000460507644705711020147 0ustar rootroot/* * KStatusMenuItem.cpp * kodisein */ #include "KStatusMenuItem.h" #include "KConsole.h" #include "KXMLTools.h" KDL_CLASS_INTROSPECTION_1 (KStatusMenuItem, KMenuItem) // -------------------------------------------------------------------------------------------------------- KStatusMenuItem::KStatusMenuItem (const std::string & trueText, const std::string & falseText, const std::string & shortCut) : KMenuItem (trueText,shortCut) { true_text = trueText; false_text = falseText; } // -------------------------------------------------------------------------------------------------------- void KStatusMenuItem::activateItem () { setState(!getState()); } // -------------------------------------------------------------------------------------------------------- void KStatusMenuItem::render () { setState(getState()); // updates text, if value changed KMenuItem::render(); } // -------------------------------------------------------------------------------------------------------- void KStatusMenuItem::setState ( bool s ) { if (s != getState()) { if (s == false) { KButton::deactivate(); // false notification } else { KButton::activate(); // callback & true notification picked = false; } } setText (s ? true_text : false_text); } // -------------------------------------------------------------------------------------------------------- bool KStatusMenuItem::getState () const { bool value; if (receiveValue(&value)) return value; // value provider callback was set return (text == true_text); } // -------------------------------------------------------------------------------------------------------- std::string KStatusMenuItem::getXMLAttributes () const { std::string attributes = kStringPrintf("name='%s'", true_text.c_str()); if (shortcut != "") attributes += kStringPrintf(" shortcut='%s'", shortcut.c_str()); attributes += !getState() ? " status='yes'" : " status='no'"; return attributes; } // -------------------------------------------------------------------------------------------------------- void KStatusMenuItem::setXMLAttributes ( const std::string & xml ) { KMenuItem::setXMLAttributes(xml); setState (kXMLReadNamedAttribute(xml, "status") == "no"); } kiki/kodilib/src/widgets/KStatusMenuItem.h0000666000000000000000000000135007644705711017606 0ustar rootroot/* * KStatusMenuItem.h * kodisein */ #ifndef __KStatusMenuItem #define __KStatusMenuItem #include "KMenuItem.h" class KStatusMenuItem : public KMenuItem { INTROSPECTION protected: std::string true_text; std::string false_text; public: KStatusMenuItem ( const std::string & , const std::string &, const std::string & = "" ); void setState ( bool ); bool getState () const; void activateItem (); void render (); const std::string & getTrueText () const { return true_text; } void setXMLAttributes ( const std::string & ); std::string getXMLAttributes () const; }; #endif kiki/kodilib/src/widgets/KSubMenuItem.cpp0000666000000000000000000000662507644705711017421 0ustar rootroot/* * KSubMenuItem.cpp * kodisein */ #include "KSubMenuItem.h" #include "KEventHandler.h" #include "KConsole.h" #include "KXMLTools.h" KDL_CLASS_INTROSPECTION_1 (KSubMenuItem, KMenuItem) // -------------------------------------------------------------------------------------------------------- KSubMenuItem::KSubMenuItem ( const std::string & nm, KMenu * menu ) : KMenuItem (nm) { child_menu = menu; } // -------------------------------------------------------------------------------------------------------- void KSubMenuItem::setParent ( KWidget * w ) { KMenuItem::setParent(w); if (getFGColor()) child_menu->setFGColor(*getFGColor()); if (getBGColor()) child_menu->setBGColor(*getBGColor()); } // -------------------------------------------------------------------------------------------------------- void KSubMenuItem::deactivate () { picked = false; child_menu->close(); } // -------------------------------------------------------------------------------------------------------- void KSubMenuItem::render () { KMenuItem::render(); KSize itemSize = getSize(); if (((KMenu*)parent)->flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) { glBegin(GL_TRIANGLES); // display down arrow glVertex2i(itemSize.w - 21, -itemSize.h/2 + 5); glVertex2i(itemSize.w - 13, -itemSize.h/2 - 3); glVertex2i(itemSize.w - 5, -itemSize.h/2 + 5); glEnd(); } else { glBegin(GL_TRIANGLES); // display right arrow glVertex2i(itemSize.w - 13, -itemSize.h/2 + 8); glVertex2i(itemSize.w - 13, -itemSize.h/2 - 8); glVertex2i(itemSize.w - 5, -itemSize.h/2); glEnd(); } if (picked) // display child menu { int spacing = child_menu->getSpacing(); KSize parentSize = ((KMenu*)parent)->getSize(); if (((KMenu*)parent)->flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) // display childmenu below { glTranslatef(0.0, -parentSize.h - spacing, 0.0); } else // display child menu beside { glBegin(GL_LINES); glVertex2i(itemSize.w + 1, -itemSize.h/2); glVertex2i(parentSize.w + spacing, -itemSize.h/2); glEnd(); glTranslatef(parentSize.w + spacing, 0.0, 0.0); } child_menu->display(); } } // -------------------------------------------------------------------------------------------------------- KSize KSubMenuItem::getSize () const { KSize menuItemSize = KButton::getSize(); return KSize(menuItemSize.w + 25, menuItemSize.h); } // -------------------------------------------------------------------------------------------------------- std::string KSubMenuItem::getXML ( int depth ) const { std::string xml; xml += kXMLOpenTag("SubMenu", getXMLAttributes(), depth); xml += getChildMenu()->getXML(depth+KDL_XML_INDENT); xml += kXMLCloseTag("SubMenu", depth); return xml; } // -------------------------------------------------------------------------------------------------------- void KSubMenuItem::setXML ( std::string & xml ) { std::string attributes; kXMLParseNamedOpenTag(xml, "SubMenu", &attributes); setXMLAttributes(attributes); child_menu->setXML(xml); kXMLParseNamedCloseTag(xml, "SubMenu"); } kiki/kodilib/src/widgets/KSubMenuItem.h0000666000000000000000000000205607644705711017060 0ustar rootroot/* * KSubMenuItem.h * kodisein */ #ifndef __KSubMenuItem #define __KSubMenuItem #include "KMenuItem.h" #include "KMenu.h" class KSubMenuItem : public KMenuItem { INTROSPECTION protected: KMenu * child_menu; public: KSubMenuItem ( const std::string &, KMenu * ); virtual void render (); virtual void setParent ( KWidget * ); virtual KMenu * getChildMenu () const { return child_menu; } virtual void setChildMenu ( KMenu * menu ) { child_menu = menu; } virtual void deactivate (); virtual KSize getSize () const; virtual KSize layout () { child_menu->layout(); return getSize(); } virtual bool hasSubPickables () const { return true; } virtual const PickableVector * getSubPickables () const { return child_menu->getChildren(); } virtual void setXML ( std::string & ); virtual std::string getXML ( int = 0 ) const; }; #endif kiki/kodilib/src/widgets/KTextField.cpp0000666000000000000000000002662007644705711017111 0ustar rootroot/* * KTextField.cpp * kodisein */ #include "KTextField.h" #include "KEventHandler.h" #include "KMenu.h" #include "KConsole.h" #include "KTools.h" #include "KKey.h" KDL_CLASS_INTROSPECTION_2 (KTextField, KLabel, KKeyHandler) // -------------------------------------------------------------------------------------------------------- KTextField::KTextField ( const std::string & n ) : KLabel(n), KKeyHandler() { KWidget::flags.resize(KDL_TEXTFIELD_FLAG_END); KWidget::flags[KDL_WIDGET_FLAG_FRAMED] = true; KWidget::flags[KDL_TEXTFIELD_FLAG_NOTIFY_ON_UNPICK] = false; x_offset = 0; cursor_pos = text.size(); selection_pos = cursor_pos; selection_color.setValues(0.0, 0.0, 1.0, 0.25); update(); } // -------------------------------------------------------------------------------------------------------- KTextField * KTextField::firstTextFieldInVector ( const std::vector & widgets ) { std::vector::const_iterator iter = widgets.begin(); while (iter != widgets.end()) { if ((*iter)->getClassId() >= KTextField::classId()) return (KTextField*)*iter; iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- KTextField * KTextField::lastTextFieldInVector ( const std::vector & widgets ) { std::vector::const_reverse_iterator iter = widgets.rbegin(); while (iter != widgets.rend()) { if ((*iter)->getClassId() >= KTextField::classId()) return (KTextField*)*iter; iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- KTextField * KTextField::prevTextField () { KTextField * sibling = lastTextFieldInVector(getRootWidget()->getChildrenBeforeWidget(this)); if (!sibling) sibling = lastTextFieldInVector(getRootWidget()->getChildrenBehindWidget(this)); return sibling; } // -------------------------------------------------------------------------------------------------------- KTextField * KTextField::nextTextField () { KTextField * sibling = firstTextFieldInVector(getRootWidget()->getChildrenBehindWidget(this)); if (!sibling) sibling = firstTextFieldInVector(getRootWidget()->getChildrenBeforeWidget(this)); return sibling; } // -------------------------------------------------------------------------------------------------------- void KTextField::setText ( const std::string & t ) { KLabel::setText(t); cursor_pos = selection_pos = text.size(); } // -------------------------------------------------------------------------------------------------------- void KTextField::printf ( const char * fmt ... ) { va_list argList; va_start(argList, fmt); setText(text + kStringPrintf(std::string(fmt), &argList)); va_end(argList); } // -------------------------------------------------------------------------------------------------------- void KTextField::setPicked ( bool p ) { if (picked != p) { picked = p; if (picked) { cursor_pos = kMin((int)text.size(), x_offset + kMax(getLocatorWidgetPos().x, 0)/getColumnWidth()); selection_pos = cursor_pos; KEventHandler::setFocusKeyHandler(this); getWindow()->setFocusWidget(this); } else { if (KWidget::flags[KDL_TEXTFIELD_FLAG_NOTIFY_ON_UNPICK]) { notify(); } getWindow()->setFocusWidget(NULL); KEventHandler::setFocusKeyHandler(NULL); } notifyReceivers(picked, KDL_NOTIFICATION_TYPE_TEXTFIELD_PICKED); } } // -------------------------------------------------------------------------------------------------------- void KTextField::mouseMoved ( const KMouseEvent & event ) { KPosition mouseWidgetPos = event.pos - getScreenPos(); // position relative to widget // set new selection pos (we get this event only when mouse down) selection_pos = kMin((int)text.size(), x_offset + kMax(mouseWidgetPos.x, 0)/getColumnWidth()); // scroll content if mouse outside window ... int columnWidth = getColumnWidth(); if (mouseWidgetPos.x < -columnWidth) // mouseto the left { x_offset = kMax(0, x_offset-(-mouseWidgetPos.x/columnWidth)); } else if (mouseWidgetPos.x > size.w + getColumnWidth()) // mouse to the right { // scroll to the right but don't overscroll int securePos = kMax(0, (int)text.size() - getTextCols()); x_offset = kMin(securePos, x_offset+((mouseWidgetPos.x - size.w)/columnWidth)); } } // -------------------------------------------------------------------------------------------------------- void KTextField::doubleClicked () { selectAll(); } // -------------------------------------------------------------------------------------------------------- bool KTextField::handleKey ( const KKey & key ) { if (key.sym == SDLK_RETURN || key.sym == SDLK_TAB) { setPicked(false); if (KWidget::flags[KDL_TEXTFIELD_FLAG_NOTIFY_ON_UNPICK] == false) { notify(); } if (key.sym != SDLK_RETURN) { KTextField * textField; if (key.mod & KMOD_SHIFT) { textField = prevTextField(); } else { textField = nextTextField(); } if (textField) { textField->setPicked(true); textField->selectAll(); } } } else if (key.sym == SDLK_BACKSPACE) { if (cursor_pos > 0 && cursor_pos == selection_pos) { text.erase(text.begin()+cursor_pos-1); cursor_pos--; } else { eraseSelection(); cursor_pos = kMin(cursor_pos, selection_pos); } selection_pos = cursor_pos; } else if (key.sym == SDLK_RIGHT) { cursor_pos = kMin(cursor_pos+1, (int)text.size()); if (!(key.mod & KMOD_SHIFT)) selection_pos = cursor_pos; } else if (key.sym == SDLK_LEFT) { cursor_pos = kMax(cursor_pos-1, 0); if (!(key.mod & KMOD_SHIFT)) selection_pos = cursor_pos; } else if (key.sym == SDLK_DELETE) // entf { if (cursor_pos < (int)text.size() && cursor_pos == selection_pos) { text.erase(text.begin()+cursor_pos); } else { eraseSelection(); } } else if (key.mod & KMOD_META) { if (key.sym == SDLK_a) { selectAll(); } else if (key.sym == SDLK_x) { KEventHandler::copy_string = getSelection(); eraseSelection(); } else if (key.sym == SDLK_c) { KEventHandler::copy_string = getSelection(); } else if (key.sym == SDLK_v) { eraseSelection(); text.insert(cursor_pos, KEventHandler::copy_string); update(); cursor_pos+=KEventHandler::copy_string.size(); selection_pos = cursor_pos; } } else if (key.mod & KMOD_CTRL) { if (key.sym == SDLK_a) { cursor_pos = selection_pos = 0; } else if (key.sym == SDLK_e) { cursor_pos = selection_pos = text.size(); } else if (key.sym == SDLK_k) { selection_pos = text.size(); eraseSelection(); } } else if (key.character >= 32 ) // character input { eraseSelection(); text.insert(text.begin()+cursor_pos, key.character); update(); cursor_pos++; selection_pos = cursor_pos; } update(); return true; } // -------------------------------------------------------------------------------------------------------- std::string KTextField::getSelection () const { if (cursor_pos == selection_pos) return ""; unsigned int start = kMin(cursor_pos, selection_pos); return text.substr (start, kMax(cursor_pos, selection_pos)-start); } // -------------------------------------------------------------------------------------------------------- void KTextField::selectAll () { cursor_pos = 0; selection_pos = text.size(); } // -------------------------------------------------------------------------------------------------------- void KTextField::eraseSelection () { if (selection_pos != cursor_pos) { int minPos = kMin(cursor_pos, selection_pos); text.erase( text.begin()+minPos, text.begin()+kMax(cursor_pos, selection_pos)); cursor_pos = selection_pos = minPos; } } // -------------------------------------------------------------------------------------------------------- void KTextField::render () { KWidget::render(); glEnable(GL_SCISSOR_TEST); glScissor(getScreenPos().x, getScreenPos().y, size.w, size.h); int xOffset = (-x_offset * getColumnWidth()); if (picked) { int cPos = xOffset + cursor_pos * getColumnWidth(); int sPos = xOffset + selection_pos * getColumnWidth(); if (selection_pos != cursor_pos) // draw the selection { glPushAttrib (GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_POLYGON_BIT); selection_color.glColor(); glDisable (GL_CULL_FACE); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); glBegin (GL_QUADS); glVertex2i (3 + cPos, 0); glVertex2i (3 + cPos, -getSize().h); glVertex2i (3 + sPos, -getSize().h); glVertex2i (3 + sPos, 0); glEnd(); glPopAttrib(); } glBegin(GL_LINES); // draw the cursor glVertex2i(3 + cPos, 0); glVertex2i(3 + cPos, -getSize().h); glEnd(); } glPushMatrix(); KWidget::flags[KDL_LABEL_FLAG_LARGE_FONT] ? glTranslatef(5, -15, 0) : glTranslatef(3, -10, 0); kDisplayString(text, KPosition(xOffset, 0), KWidget::flags[KDL_LABEL_FLAG_LARGE_FONT]); glPopMatrix(); glDisable(GL_SCISSOR_TEST); } // -------------------------------------------------------------------------------------------------------- void KTextField::update () { if (KWidget::flags[KDL_WIDGET_FLAG_FIXED_SIZE]) { // avoid wasting available space () x_offset = kMax(0, kMin(x_offset, (int)text.size() - getTextCols())); // make sure that cursor is in visible part of text if (cursor_pos - x_offset > getTextCols()) // right { x_offset = cursor_pos - getTextCols(); } else if (cursor_pos < x_offset) // left { x_offset = cursor_pos; } // try to make whole selection visible if (selection_pos - x_offset > getTextCols()) { x_offset = kMin(cursor_pos, selection_pos - getTextCols()); } else if ((int)selection_pos < x_offset) { x_offset = kMax (cursor_pos, selection_pos); } } else { KLabel::update(); } } kiki/kodilib/src/widgets/KTextField.h0000666000000000000000000000303207644705711016546 0ustar rootroot/* * KTextField.h * kodisein */ #ifndef __KTextField #define __KTextField #include "KLabel.h" #include "KKeyHandler.h" #include "KNotificationObject.h" #include "KColor.h" enum { KDL_TEXTFIELD_FLAG_NOTIFY_ON_UNPICK = KDL_LABEL_FLAG_END, KDL_TEXTFIELD_FLAG_END}; enum { KDL_NOTIFICATION_TYPE_TEXTFIELD_PICKED = KDL_NOTIFICATION_TYPE_NOTIFICATION_END, KDL_NOTIFICATION_TYPE_TEXTFIELD_END }; class KTextField : public KLabel, public KKeyHandler { INTROSPECTION protected: int cursor_pos; int selection_pos; int x_offset; KColor selection_color; KTextField * firstTextFieldInVector ( const std::vector & ); KTextField * lastTextFieldInVector ( const std::vector & ); KTextField * nextTextField (); KTextField * prevTextField (); public: KTextField ( const std::string & = "" ); virtual void selectAll (); virtual void update (); virtual void render (); virtual void mouseMoved ( const KMouseEvent & ); virtual void doubleClicked (); virtual std::string getSelection () const; virtual void eraseSelection (); virtual void setPicked ( bool ); virtual void setText ( const std::string & ); virtual void printf ( const char * fmt ... ); virtual void notify () { notifyReceivers(text); } virtual bool handleKey ( const KKey & ); }; #endif kiki/kodilib/src/widgets/KTextWidget.cpp0000666000000000000000000000663007644705711017310 0ustar rootroot/* * KTextWidget.cpp * kodisein */ #include "KTextWidget.h" #include "KConsole.h" #include "KStringTools.h" KDL_CLASS_INTROSPECTION_1 (KTextWidget, KLabel) // -------------------------------------------------------------------------------------------------------- KTextWidget::KTextWidget () : KLabel () { setLargeFont(false); flags.resize(KDL_TEXTWIDGET_FLAG_END); flags[KDL_WIDGET_FLAG_FRAMED] = true; flags[KDL_WIDGET_FLAG_FIXED_SIZE] = true; flags[KDL_TEXTWIDGET_FLAG_AUTO_SCROLLDOWN] = false; current_row = INT_MAX; } // -------------------------------------------------------------------------------------------------------- void KTextWidget::setLabelText () { int lineIndex = kStringRows(full_text) - getTextRows(); if ((int)current_row < lineIndex) lineIndex = current_row; lineIndex = kMax(lineIndex, 0); unsigned int startPos = lineIndex ? kStringNthCharPos(full_text, lineIndex, '\n')+1 : 0; unsigned int endPos = kStringNthCharPos(full_text, lineIndex + getTextRows(), '\n')+1; setText(full_text.substr(startPos, (endPos - startPos))); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::clear () { setText(""); full_text = ""; // current_row = 0; } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollRelative ( float value ) { current_row = kMax(0, (int)(value * ((int)kStringRows(full_text) - getTextRows()))); setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollToTop () { current_row = 0; setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollToBottom () { current_row = flags[KDL_TEXTWIDGET_FLAG_AUTO_SCROLLDOWN] ? INT_MAX : kStringRows(full_text); setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollLineUp () { current_row = kMax(kMin((int)current_row, (int)(kStringRows(full_text) - getTextRows()))-1, 0); setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollPageUp () { current_row = kMax (kMin ((int)current_row, (int)(kStringRows(full_text) - getTextRows()) )- (int)(getTextRows()-2), 0); setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollLineDown () { current_row++; setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::scrollPageDown () { current_row += kMax(0, getTextRows()-2); setLabelText(); } // -------------------------------------------------------------------------------------------------------- void KTextWidget::printf ( const char * fmt ... ) { va_list argList; va_start(argList, fmt); std::string newText = kStringPrintf(std::string(fmt), &argList); va_end(argList); full_text += newText; setLabelText(); } kiki/kodilib/src/widgets/KTextWidget.h0000666000000000000000000000210107644705711016742 0ustar rootroot/* * KTextWidget.h * kodisein */ #ifndef __KTextWidget #define __KTextWidget #include "KLabel.h" enum { KDL_TEXTWIDGET_FLAG_AUTO_SCROLLDOWN = KDL_LABEL_FLAG_END, KDL_TEXTWIDGET_FLAG_END }; class KTextWidget : public KLabel { INTROSPECTION protected: std::string full_text; unsigned int current_row; public: KTextWidget (); virtual void print ( const std::string & s ) { printf("%s", s.c_str()); } virtual void printf ( const char * fmt ... ); virtual void scrollPageUp (); virtual void scrollPageDown (); virtual void scrollLineUp (); virtual void scrollLineDown (); virtual void scrollToTop (); virtual void scrollToBottom (); virtual void scrollRelative ( float ); virtual void clear (); void setLabelText (); int getCurrentRow () const { return current_row; } const std::string & getFullText () const { return full_text; } }; #endif kiki/kodilib/src/widgets/KToggleButton.cpp0000666000000000000000000000222307644705711017627 0ustar rootroot/* * KToggleButton.cpp * kodisein */ #include "KToggleButton.h" #include "KColor.h" KDL_CLASS_INTROSPECTION_1 (KToggleButton, KButton) // -------------------------------------------------------------------------------------------------------- KToggleButton::KToggleButton () : KButton () { size.w = 11; size.h = 11; } // -------------------------------------------------------------------------------------------------------- void KToggleButton::setPicked ( bool p ) { if (p) { if (picked) deactivate(); else activate(); } } // -------------------------------------------------------------------------------------------------------- void KToggleButton::render () { glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); if (getFGColor()) getFGColor()->glColor(); KLabel::render(); if (picked) { glBegin(GL_LINES); glVertex3f(0.0, 0.0, 0.0); glVertex3f(size.w, -size.h, 0.0); glVertex3f(0.0, -size.h, 0.0); glVertex3f(size.w, 0.0, 0.0); glEnd(); } glPopAttrib(); } kiki/kodilib/src/widgets/KToggleButton.h0000666000000000000000000000052107644705711017273 0ustar rootroot/* * KToggleButton.h * kodisein */ #ifndef __KToggleButton #define __KToggleButton #include "KButton.h" class KToggleButton : public KButton { INTROSPECTION public: KToggleButton (); virtual void setPicked ( bool ); virtual void render (); }; #endif kiki/kodilib/src/widgets/KWidget.cpp0000666000000000000000000001623507644705711016445 0ustar rootroot/* * KWidget.cpp * kodisein */ #include "KWidget.h" #include "KEventHandler.h" #include "KConsole.h" #include "KWindow.h" #include "KProjection.h" #include "KColor.h" #include #include KDL_CLASS_INTROSPECTION_2 (KWidget, KMatrix, KPickable) // -------------------------------------------------------------------------------------------------------- KWidget::KWidget() : KMatrix(), KPickable() { parent = NULL; window = NULL; fg_color = NULL; bg_color = NULL; flags.resize (KDL_WIDGET_FLAG_END); flags[KDL_WIDGET_FLAG_FRAMED] = false; flags[KDL_WIDGET_FLAG_VISIBLE] = true; flags[KDL_WIDGET_FLAG_FILL_X] = false; flags[KDL_WIDGET_FLAG_FILL_Y] = false; } // -------------------------------------------------------------------------------------------------------- KWidget::~KWidget() { if (fg_color) { delete fg_color; fg_color = NULL; } if (bg_color) { delete bg_color; bg_color = NULL; } PickableVector::iterator iter = children.begin(); parent = NULL; while (iter != children.end()) { delete (*iter); iter++; } children.clear(); } // -------------------------------------------------------------------------------------------------------- void KWidget::getWidgetsInHierarchy ( std::vector* widgets ) { PickableVector::iterator iter = children.begin(); while (iter != children.end()) { widgets->push_back((KWidget*)*iter); ((KWidget*)*iter)->getWidgetsInHierarchy(widgets); iter++; } } // -------------------------------------------------------------------------------------------------------- std::vector KWidget::getChildrenBehindWidget ( KWidget * w ) { std::vector hierarchy; getWidgetsInHierarchy(&hierarchy); std::vector::iterator result = std::find(hierarchy.begin(), hierarchy.end(), w); if (result != hierarchy.end()) { hierarchy.erase(hierarchy.begin(), result+1); } return hierarchy; } // -------------------------------------------------------------------------------------------------------- std::vector KWidget::getChildrenBeforeWidget ( KWidget * w ) { std::vector hierarchy; getWidgetsInHierarchy(&hierarchy); std::vector::iterator result = std::find(hierarchy.begin(), hierarchy.end(), w); if (result != hierarchy.end()) { hierarchy.erase(result, hierarchy.end()); } return hierarchy; } // -------------------------------------------------------------------------------------------------------- /* returns the position of the locator relative to the lower left corner of the widget */ KPosition KWidget::getLocatorWidgetPos () const { return KEventHandler::getMousePos() - getScreenPos(); } // -------------------------------------------------------------------------------------------------------- /* returns the position of the lower left corner of the widget in "screen coordinates" screen coordinates: bottom y = 0, top y = screen.h */ KPosition KWidget::getScreenPos () const { KPosition viewportScreenPos = getWindow()->getProjection()->getViewportScreenPos(); KSize viewportSize = getWindow()->getProjection()->getViewportSize(); KPosition widgetViewportPos = getViewportPos(); return KPosition(viewportScreenPos.x + widgetViewportPos.x, viewportScreenPos.y + viewportSize.h + widgetViewportPos.y - size.h); } // -------------------------------------------------------------------------------------------------------- /* returns the position of the top left corner of the widget in "window viewport coordinates" window viewport coordinates: top y = 0, bottom y = -viewport.h */ KPosition KWidget::getViewportPos () const { KPosition vpPos((int)matrix[TX], (int)matrix[TY]); if (parent) { return vpPos + parent->getViewportPos(); } return vpPos; } // -------------------------------------------------------------------------------------------------------- void KWidget::setFGColor (const KColor & c) { if (fg_color != NULL) { *fg_color = c; } else { fg_color = new KColor(c); } } // -------------------------------------------------------------------------------------------------------- void KWidget::setBGColor (const KColor & c) { if (bg_color != NULL) { *bg_color = c; } else { bg_color = new KColor(c); } } // -------------------------------------------------------------------------------------------------------- void KWidget::hide () { flags[KDL_WIDGET_FLAG_VISIBLE] = false; } // -------------------------------------------------------------------------------------------------------- void KWidget::show () { flags[KDL_WIDGET_FLAG_VISIBLE] = true; } // -------------------------------------------------------------------------------------------------------- KWindow * KWidget::getWindow () const { if (window == NULL) return getParent()->getWindow(); return window; } // -------------------------------------------------------------------------------------------------------- KWidget * KWidget::getRootWidget () const { if (parent == NULL) return (KWidget*)this; return parent->getRootWidget(); } // -------------------------------------------------------------------------------------------------------- void KWidget::addChild ( KWidget * child ) { children.push_back(child); child->setParent(this); } // -------------------------------------------------------------------------------------------------------- void KWidget::display () { if (flags[KDL_WIDGET_FLAG_VISIBLE] == false) return; glPushAttrib (GL_CURRENT_BIT); glPushMatrix(); glMultMatrixf (matrix); if (getFGColor()) getFGColor()->glColor(); render (); for (PickableVector::iterator iter = children.begin(); iter != children.end(); iter++) { ((KWidget*)*iter)->display(); } glPopMatrix(); glPopAttrib(); } // -------------------------------------------------------------------------------------------------------- void KWidget::render () { loadId(); if (flags[KDL_WIDGET_FLAG_FRAMED]) { KSize ws = getSize(); if (getBGColor()) { glPushAttrib (GL_CURRENT_BIT | GL_POLYGON_BIT); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); getBGColor()->glColor(); glRecti (0, -ws.h, ws.w, 0); glPopAttrib(); } glRecti(0, -ws.h, ws.w, 0); } } // -------------------------------------------------------------------------------------------------------- KSize KWidget::relayout ( const KSize & newSize ) { if (flags[KDL_WIDGET_FLAG_FILL_X] && newSize.w != size.w) { size.w = kMax(newSize.w, min_size.w); } if (flags[KDL_WIDGET_FLAG_FILL_Y] && newSize.h != size.h) { size.h = kMax(newSize.h, min_size.h); } return size; } kiki/kodilib/src/widgets/KWidget.h0000666000000000000000000000507207644705711016107 0ustar rootroot/* * KWidget.h * kodisein */ #ifndef __KWidget #define __KWidget #include "KMatrix.h" #include "KPickable.h" #define KDL_WIDGET_DEFAULT_FRAME_SPACING 5 #define KDL_WIDGET_DEFAULT_CHILD_SPACING 5 enum { KDL_WIDGET_FLAG_VISIBLE, KDL_WIDGET_FLAG_FRAMED, KDL_WIDGET_FLAG_FIXED_SIZE, KDL_WIDGET_FLAG_FILL_X, KDL_WIDGET_FLAG_FILL_Y, KDL_WIDGET_FLAG_END }; class KWindow; class KColor; class KMouseEvent; class KWidget : public KMatrix, public KPickable { INTROSPECTION protected: KColor * bg_color; KColor * fg_color; KWidget * parent; KWindow * window; PickableVector children; KSize size; KSize min_size; public: std::vector flags; KWidget (); ~KWidget (); virtual void display (); virtual void render (); virtual void setParent ( KWidget * w ) { parent = w; } virtual void addChild ( KWidget * ); virtual void getWidgetsInHierarchy ( std::vector * ); virtual KWidget * getParent () const { return parent; } virtual KSize getSize () const { return size; } virtual void setSize ( KSize s ) { size = s; } virtual KSize getMinSize () const { return min_size; } virtual void setMinSize ( KSize s ) { min_size = s; } std::vector getChildrenBehindWidget ( KWidget * ); std::vector getChildrenBeforeWidget ( KWidget * ); void setWindow ( KWindow * w ) { window = w; } KWindow * getWindow () const; KWidget * getRootWidget () const; KPosition getViewportPos () const; KPosition getScreenPos () const; KPosition getLocatorWidgetPos () const; virtual void setFGColor ( const KColor & ); virtual void setBGColor ( const KColor & ); virtual KColor * getFGColor () const { return fg_color; } virtual KColor * getBGColor () const { return bg_color; } virtual const PickableVector * getChildren () const { return &children; } virtual void mouseMoved ( const KMouseEvent & ) {} virtual void doubleClicked () {} virtual void hide (); virtual void show (); virtual KSize layout () { return getSize(); } virtual KSize relayout ( const KSize & newSize ); }; #endif kiki/kodilib/src/widgets/KWidgetArray.cpp0000666000000000000000000001645107644705711017444 0ustar rootroot /* * KWidgetArray.cpp * kodisein */ #include "KWidgetArray.h" #include "KLabel.h" #include "KConsole.h" KDL_CLASS_INTROSPECTION_1 (KWidgetArray, KWidget) // -------------------------------------------------------------------------------------------------------- KWidgetArray::KWidgetArray () : KWidget () { flags.resize(KDL_WIDGETARRAY_FLAG_END); flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL] = true; spacing = KDL_WIDGET_DEFAULT_CHILD_SPACING; frame_spacing = KDL_WIDGET_DEFAULT_FRAME_SPACING; } // -------------------------------------------------------------------------------------------------------- KSize KWidgetArray::layout () { min_size = KSize(frame_spacing, frame_spacing); std::vector fillWidgets; PickableVector::iterator iter = children.begin(); while (iter != children.end()) { KWidget * child = (KWidget*)*iter; if (child->flags[KDL_WIDGET_FLAG_VISIBLE]) { child->reset(); KSize childSize = child->layout(); // check if array will fill available space if (child->flags[KDL_WIDGET_FLAG_FILL_X]) flags[KDL_WIDGET_FLAG_FILL_X] = true; if (child->flags[KDL_WIDGET_FLAG_FILL_Y]) flags[KDL_WIDGET_FLAG_FILL_Y] = true; // translate widgets according to layout style if (flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) { if (child->flags[KDL_WIDGET_FLAG_FILL_Y]) fillWidgets.push_back(child); child->translate(min_size.w, -frame_spacing); min_size.w += childSize.w + spacing; min_size.h = kMax(min_size.h, childSize.h + frame_spacing); } else { if (child->flags[KDL_WIDGET_FLAG_FILL_X]) fillWidgets.push_back(child); child->translate(frame_spacing, -min_size.h); min_size.h += childSize.h + spacing; min_size.w = kMax(min_size.w, childSize.w + frame_spacing); } } iter++; } if (flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) { min_size.w += (frame_spacing - spacing); min_size.h += frame_spacing; while (fillWidgets.empty() == false) { fillWidgets.back()->relayout(KSize(fillWidgets.back()->getSize().w, min_size.h-2*frame_spacing)); fillWidgets.pop_back(); } } else { min_size.w += frame_spacing; min_size.h += (frame_spacing - spacing); while (fillWidgets.empty() == false) { fillWidgets.back()->relayout(KSize(min_size.w-2*frame_spacing, fillWidgets.back()->getSize().h)); fillWidgets.pop_back(); } } size = min_size; return min_size; } // -------------------------------------------------------------------------------------------------------- KSize KWidgetArray::relayout ( const KSize & newSize ) { KSize sizeDiff = newSize - size; if (flags[KDL_WIDGET_FLAG_FILL_X] == false && flags[KDL_WIDGET_FLAG_FILL_Y] == false || sizeDiff.w == 0 && sizeDiff.h == 0) { // nothing to resize or minimum size reached -> return size = KSize(kMax(min_size.w, size.w), kMax(min_size.h, size.h)); return size; } int xFillWidgets = 0, yFillWidgets = 0; PickableVector::iterator iter = children.begin(); while (iter != children.end()) { KWidget * child = (KWidget*)*iter; if (child->flags[KDL_WIDGET_FLAG_VISIBLE]) { if (child->flags[KDL_WIDGET_FLAG_FILL_X]) xFillWidgets++; if (child->flags[KDL_WIDGET_FLAG_FILL_Y]) yFillWidgets++; } iter++; } KSize maxSize = newSize; if (flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) { maxSize.h -= (2 * frame_spacing); if (xFillWidgets > 1) { sizeDiff.w /= xFillWidgets; } } else // vertical layout { maxSize.w -= (2 * frame_spacing); if (yFillWidgets > 1) { sizeDiff.h /= yFillWidgets; } } size.w = frame_spacing; size.h = frame_spacing; iter = children.begin(); while (iter != children.end()) { KWidget * child = (KWidget*)*iter; if (child->flags[KDL_WIDGET_FLAG_VISIBLE]) { child->reset(); KSize childSize = child->getSize(); // translate widgets according to layout style if (flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) { maxSize.w = childSize.w + sizeDiff.w; childSize = child->relayout(maxSize); child->translate(size.w, -frame_spacing); size.w += childSize.w + spacing; size.h = kMax(size.h, childSize.h + frame_spacing); } else { maxSize.h = childSize.h + sizeDiff.h; childSize = child->relayout(maxSize); child->translate(frame_spacing, -size.h); size.h += childSize.h + spacing; size.w = kMax(size.w, childSize.w + frame_spacing); } } iter++; } if (flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL]) { size.w += (frame_spacing - spacing); size.h += frame_spacing; } else { size.w += frame_spacing; size.h += (frame_spacing - spacing); } return size; } // -------------------------------------------------------------------------------------------------------- void KWidgetArray::clear () { while (children.empty() == false) { delete children.back(); children.pop_back(); } size.w = size.h = 0; getRootWidget()->layout(); } // -------------------------------------------------------------------------------------------------------- void KWidgetArray::alignLabels () { // find and store all labels which are the first child of a a widget array child // also keep track of the maximum width of these labels int maxLabelWidth = 0; std::vector labelWidgets; PickableVector::const_iterator iter = children.begin(); while (iter != children.end()) { if ((*iter)->getClassId() >= KWidgetArray::classId()) { KPickable * firstChild = ((KWidgetArray*)*iter)->getChildren()->front(); if (firstChild->getClassId() == KLabel::classId()) { int size = ((KLabel*)firstChild)->getText().size(); if (size >= maxLabelWidth) { maxLabelWidth = size; } labelWidgets.push_back((KLabel*)firstChild); } } iter++; } // iterate through the labels and resize them (actually adding spaces to their text) std::vector::iterator labelIter = labelWidgets.begin(); while (labelIter != labelWidgets.end()) { std::string labelText = (*labelIter)->getText(); (*labelIter)->setText(labelText + std::string(maxLabelWidth - labelText.size(), ' ')); labelIter++; } } kiki/kodilib/src/widgets/KWidgetArray.h0000666000000000000000000000144507644705711017106 0ustar rootroot/* * KWidgetArray.h * kodisein */ #ifndef __KWidgetArray #define __KWidgetArray #include "KWidget.h" enum { KDL_WIDGETARRAY_FLAG_HORIZONTAL = KDL_WIDGET_FLAG_END, KDL_WIDGETARRAY_FLAG_END }; class KWidgetArray : public KWidget { INTROSPECTION protected: int spacing; int frame_spacing; public: KWidgetArray (); void clear (); virtual KSize layout (); virtual KSize relayout ( const KSize & s ); void setFrameSpacing ( int s ) { frame_spacing = s; } void setChildSpacing ( int s ) { spacing = s; } int getSpacing () const { return spacing; } int getFrameSpacing () const { return frame_spacing; } void alignLabels (); }; #endif kiki/kodilib/src/windows/0000777000000000000000000000000010336064534014411 5ustar rootrootkiki/kodilib/src/windows/KConsole.cpp0000666000000000000000000001426110335202177016632 0ustar rootroot/* * KConsole.cpp * kodisein */ #include "KConsole.h" #include "KIconButton.h" #include "KTextWidget.h" #include "KScrollBar.h" #include "KMessagePanel.h" #include "KProjection.h" #include "KColor.h" #include #define K_INCLUDE_GLU #include "KIncludeTools.h" KDL_CLASS_INTROSPECTION_1 (KConsole, KWindow) KConsole * KConsole::console = NULL; // -------------------------------------------------------------------------------------------------------- KConsole::KConsole () : KWindow () { depth = -INT_MAX+1; text_widget = new KTextWidget(); text_widget->setTextSize(KSize(20,1)); text_widget->setMinSize(text_widget->getSize()); text_widget->flags[KDL_WIDGET_FLAG_FILL_X] = true; text_widget->flags[KDL_WIDGET_FLAG_FILL_Y] = true; text_widget->flags[KDL_TEXTWIDGET_FLAG_AUTO_SCROLLDOWN] = true; // ................................................................. scrolled text array KWidgetArray * scrolledText = new KWidgetArray(); scrolledText->setFrameSpacing (0); scrolledText->setChildSpacing (2); // ................................................................. scrollbar scroll_bar = new KScrollBar(this); scroll_bar->addReceiverCallback(text_widget, (KSetFloatPtr)&KTextWidget::scrollRelative); scroll_bar->addReceiverCallback(text_widget, (KCallbackPtr)&KTextWidget::scrollLineDown, KDL_NOTIFICATION_TYPE_SCROLL_LINE_DOWN); scroll_bar->addReceiverCallback(text_widget, (KCallbackPtr)&KTextWidget::scrollLineUp, KDL_NOTIFICATION_TYPE_SCROLL_LINE_UP); scroll_bar->addReceiverCallback(text_widget, (KCallbackPtr)&KTextWidget::scrollPageDown, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_DOWN); scroll_bar->addReceiverCallback(text_widget, (KCallbackPtr)&KTextWidget::scrollPageUp, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_UP); // insert into widget array scrolledText->addChild(text_widget); scrolledText->addChild(scroll_bar); // ................................................................. buttons KButton * button; button = new KIconButton(KDL_ICONBUTTON_CLEAR); button->addReceiverCallback(this, (KCallbackPtr)&KConsole::clear); button_widget->addChild(button); addPickable(button); button = new KIconButton(KDL_ICONBUTTON_TOP); button->addReceiverCallback(text_widget, (KCallbackPtr)&KTextWidget::scrollToTop); button_widget->addChild(button); addPickable(button); button = new KIconButton(KDL_ICONBUTTON_BOTTOM); button->addReceiverCallback(text_widget, (KCallbackPtr)&KTextWidget::scrollToBottom); button_widget->addChild(button); addPickable(button); widget->addChild(scrolledText); widget->layout(); widget->hide(); } // -------------------------------------------------------------------------------------------------------- void KConsole::create () { if (console == NULL) { console = new KConsole(); } } // -------------------------------------------------------------------------------------------------------- void KConsole::clear() { text_widget->clear(); scroll_bar->setUnits(0, text_widget->getTextRows(), 0); } // -------------------------------------------------------------------------------------------------------- void KConsole::checkGLError ( const std::string & msg ) { int error = glGetError(); if (error != GL_NO_ERROR) { KConsole::printf("[GL_ERROR] %s %s", gluErrorString(error), msg.c_str()); } } // -------------------------------------------------------------------------------------------------------- void KConsole::printString ( const std::string & str ) { if (console) { console->text_widget->print(str); console->scroll_bar->setUnits( console->text_widget->getCurrentRow(), console->text_widget->getTextRows(), kStringRows(console->text_widget->getFullText())); } } // -------------------------------------------------------------------------------------------------------- void KConsole::printError ( const std::string & str, bool panel ) { std::string errorStr = "[ERROR] "; errorStr += str; errorStr += "\n"; ::printf("%s", errorStr.c_str()); if (panel) KMessagePanel::displayMessage("[ERROR]", str); if (console) { printString(errorStr); if (panel == false && console->isVisible() == false) { // show console if no panel displayed // console->show(); } } } // -------------------------------------------------------------------------------------------------------- void KConsole::debugf ( bool output, const char * fmt ...) { if (!output) return; va_list argList; va_start(argList,fmt); std::string newText = kStringPrintf(std::string(fmt), &argList); newText += "\n"; va_end(argList); ::printf("%s", newText.c_str()); printString(newText); } // -------------------------------------------------------------------------------------------------------- void KConsole::write ( const std::string & str ) { ::printf("%s", str.c_str()); printString(str); } // -------------------------------------------------------------------------------------------------------- void KConsole::printf ( const char * fmt ...) { va_list argList; va_start(argList,fmt); std::string newText = kStringPrintf(std::string(fmt), &argList); newText += "\n"; va_end(argList); ::printf("%s", newText.c_str()); printString (newText); } // -------------------------------------------------------------------------------------------------------- void KConsole::relayout ( const KSize & newSize ) { KWindow::relayout(newSize); text_widget->setLabelText(); scroll_bar->setUnits( text_widget->getCurrentRow(), text_widget->getTextRows(), kStringRows(text_widget->getFullText())); } kiki/kodilib/src/windows/KConsole.h0000666000000000000000000000215407644705712016311 0ustar rootroot/* * KConsole.cpp * kodisein */ #ifndef __KConsole #define __KConsole #include "KWindow.h" #include "KStringTools.h" class KTextWidget; class KScrollBar; class KConsole : public KWindow { INTROSPECTION protected: KConsole (); static KConsole * console; KScrollBar * scroll_bar; KTextWidget * text_widget; KIconButton * maximize_button; static void printString ( const std::string & ); public: static void create (); static KConsole * getConsole () { return console; } static void printf ( const char * fmt ... ); static void debugf ( bool, const char * fmt ... ); static void print ( const std::string & s ) { printf("%s",s.c_str()); } static void write ( const std::string & s ); static void printError ( const std::string &, bool = false ); static void checkGLError ( const std::string & = ""); virtual void relayout ( const KSize & ); virtual void clear (); }; #endif kiki/kodilib/src/windows/KFileTreeWindow.cpp0000666000000000000000000001127407644705712020134 0ustar rootroot/* * KFileTreeWindow.cpp * kodisein */ #include "KFileTreeWindow.h" #include "KEventHandler.h" #include "KProjection.h" #include "KFileNameField.h" #include "KButton.h" #include "KConsole.h" #include "KFileTools.h" KDL_CLASS_INTROSPECTION_2 (KFileTreeWindow, KWindow, KNotificationObject) // -------------------------------------------------------------------------------------------------------- KFileTreeWindow::KFileTreeWindow () : KWindow ( KDL_WINDOW_FEATURES_DEFAULT_FEATURES | KDL_WINDOW_FEATURES_RESIZE_HANDLE ) { tree_widget = new KFileTreeWidget(); tree_widget->setSize (KSize(200,150)); tree_widget->setMinSize (KSize(200,150)); depth = INT_MAX/2; tree_widget->setDepth(depth+1); tree_widget->KWidget::flags[KDL_WIDGET_FLAG_FRAMED] = true; KWidgetArray * widgetArray = new KWidgetArray(); widgetArray->setFrameSpacing(0); dirname_widget = new KLabel(""); dirname_widget->flags[KDL_WIDGET_FLAG_FRAMED] = false; dirname_widget->setTextCols(20); dirname_widget->setMinSize(dirname_widget->getSize()); dirname_widget->flags[KDL_WIDGET_FLAG_FILL_X] = true; button_widget->addChild(dirname_widget); filename_widget = new KFileNameField(""); filename_widget->setTextCols(20); filename_widget->setMinSize(filename_widget->getSize()); filename_widget->KWidget::flags[KDL_FILENAMEFIELD_FLAG_OPEN_FILE_MODE] = true; filename_widget->KWidget::flags[KDL_WIDGET_FLAG_FILL_X] = true; filename_widget->addReceiverCallback((KWidget*)tree_widget, (KSetStringPtr)(void (KWidget::*)(const std::string &))&KFileTreeWidget::setCurrentDir, KDL_NOTIFICATION_TYPE_CURRENT_DIRECTORY_CHANGED); filename_widget->addReceiverCallback(dirname_widget, (KSetStringPtr)&KLabel::setText, KDL_NOTIFICATION_TYPE_CURRENT_DIRECTORY_CHANGED); filename_widget->addReceiverCallback(this, (KCallbackPtr)&KFileTreeWindow::notify); KButton * okButton = new KButton ("ok"); okButton->addReceiverCallback(this, (KCallbackPtr)&KFileTreeWindow::notify); tree_widget->addReceiverCallback(filename_widget, (KSetStringPtr)&KTextField::setText, KDL_NOTIFICATION_TYPE_SELECT_NODE); tree_widget->addReceiverCallback(filename_widget, (KSetStringPtr)&KFileNameField::setCurrentDirPath, KDL_NOTIFICATION_TYPE_OPEN_DIRECTORY); tree_widget->addReceiverCallback(dirname_widget, (KSetStringPtr)&KTextField::setText, KDL_NOTIFICATION_TYPE_OPEN_DIRECTORY); tree_widget->addReceiverCallback(okButton, (KCallbackPtr)&KButton::activate); widget->addChild(tree_widget); widget->addChild(widgetArray); widgetArray->addChild(filename_widget); widgetArray->addChild(okButton); addPickable(filename_widget); addPickable(okButton); widget->layout(); widget->hide(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWindow::displayPickables ( int ) { tree_widget->hide(); widget->display(); tree_widget->show(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWindow::notify () { notifyReceivers(tree_widget->getCurrentDir() + "/" + filename_widget->getText()); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWindow::show () { tree_widget->setCurrentDir("."); KEventHandler::addPickHandler(tree_widget); KEventHandler::setProjectionHandler(tree_widget); dirname_widget->setText(tree_widget->getCurrentDir()); KWindow::show(); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWindow::hide () { KWindow::hide(); removeAllReceivers(); KEventHandler::removePickHandler(tree_widget); KEventHandler::removeProjectionHandler(tree_widget); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWindow::relayout ( const KSize & newSize ) { KWindow::relayout(newSize); dirname_widget->setText(tree_widget->getCurrentDir()); } // -------------------------------------------------------------------------------------------------------- void KFileTreeWindow::setOpenFileMode ( bool openFileMode ) { filename_widget->KWidget::flags[KDL_FILENAMEFIELD_FLAG_OPEN_FILE_MODE] = openFileMode; } kiki/kodilib/src/windows/KFileTreeWindow.h0000666000000000000000000000145207644705712017576 0ustar rootroot/* * KFileTreeWindow.h * kodisein */ #ifndef __KFileTreeWindow #define __KFileTreeWindow #include "KWindow.h" #include "KFileTreeWidget.h" #include "KNotificationObject.h" class KTextField; class KLabel; class KFileTreeWindow : public KWindow, public KNotificationObject { INTROSPECTION protected: KFileTreeWidget * tree_widget; KTextField * filename_widget; KLabel * dirname_widget; public: KFileTreeWindow (); void show (); void hide (); void displayPickables ( int ); void notify (); void relayout ( const KSize & ); KProjection * getFileTreeProjection () { return tree_widget->getProjection(); } void setOpenFileMode ( bool = true ); }; #endif kiki/kodilib/src/windows/KMenuWindow.cpp0000666000000000000000000001434507644705712017343 0ustar rootroot/* * KMenuWindow.cpp * kodisein */ #include "KMenuWindow.h" #include "KEventHandler.h" #include "KOrthographicProjection.h" #include "KKeyHandler.h" #include "KSubMenuItem.h" #include "KXMLTools.h" #include "KConsole.h" #include "KColor.h" KDL_CLASS_INTROSPECTION_1 (KMenuWindow, KWindow) // -------------------------------------------------------------------------------------------------------- KMenuWindow::KMenuWindow () : KWindow ( 0 ) { widget = new KMenu (); projection = new KOrthographicProjection (); projection->setViewportBorder(KDL_WINDOW_DEFAULT_VIEWPORT_BORDER, KDL_WINDOW_DEFAULT_VIEWPORT_BORDER, KDL_WINDOW_DEFAULT_VIEWPORT_BORDER, KDL_WINDOW_DEFAULT_VIEWPORT_BORDER); flags.resize(KDL_WINDOW_FLAG_END); flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = false; flags[KDL_MENUWINDOW_FLAG_STATUS_RELEASING] = false; flags[KDL_MENUWINDOW_FLAG_STATUS_MOVING] = false; widget->flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL] = true; widget->setWindow (this); widget->setBGColor (KColor(0.0, 0.0, 0.0, 0.6)); widget->setFGColor (KColor(0.7, 0.7, 0.7, 1.0)); flags[KDL_PICKHANDLER_FLAG_DOUBLECLICK_ENABLED] = false; } // -------------------------------------------------------------------------------------------------------- void KMenuWindow::addMenuItem ( KMenuItem * mi ) { pickables.push_back(mi); widget->addChild(mi); } // -------------------------------------------------------------------------------------------------------- KMenuItem * itemWithCallbackInVector ( KCallbackPtr cb, const PickableVector * pv ) { PickableVector::const_iterator iter = pv->begin(); while (iter != pv->end()) { if ((*iter)->getClassId() >= KMenuItem::classId()) { if (((KMenuItem*)*iter)->hasCallback(cb)) return ((KMenuItem*)*iter); } if ((*iter)->hasSubPickables()) { KMenuItem * item = itemWithCallbackInVector(cb, (*iter)->getSubPickables()); if (item) return item; } iter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- KMenuItem * KMenuWindow::getItemWithCallback (KCallbackPtr cb) { return itemWithCallbackInVector(cb, widget->getChildren()); } // -------------------------------------------------------------------------------------------------------- bool KMenuWindow::shouldPick ( const KPickable * pickable ) { if (flags[KDL_MENUWINDOW_FLAG_STATUS_MOVING] || flags[KDL_MENUWINDOW_FLAG_STATUS_RELEASING]) { if ((pickable->getClassId() >= KMenuItem::classId()) == false) { return false; // prevent button activation in menu rollover (focus) mode } } return true; } // -------------------------------------------------------------------------------------------------------- void KMenuWindow::picked () { if (picked_pickable->getClassId() >= KMenuItem::classId()) { KMenuItem * item = (KMenuItem*)picked_pickable; if (flags[KDL_MENUWINDOW_FLAG_STATUS_RELEASING]) { item->activate(); } else { ((KMenu *)(item->getParent()))->close(); item->highlight(); flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = true; } } else // close menu if button was picked { flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = false; ((KMenu*)widget)->close(); } } // -------------------------------------------------------------------------------------------------------- // returns the id of the item at current locator location bool KMenuWindow::mouseMotion ( const KMouseEvent & mouseEvent ) { if (flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS]) // handles motion only in focus mode { flags[KDL_MENUWINDOW_FLAG_STATUS_MOVING] = true; KWindow::pick (mouseEvent); flags[KDL_MENUWINDOW_FLAG_STATUS_MOVING] = false; return true; } return false; } // -------------------------------------------------------------------------------------------------------- bool KMenuWindow::pick( const KMouseEvent & mouseEvent ) { bool itemPicked = KWindow::pick(mouseEvent); if (itemPicked == false) { flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = false; ((KMenu*)widget)->close(); } return itemPicked; } // -------------------------------------------------------------------------------------------------------- void KMenuWindow::release( const KMouseEvent & mouseEvent ) { if (flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS]) { flags[KDL_MENUWINDOW_FLAG_STATUS_RELEASING] = true; bool pickedItem = KWindow::pick (mouseEvent); flags[KDL_MENUWINDOW_FLAG_STATUS_RELEASING] = false; if (KMenu::shortcut_recorder.isRecording()) { KEventHandler::release_handler = this; return; } if (pickedItem && picked_pickable && picked_pickable->getClassId() >= KSubMenuItem::classId()) { return; } flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = false; } ((KMenu*)widget)->close(); } // -------------------------------------------------------------------------------------------------------- void KMenuWindow::unpicked () { if (flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] == false) { ((KMenu*)widget)->close(); } } // -------------------------------------------------------------------------------------------------------- void KMenuWindow::setXML ( std::string & xml ) { if (kXMLParseNamedOpenTag(xml, "Menu", NULL, false) != "") { ((KMenu*)widget)->setXML(xml); kXMLParseNamedCloseTag(xml, "Menu"); } } // -------------------------------------------------------------------------------------------------------- std::string KMenuWindow::getXML ( int depth ) const { std::string xml; xml += kXMLOpenTag("Menu", "", depth); xml += ((KMenu*)widget)->getXML(depth+KDL_XML_INDENT); xml += kXMLCloseTag("Menu", depth); return xml; } kiki/kodilib/src/windows/KMenuWindow.h0000666000000000000000000000233107644705712017000 0ustar rootroot/* * KMenuWindow.h * kodisein */ #ifndef __KMenuWindow #define __KMenuWindow #include "KWindow.h" #include "KMenu.h" #include "KNotificationObject.h" enum { KDL_MENUWINDOW_FLAG_STATUS_RELEASING = KDL_WINDOW_FLAG_END, KDL_MENUWINDOW_FLAG_STATUS_MOVING, KDL_MENUWINDOW_FLAG_END }; class KMenuItem; class KMenuWindow : public KWindow { INTROSPECTION public: KMenuWindow (); virtual void addMenuItem ( KMenuItem * ); virtual void release ( const KMouseEvent & ); virtual bool mouseMotion ( const KMouseEvent & ); virtual void layout () { widget->layout(); } KMenuItem * getItemWithCallback ( KCallbackPtr ); GLfloat getMenuHeight () { return widget->getSpacing()+KDL_MENU_DEFAULT_ITEM_HEIGHT; } virtual bool pick ( const KMouseEvent & ); // pickhandler notifications virtual void unpicked (); virtual bool shouldPick ( const KPickable * ); virtual void picked (); virtual std::string getXML ( int = 0 ) const; virtual void setXML ( std::string & ); }; #endif kiki/kodilib/src/windows/KMessagePanel.cpp0000666000000000000000000000360307644705712017606 0ustar rootroot/* * KMessagePanel.cpp * kodisein */ #include "KMessagePanel.h" #include "KProjection.h" #include "KEventHandler.h" #include "KTrash.h" #include "KLabel.h" // -------------------------------------------------------------------------------------------------------- KMessagePanel::KMessagePanel ( const std::string & title, const std::string & message ) : KWindow ( KDL_WINDOW_FEATURES_WIDGET | KDL_WINDOW_FEATURES_BUTTON_WIDGET | KDL_WINDOW_FEATURES_CLOSE_BUTTON | KDL_WINDOW_FEATURES_PROJECTION ) { KLabel * label; label = new KLabel(title); button_widget->addChild(label); KWidgetArray * widgetArray = new KWidgetArray (); widgetArray->flags[KDL_WIDGET_FLAG_FRAMED] = true; widgetArray->setFrameSpacing(10); widget->addChild(widgetArray); label = new KLabel(message); widgetArray->addChild(label); KSize screenSize = KEventHandler::getScreenSize(); KSize widgetSize = widget->layout(); // center on screen setPosition(KPosition((screenSize.w/2 - projection->getViewportScreenPos().x - widgetSize.w/2), -(screenSize.h/2 - projection->getViewportTopBorder() - widgetSize.h/2))); setDepth(INT_MAX); KEventHandler::addPickHandler(this); widget->show(); } // -------------------------------------------------------------------------------------------------------- void KMessagePanel::displayMessage ( const std::string & title, const std::string & message ) { new KMessagePanel(title, message); } // -------------------------------------------------------------------------------------------------------- void KMessagePanel::close () { // there could be notifications pending -> delay destruction hide(); KTrash::addObject((KObject*)this); KEventHandler::removePickHandler(this); } kiki/kodilib/src/windows/KMessagePanel.h0000666000000000000000000000062507644705712017254 0ustar rootroot/* * KMessagePanel.h * kodisein */ #ifndef __KMessagePanel #define __KMessagePanel #include "KWindow.h" class KMessagePanel : public KWindow { public: KMessagePanel ( const std::string & title, const std::string & message ); static void displayMessage ( const std::string & title, const std::string & message ); void close (); }; #endif kiki/kodilib/src/windows/KPopupMenu.cpp0000666000000000000000000000277007644705712017176 0ustar rootroot/* * KPopupMenu.cpp * kodisein */ #include "KPopupMenu.h" #include "KEventHandler.h" #include "KTrash.h" #include "KConsole.h" #include "KLabel.h" KDL_CLASS_INTROSPECTION_1 (KPopupMenu, KMenuWindow) // -------------------------------------------------------------------------------------------------------- KPopupMenu::KPopupMenu () : KMenuWindow () { widget->flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL] = false; setDepth(INT_MAX); } // -------------------------------------------------------------------------------------------------------- void KPopupMenu::show () { KEventHandler::addPickHandler(this); old_release_handler = KEventHandler::release_handler; KEventHandler::release_handler = this; flags[KDL_PICKHANDLER_FLAG_MOTION_FOCUS] = true; picked_pickable = pickables[0]; pickables[0]->setPicked(true); widget->show(); } // -------------------------------------------------------------------------------------------------------- void KPopupMenu::release ( const KMouseEvent & mouseEvent ) { KEventHandler::release_handler = old_release_handler; KEventHandler::removePickHandler(this); KMenuWindow::release( mouseEvent ); ((KMenu*)widget)->hide(); } // -------------------------------------------------------------------------------------------------------- void KPopupMenu::close () { // there could be notifications pending -> delay destruction hide(); KTrash::addObject((KObject*)this); } kiki/kodilib/src/windows/KPopupMenu.h0000666000000000000000000000072007644705712016634 0ustar rootroot/* * KPopupMenu.h * kodisein */ #ifndef __KPopupMenu #define __KPopupMenu #include "KMenuWindow.h" class KPopupMenu : public KMenuWindow { INTROSPECTION KPickHandler * old_release_handler; public: KPopupMenu (); virtual void show (); virtual void close (); virtual void release ( const KMouseEvent & ); }; #endif kiki/kodilib/src/windows/KWindow.cpp0000666000000000000000000002122007644705712016504 0ustar rootroot/* * KWindow.cpp * kodisein */ #include "KWindow.h" #include "KEventHandler.h" #include "KOrthographicProjection.h" #include "KConsole.h" #include "KColor.h" #include "KIconButton.h" #include "KSliderButton.h" #include "KMenu.h" KDL_CLASS_INTROSPECTION_2 (KWindow, KPickHandler, KPickable) // -------------------------------------------------------------------------------------------------------- KWindow::KWindow ( int features ) : KPickHandler (), KPickable () { flags.resize(KDL_WINDOW_FLAG_END); focus_widget = NULL; flags[KDL_WINDOW_FLAG_RESIZABLE] = (features & KDL_WINDOW_FEATURES_RESIZE_HANDLE); flags[KDL_PICKHANDLER_FLAG_TRANSPARENT_ZERO] = true; if (features & KDL_WINDOW_FEATURES_WIDGET) { widget = new KWidgetArray (); widget->flags[KDL_WIDGET_FLAG_FRAMED] = true; widget->flags[KDL_WIDGETARRAY_FLAG_HORIZONTAL] = false; widget->setFGColor (KColor(0.7, 0.7, 0.7, 1.0)); widget->setBGColor (KColor(0.0, 0.0, 0.0, 0.7)); widget->setWindow (this); addPickable(widget); if (features & KDL_WINDOW_FEATURES_BUTTON_WIDGET_BIT) { button_widget = new KWidgetArray (); button_widget->setFrameSpacing(0); widget->addChild(button_widget); if (features & KDL_WINDOW_FEATURES_CLOSE_BUTTON_BIT) { close_button = new KIconButton(KDL_ICONBUTTON_CROSS); close_button->addReceiverCallback(this, (KCallbackPtr)&KWindow::close ); button_widget->addChild(close_button); addPickable(close_button); } else { close_button = NULL; } if (features & KDL_WINDOW_FEATURES_MAXIMIZE_BUTTON_BIT) { maximize_button = new KIconButton(KDL_ICONBUTTON_ARROW_UP); maximize_button->addReceiverCallback(this, (KCallbackPtr)&KWindow::maximize ); button_widget->addChild(maximize_button); addPickable(maximize_button); } else { maximize_button = NULL; } } else { button_widget = NULL; } } else { widget = NULL; } if (features & KDL_WINDOW_FEATURES_PROJECTION) { projection = new KOrthographicProjection (); projection->setViewportBorder( KDL_WINDOW_DEFAULT_VIEWPORT_BORDER, KDL_WINDOW_DEFAULT_VIEWPORT_BORDER, KDL_WINDOW_DEFAULT_VIEWPORT_BORDER, KDL_WINDOW_DEFAULT_VIEWPORT_BORDER + KDL_MENU_DEFAULT_ITEM_HEIGHT + KDL_WIDGET_DEFAULT_CHILD_SPACING); } else { projection = NULL; } } // -------------------------------------------------------------------------------------------------------- KWindow::~KWindow () { delete widget; } // -------------------------------------------------------------------------------------------------------- bool KWindow::mouseMotion ( const KMouseEvent & mouseEvent ) { if (focus_widget) { focus_widget->mouseMoved(mouseEvent); return true; } return KPickHandler::mouseMotion(mouseEvent); } // -------------------------------------------------------------------------------------------------------- void KWindow::doubleClicked () { if (focus_widget) { focus_widget->doubleClicked(); } else if (picked_pickable->getClassId() >= KWidget::classId()) { ((KWidget*)picked_pickable)->doubleClicked(); } } // -------------------------------------------------------------------------------------------------------- void KWindow::moved ( const KMouseEvent & mouseEvent ) { if (picked_pickable == widget) { KPosition mouseWidgetPos = mouseEvent.pos - widget->getScreenPos(); KSize widgetSize = widget->getSize(); if (flags[KDL_WINDOW_FLAG_RESIZABLE] && mouseWidgetPos.x-mouseEvent.delta.x > (widgetSize.w - 20) && mouseWidgetPos.y-mouseEvent.delta.y < 20) { // resize corner moved setSize(KSize(widgetSize.w + mouseEvent.delta.x, widgetSize.h - mouseEvent.delta.y)); } else // move window { setPosition(widget->getViewportPos() + mouseEvent.delta); } } else if (picked_pickable->getClassId() >= KSliderButton::classId()) { ((KSliderButton*)picked_pickable)->moved(mouseEvent); } } // -------------------------------------------------------------------------------------------------------- /* maps a position in screen coordinates to a position in "window viewport coordinates" */ KPosition KWindow::mapScreenPos( const KPosition & screenPos ) { KPosition viewportPos = projection->getViewportScreenPos(); KSize viewportSize = projection->getViewportSize(); return KPosition (screenPos.x - viewportPos.x, screenPos.y - (viewportPos.y + viewportSize.h)); } // -------------------------------------------------------------------------------------------------------- void KWindow::maximize () { if (maximize_button->getType() == KDL_ICONBUTTON_ARROW_UP) { old_pos = widget->getViewportPos(); old_size = widget->getSize(); setPosition (KPosition(0, 0)); KSize viewportSize = projection->getViewportSize(); setSize (viewportSize); maximize_button->setType(KDL_ICONBUTTON_ARROW_DOWN); } else { setSize (old_size); setPosition (old_pos); maximize_button->setType(KDL_ICONBUTTON_ARROW_UP); } } // -------------------------------------------------------------------------------------------------------- void KWindow::setSize ( KSize newSize ) { KPosition widgetPos = widget->getViewportPos(); KSize viewportSize = projection->getViewportSize(); KSize maxSize(kMin(newSize.w, viewportSize.w - widgetPos.x - 1), kMin(newSize.h, viewportSize.h - widgetPos.y - 1)); relayout (maxSize); } // -------------------------------------------------------------------------------------------------------- void KWindow::setPosition ( const KPosition & newPos ) { KSize viewportSize = projection->getViewportSize(); KSize widgetSize = widget->getSize(); KPosition maxPos (kMax(0, kMin(newPos.x, viewportSize.w - widgetSize.w - 1)), kMin(0, kMax(newPos.y, -(viewportSize.h - widgetSize.h - 1)))); widget->setPosition(maxPos); } // -------------------------------------------------------------------------------------------------------- void KWindow::display ( int mode ) { if (widget->flags[KDL_WIDGET_FLAG_VISIBLE]) { glPushAttrib (GL_CURRENT_BIT | GL_POLYGON_BIT | GL_TRANSFORM_BIT | GL_VIEWPORT_BIT | GL_ENABLE_BIT); glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); glDisable (GL_LIGHTING); glDisable (GL_DEPTH_TEST); projection->initProjection(); widget->display(); if (flags[KDL_WINDOW_FLAG_RESIZABLE]) // draw the resize corner { if (widget->getFGColor()) widget->getFGColor()->glColor(); KPosition widgetPos = widget->getViewportPos(); KSize widgetSize = widget->getSize(); int fs = ((KWidgetArray*)widget)->getFrameSpacing(); glBegin(GL_LINE_STRIP); glVertex2i( widgetPos.x + widgetSize.w - 20, widgetPos.y - widgetSize.h); glVertex2i( widgetPos.x + widgetSize.w - (20-fs), widgetPos.y - widgetSize.h + fs); glVertex2i( widgetPos.x + widgetSize.w - fs, widgetPos.y - widgetSize.h + fs); glVertex2i( widgetPos.x + widgetSize.w - fs, widgetPos.y - widgetSize.h + (20-fs)); glVertex2i( widgetPos.x + widgetSize.w, widgetPos.y - widgetSize.h + 20); glEnd(); } glEnable (GL_LIGHTING); glPopAttrib(); } } // -------------------------------------------------------------------------------------------------------- void KWindow::displayPickables ( int ) { widget->display(); } // -------------------------------------------------------------------------------------------------------- bool KWindow::pick ( const KMouseEvent & event ) { if (isVisible() == false) return false; return KPickHandler::pick(event); } kiki/kodilib/src/windows/KWindow.h0000666000000000000000000000475207644705712016164 0ustar rootroot/* * KWindow.h * kodisein */ #ifndef __KWindow #define __KWindow #include "KPickHandler.h" #include "KWidgetArray.h" #define KDL_WINDOW_DEFAULT_VIEWPORT_BORDER 10 #define KDL_WINDOW_FEATURES_WIDGET 1 #define KDL_WINDOW_FEATURES_BUTTON_WIDGET_BIT 2 #define KDL_WINDOW_FEATURES_BUTTON_WIDGET 3 #define KDL_WINDOW_FEATURES_CLOSE_BUTTON_BIT 4 #define KDL_WINDOW_FEATURES_CLOSE_BUTTON 7 #define KDL_WINDOW_FEATURES_MAXIMIZE_BUTTON_BIT 8 #define KDL_WINDOW_FEATURES_MAXIMIZE_BUTTON 11 #define KDL_WINDOW_FEATURES_PROJECTION 16 #define KDL_WINDOW_FEATURES_RESIZE_HANDLE 32 #define KDL_WINDOW_FEATURES_DEFAULT_FEATURES 63 // all features enum { KDL_WINDOW_FLAG_RESIZABLE = KDL_PICKHANDLER_FLAG_END, KDL_WINDOW_FLAG_END }; class KIconButton; class KWindow : public KPickHandler, public KPickable { INTROSPECTION protected: KWidget * focus_widget; KWidgetArray * widget; KWidgetArray * button_widget; KIconButton * close_button; KIconButton * maximize_button; KPosition old_pos; KSize old_size; public: KWindow ( int features = KDL_WINDOW_FEATURES_DEFAULT_FEATURES ); virtual ~KWindow (); void toggleVisibility () { widget->flags[KDL_WIDGET_FLAG_VISIBLE] ? widget->hide() : widget->show(); } bool getVisibility () const { return widget->flags[KDL_WIDGET_FLAG_VISIBLE]; } bool isVisible () const { return widget->flags[KDL_WIDGET_FLAG_VISIBLE]; } KPosition mapScreenPos ( const KPosition & ); virtual bool pick ( const KMouseEvent & ); virtual bool mouseMotion ( const KMouseEvent & ); virtual void display ( int ); virtual void displayPickables ( int ); virtual void moved ( const KMouseEvent & ); virtual void setSize ( KSize ); virtual void setPosition ( const KPosition & ); virtual void setFocusWidget ( KWidget * w ) { focus_widget = w; } virtual void doubleClicked (); virtual void maximize (); virtual void setVisibility ( bool v ) { if (v) show(); else hide(); } virtual void show () { widget->show(); } virtual void hide () { widget->hide(); } virtual void close () { hide(); } virtual void layout () { widget->layout(); } virtual void relayout ( const KSize & s ) { widget->relayout(s); } }; #endif kiki/kodilib/win32-vc/0000777000000000000000000000000010336075361013500 5ustar rootrootkiki/kodilib/win32-vc/kodilib.ncb0000666000000000000000000000003210320462531015564 0ustar rootrootMicrosoft C/C++ MSF 7.00 kiki/kodilib/win32-vc/kodilib.sln0000666000000000000000000000160710313730345015632 0ustar rootrootMicrosoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kodilib", "kodilib.vcproj", "{E4BD4AF1-A023-4000-8034-18B23D6005B5}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Debug.ActiveCfg = Debug|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Debug.Build.0 = Debug|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Release.ActiveCfg = Release|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal kiki/kodilib/win32-vc/kodilib.suo0000666000000000000000000000000610320462531015631 0ustar rootrootࡱkiki/kodilib/win32-vc/kodilib.vcproj0000666000000000000000000003275510320050477016350 0ustar rootroot kiki/linux/0000777000000000000000000000000010336064546011655 5ustar rootrootkiki/linux/Makefile0000666000000000000000000000706010033516063013306 0ustar rootroot# # kiki makefile for linux # # # you might have to change these to match your system # X11_INCLUDES = -I /usr/X11/include/ PYTHON_VERSION=2.3 PYTHON_INCLUDES = -I /usr/include/python$(PYTHON_VERSION) SDLCFLAGS = $(shell sdl-config --cflags) SDLLIBS = $(shell sdl-config --libs) -lSDL_image -lSDL_mixer GLLIBS = -lglut -lGLU -lGL PYTHONHOME = /usr/lib/python$(PYTHON_VERSION)/ PYTHONLIBS = $(PYTHONHOME)/config/libpython$(PYTHON_VERSION).a -lutil \ $(PYTHONHOME)/lib-dynload/math.so \ $(PYTHONHOME)/lib-dynload/time.so \ $(PYTHONHOME)/lib-dynload/_random.so # change this, if the kodilib directory isn't parallel to the kiki directory KODILIBDIR = ../kodilib # # the following should be ok on most machines # # please let me know, if you had a hard time compiling kiki (monsterkodi@gmx.net) # KODILIB = $(KODILIBDIR)/linux/libkodi.a KODILIBINC = -I $(KODILIBDIR)/src/handler \ -I $(KODILIBDIR)/src/tools \ -I $(KODILIBDIR)/src/types \ -I $(KODILIBDIR)/src/widgets \ -I $(KODILIBDIR)/src/windows KIKISRC = ../src KIKI_INCLUDES = -I ../SWIG $(KODILIBINC) \ -I $(KIKISRC)/base -I $(KIKISRC)/bots -I $(KIKISRC)/gui -I $(KIKISRC)/items \ -I $(KIKISRC)/main -I $(KIKISRC)/sound -I $(KIKISRC)/world \ INCLUDES = $(KIKI_INCLUDES) $(X11_INCLUDES) $(PYTHON_INCLUDES) CXXFLAGS = $(INCLUDES) $(SDLCFLAGS) src = \ $(KIKISRC)/base/KikiAction.cpp \ $(KIKISRC)/base/KikiActionObject.cpp \ $(KIKISRC)/base/KikiEvent.cpp \ $(KIKISRC)/base/KikiFace.cpp \ $(KIKISRC)/base/KikiObject.cpp \ $(KIKISRC)/base/KikiPyAction.cpp \ $(KIKISRC)/base/KikiTools.cpp \ $(KIKISRC)/bots/KikiBot.cpp \ $(KIKISRC)/bots/KikiBotFume.cpp \ $(KIKISRC)/bots/KikiMutant.cpp \ $(KIKISRC)/bots/KikiPlayback.cpp \ $(KIKISRC)/bots/KikiPlayer.cpp \ $(KIKISRC)/bots/KikiRecorder.cpp \ $(KIKISRC)/bots/KikiStatusDisplay.cpp \ $(KIKISRC)/gui/KikiCharacter.cpp \ $(KIKISRC)/gui/KikiColumnMenu.cpp \ $(KIKISRC)/gui/KikiGUI.cpp \ $(KIKISRC)/gui/KikiMenu.cpp \ $(KIKISRC)/gui/KikiPageText.cpp \ $(KIKISRC)/gui/KikiScreenText.cpp \ $(KIKISRC)/gui/KikiScrollMenu.cpp \ $(KIKISRC)/gui/KikiText.cpp \ $(KIKISRC)/gui/KikiTextLine.cpp \ $(KIKISRC)/items/KikiAtom.cpp \ $(KIKISRC)/items/KikiBillBoard.cpp \ $(KIKISRC)/items/KikiBomb.cpp \ $(KIKISRC)/items/KikiBullet.cpp \ $(KIKISRC)/items/KikiCellText.cpp \ $(KIKISRC)/items/KikiGate.cpp \ $(KIKISRC)/items/KikiGear.cpp \ $(KIKISRC)/items/KikiGenerator.cpp \ $(KIKISRC)/items/KikiLight.cpp \ $(KIKISRC)/items/KikiMotorCylinder.cpp \ $(KIKISRC)/items/KikiMotorGear.cpp \ $(KIKISRC)/items/KikiNeutron.cpp \ $(KIKISRC)/items/KikiPushable.cpp \ $(KIKISRC)/items/KikiSpikes.cpp \ $(KIKISRC)/items/KikiStone.cpp \ $(KIKISRC)/items/KikiSwitch.cpp \ $(KIKISRC)/items/KikiTest.cpp \ $(KIKISRC)/items/KikiValve.cpp \ $(KIKISRC)/items/KikiWall.cpp \ $(KIKISRC)/items/KikiWire.cpp \ $(KIKISRC)/items/KikiWireStone.cpp \ $(KIKISRC)/main/KikiController.cpp \ $(KIKISRC)/main/main.cpp \ $(KIKISRC)/sound/KikiSound.cpp \ $(KIKISRC)/world/KikiCell.cpp \ $(KIKISRC)/world/KikiWorld.cpp \ $(KIKISRC)/main/KikiPythonWidget.cpp \ $(KIKISRC)/main/KikiPython.cpp \ $(KIKISRC)/../SWIG/KikiPy_wrap.cpp obj = $(src:.cpp=.o) kiki: $(KIKISRC)/../SWIG/KikiPy_wrap.cpp $(obj) -(cd ../SWIG; swig -c++ -python -globals kiki -o KikiPy_wrap.cpp KikiPy.i; cp kiki.py ../py) $(CXX) $(obj) $(KODILIB) -o kiki $(GLLIBS) $(SDLLIBS) $(PYTHONLIBS) obj-clean: $(RM) -f $(obj) clean: $(RM) -f $(obj) kiki %.o: %.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< kiki/linux/Readme.txt0000666000000000000000000000474307644705746013637 0ustar rootroot Building kiki on Linux Prerequisites kiki depends on some libraries and development tools which have to be installed on your system before you will be able to build it. I will just list these dependencies here, please check the net or your distribution's documentation how to obtain and install these tools and libraries. Development Tools You will need a version 3 gcc compiler to build kiki. The environment variable CXX should point to the location of the c++-compiler, e.g: /usr/bin/g++-3.2 SDL libraries SDL http://www.libsdl.org SDL_image http://www.libsdl.org/projects/SDL_image/ SDL_mixer http://www.libsdl.org/projects/SDL_mixer/ If you install the binary packages, make sure you get the development versions: package-names ending with '-devel' or '-dev'. Python http://www.python.org kiki works with python versions 2.2.x and 2.3a.x but it will probably work with older versions as well. You won't need it if you are just building the unchanged sources, but if interested, you could also obtain swig from SWIG http://www.swig.org Building the kodilib Go to the directory kiki_src/kodilib/linux and enter make. If you are lucky, the library will be build immediately, otherwise you might have to adjust the paths at the top of the Makefile. On success, the library will be created as kiki_src/kodilib/linux/libkodi.a Building kiki Go back to the directory kiki_src/kiki/linux and enter make. Here you might have to adjust the Makefile as well. The executable will be named kiki and written to the linux directory which contains the Makefile. Running kiki kiki depends on the resources found in kiki_src/kiki/py and kiki_src/kiki/sounds. You should set the environment variable KIKI_HOME to the directory which contains the subdirectories py and sounds, e.g. setenv KIKI_HOME kiki_src/kiki Otherwise you have to start kiki from this directory: kiki_src/kiki% linux/kiki Installing kiki Sorry, but the Makefile contains no install target. Just move the executable and the resources manually wherever you like and adjust the KIKI_HOME variable accordingly. Feedback Please let me know if you had problems compiling kiki and/or how it performed on your system. Send the feedback to monsterkodi@gmx.net Have fun, yours kodi kiki/macosx/0000777000000000000000000000000010336064546012010 5ustar rootrootkiki/macosx/.cvsignore0000666000000000000000000000002207644705746014016 0ustar rootroot.DS_Store build kiki/macosx/BUILD.rtf0000666000000000000000000000461707644705747013411 0ustar rootroot{\rtf1\mac\ansicpg10000\cocoartf102 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fmodern\fcharset77 Courier; \f3\fswiss\fcharset77 Helvetica-Oblique;\f4\fswiss\fcharset77 Helvetica-BoldOblique;} {\colortbl;\red255\green255\blue255;} \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\b\fs26 \cf0 Building kiki on Mac OS X from source\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \fs24 \cf0 Prerequisites \f1\b0 :\ \ \f0\b SDL libraries\ \f1\b0 \ You need to install several libraries beforehand. Following is a list of libraries, including URLs where to get these and the version numbers that I tested them with.\ \ - SDL (1.2.5)\ \f2 http://www.libsdl.org/release/SDL-devel-1.2.5.pkg.tar.gz\ \f1 \ - SDL_image (1.2.3)\ \f2 http://www.libsdl.org/projects/SDL_image/release/SDL_image-devel-1.2.3.pkg.tar.gz\ \ \f1 - SDL_mixer (1.2.5)\ \f2 http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-devel-1.2.5.pkg.tar.gz\ \f1 \ NB: The SDL libraries are available as pre-built packages for Mac OS X, so there's no need to build these from source. The packages are designed to install these libraries into \f2 $(USER_LIBRARY_DIR)/Frameworks \f1 and the kiki build process is now aware of that fact.\ \ \f0\b SWIG \f1\b0 \ \ You will only need SWIG, if you made changes to the swig interface files (e.g. the *.i files in the SWIG subdirectory). \ SWIG is not needed if you don't plan to extend the python interface.\ \ There are no binary distributions of SWIG available for Mac OS X, so you need to build from source.\ \ - swig (1.3.19)\ \f2 http://prdownloads.sourceforge.net/swig/swig-1.3.19.tar.gz?download\ \f1 \ Alternatively, you could use Fink(Commander) to accomplish this task automatically. \ \ \f0\b kodilib \f1\b0 \ \ After you've installed all of the above libraries you need to build the \f2 kodilib.framework \f1 . Kodilib will place itself into \f2 /tmp/kodilib \f1 and kiki.app will use this version during linking (and copy it into its app wrapper respectively).\ \ \f0\b Problems or Questions? \f1\b0 \ \ As always: feel free to contact me at \f2 monsterkodi@gmx.net \f1 \ \ \f3\i thanks to \f4\b znek \f3\b0 for providing the initial version of this readme \f1\i0 \ \ }kiki/macosx/Dutch.lproj/0000777000000000000000000000000010336064546014204 5ustar rootrootkiki/macosx/Dutch.lproj/CVS/0000777000000000000000000000000010336064533014633 5ustar rootrootkiki/macosx/Dutch.lproj/CVS/Entries0000666000000000000000000000007410313727041016163 0ustar rootroot/Localizable.strings/1.1.1.1/Wed Apr 9 02:56:40 2003// D kiki/macosx/Dutch.lproj/CVS/Entries.Extra0000666000000000000000000000003610313727041017243 0ustar rootroot/Localizable.strings////*/// kiki/macosx/Dutch.lproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727041017747 0ustar rootrootkiki/macosx/Dutch.lproj/CVS/Entries.Old0000666000000000000000000000000010313727041016665 0ustar rootrootkiki/macosx/Dutch.lproj/CVS/Repository0000666000000000000000000000003110313727041016722 0ustar rootrootkiki/macosx/Dutch.lproj kiki/macosx/Dutch.lproj/CVS/Root0000666000000000000000000000006410313727041015474 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/Dutch.lproj/Localizable.strings0000666000000000000000000001313707644705750020054 0ustar rootroot/* Dutch (Nederlands) versions of kiki texts */ /* translation by Arthur Langereis */ /* game title */ "kiki the nano bot" = "kiki de nano bot"; /* menu */ "new game" = "nieuw spel"; "load level" = "laad spel"; "next level" = "volgend niveau"; "restart" = "begin opnieuw"; "setup" = "configuratie"; "story" = "verhaal"; "demo" = "demo"; "about" = "over kiki"; "help" = "help"; "quit" = "stop"; "back" = "terug"; /* about */ "version" = "versie"; "programmed by" = "geprogrammeerd door"; "sounds from" = "geluidseffecten van"; "thanks to" = "met dank aan"; "visit" = "bezoek"; "for more games" = "voor meer spellen"; "main menu" = "hoofd menu"; /* story */ "STORY_PAGE_1" = "Er leefden eens\nwat kleine robotjes\nin de nano wereld.\n\nze hadden een gelukkig\nkunstmatig leven en\nverzamelden druk materialen\nvoor de maker,\ndie meer en meer\nkleine robotjes maakte."; "STORY_PAGE_2" = "maar op een dag,\nvernietigde een parasiet\nhet controle programma\nvan de maker.\n\nvanaf dat moment werkt\nde maker slecht en\nproduceert hij slechts\nluie domme kleine robotjes\ndie op elkaar schieten\nen de nano wereld stuk maken."; "STORY_PAGE_3" = "het is jouw taak om kiki,\nde laatste gezonde bot,\nte helpen om de maker\nte repareren.\n\nveel geluk!"; /* setup */ "off" = "uit"; "on" = "aan"; "sound" = "geluid"; "volume" = "volume"; "fullscreen" = "fullscreen"; "fov" = "perspectief"; "speed" = "snelheid"; "keyboard setup" = "configureer toetsenbord"; "save" = "opslaan"; /* keyboard setup */ "$no_itemkeyboard setup" = "$no_itemconfigureer toetsenbord"; // don't translate $no_item "$no_item" = "$no_item"; // don't change this "move forward" = "naar voren bewegen"; "move backward" = "naar achter bewegen"; "turn left" = "naar links draaien"; "turn right" = "naar rechts draaien"; "jump" = "springen"; "push" = "duwen"; "shoot" = "schieten"; "change view" = "verander camera modus"; "look up" = "omhoog kijken"; "look down" = "omlaag kijken"; "press the new key" = "druk op de nieuwe toets"; "action without key" = "geen toets ingesteld"; "back to setup" = "terug naar configuratie"; /* help */ "HELP_SPIKES_1" = "$scale(1.5)missie:\nga naar de uitgang!\n\nontwijk de stekels!\nloop alleen over ze heen,\nals ze zijn ingetrokken."; "HELP_GOLD_1" = "$scale(1.5)missie:\nga naar de uitgang!\n\nom bij de uitgang te komen,\duw je de stenen weg.\n\nom een steen te duwen,\ndruk je \"$key(push)\"+\"$key(move forward)\" in."; "HELP_JUMP_1" = "$scale(1.5)missie:\nga naar de uitgang!\n\nom bij de uitgang te komen,\nspring je over de kubussen.\n\nom te springen\ndruk je \"$key(jump)\" in."; "HELP_JUMP_2" = "om naar voren te springen,\druk je \"$key(jump)\"+\"$key(move forward)\" in.\n\nje mag draaien\nterwijl je springt!\n\nom te draaien\ndruk je \"$key(turn left)\"\nof \"$key(turn right)\" in."; kiki/macosx/English.lproj/0000777000000000000000000000000010336064546014526 5ustar rootrootkiki/macosx/English.lproj/CVS/0000777000000000000000000000000010336064544015157 5ustar rootrootkiki/macosx/English.lproj/CVS/Entries0000666000000000000000000000020310313727167016510 0ustar rootroot/InfoPlist.strings/1.1.1.1/Wed Apr 9 02:56:40 2003// /Localizable.strings/1.1.1.1/Wed Apr 9 02:56:40 2003// D/SDLMain.nib//// kiki/macosx/English.lproj/CVS/Entries.Extra0000666000000000000000000000012010313727167017570 0ustar rootroot/InfoPlist.strings////*/// /Localizable.strings////*/// D/SDLMain.nib/////// kiki/macosx/English.lproj/CVS/Entries.Extra.Old0000666000000000000000000000007210313727042020303 0ustar rootroot/InfoPlist.strings////*/// /Localizable.strings////*/// kiki/macosx/English.lproj/CVS/Entries.Old0000666000000000000000000000016310313727042017222 0ustar rootroot/InfoPlist.strings/1.1.1.1/Wed Apr 9 02:56:40 2003// /Localizable.strings/1.1.1.1/Wed Apr 9 02:56:40 2003// D kiki/macosx/English.lproj/CVS/Repository0000666000000000000000000000003310313727041017246 0ustar rootrootkiki/macosx/English.lproj kiki/macosx/English.lproj/CVS/Root0000666000000000000000000000006410313727041016016 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/English.lproj/InfoPlist.strings0000666000000000000000000000065407644705750020064 0ustar rootroot/* Localized versions of Info.plist keys */ CFBundleName = "kiki"; CFBundleShortVersionString = "kiki version 0.8.4"; CFBundleGetInfoString = "kiki version 0.8.4"; NSHumanReadableCopyright = "fuck copyright"; kiki/macosx/English.lproj/Localizable.strings0000666000000000000000000000506007644705750020372 0ustar rootroot/* Localized versions of kiki texts */ /* game title */ "kiki the nano bot" = "kiki the nano bot"; /* menu */ "new game" = "new game"; "load level" = "load level"; "next level" = "next level"; "restart" = "restart"; "setup" = "setup"; "story" = "story"; "demo" = "demo"; "about" = "about"; "help" = "help"; "quit" = "quit"; "back" = "back"; /* about */ "version" = "version"; "programmed by" = "programmed by"; "sounds from" = "sounds from"; "thanks to" = "thanks to"; "visit" = "visit"; "for more games" = "for more games"; "main menu" = "main menu"; /* story */ "STORY_PAGE_1" = "once upon a time,\nthere were some\ntiny little robots\nliving in the nano world.\n\nthey lived a happy artificial life\nbusily collecting resources\nfor the maker\nwho made more and more\ntiny little robots."; "STORY_PAGE_2" = "but one day,\na parasitic capacity\ndestroyed the maker's\nmaster control program.\n\nsince then he is\nmalfunctioning\nand only producing\nlazy stupid little robots\nwhich shoot each other\nand destroy the nano world."; "STORY_PAGE_3" = "your task is to help kiki,\nthe only sane bot left over,\nto repair the maker.\n\ngood luck!"; /* setup */ "off" = "off"; "on" = "on"; "sound" = "sound"; "volume" = "volume"; "fullscreen" = "fullscreen"; "fov" = "fov"; "speed" = "speed"; "keyboard setup" = "keyboard setup"; "save" = "save"; /* keyboard setup */ "$no_itemkeyboard setup" = "$no_itemkeyboard setup"; // don't translate $no_item "$no_item" = "$no_item"; // don't change this "move forward" = "move forward"; "move backward" = "move backward"; "turn left" = "turn left"; "turn right" = "turn right"; "jump" = "jump"; "push" = "push"; "shoot" = "shoot"; "change view" = "change view"; "look up" = "look up"; "look down" = "look down"; "press the new key" = "press the new key"; "action without key" = "action without key"; "back to setup" = "back to setup"; /* help */ "HELP_SPIKES_1" = "$scale(1.5)mission:\nget to the exit!\n\navoid the spikes!\nonly walk over them,\nif they are retracted"; "HELP_GOLD_1" = "$scale(1.5)mission:\nget to the exit!\n\nto get to the exit,\nmove the stones\n\nto move a stone,\npress \"$key(push)\"+\"$key(move forward)\""; "HELP_JUMP_1" = "$scale(1.5)mission:\nget to the exit!\n\nto get to the exit,\njump over the cubes\n\nto jump,\npress \"$key(jump)\""; "HELP_JUMP_2" = "to jump forward,\npress \"$key(jump)\"+\"$key(move forward)\"\n\nyou may turn\nwhile you jump!\n\nto turn,\npress \"$key(turn left)\"\nor \"$key(turn right)\""; kiki/macosx/English.lproj/SDLMain.nib/0000777000000000000000000000000010336064542016520 5ustar rootrootkiki/macosx/English.lproj/SDLMain.nib/classes.nib0000666000000000000000000000031007644705750020654 0ustar rootroot{ IBClasses = ( {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, {CLASS = SDLMain; LANGUAGE = ObjC; SUPERCLASS = NSObject; } ); IBVersion = 1; }kiki/macosx/English.lproj/SDLMain.nib/CVS/0000777000000000000000000000000010336064533017153 5ustar rootrootkiki/macosx/English.lproj/SDLMain.nib/CVS/Entries0000666000000000000000000000022310313727042020500 0ustar rootroot/classes.nib/1.1.1.1/Wed Apr 9 02:56:40 2003// /info.nib/1.1.1.1/Wed Apr 9 02:56:40 2003// /objects.nib/1.1.1.1/Wed Apr 9 02:56:40 2003// D kiki/macosx/English.lproj/SDLMain.nib/CVS/Entries.Extra0000666000000000000000000000007710313727042021571 0ustar rootroot/classes.nib////*/// /info.nib////*/// /objects.nib////*/// kiki/macosx/English.lproj/SDLMain.nib/CVS/Entries.Extra.Old0000666000000000000000000000000010313727042022270 0ustar rootrootkiki/macosx/English.lproj/SDLMain.nib/CVS/Entries.Old0000666000000000000000000000000010313727042021206 0ustar rootrootkiki/macosx/English.lproj/SDLMain.nib/CVS/Repository0000666000000000000000000000004710313727042021252 0ustar rootrootkiki/macosx/English.lproj/SDLMain.nib kiki/macosx/English.lproj/SDLMain.nib/CVS/Root0000666000000000000000000000006410313727042020015 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/English.lproj/SDLMain.nib/info.nib0000666000000000000000000000110007644705750020150 0ustar rootroot IBDocumentLocation 27 53 356 240 0 0 1024 746 IBEditorPositions 29 126 402 55 44 0 0 1024 746 IBFramework Version 263.2 IBOpenObjects 29 21 IBSystem Version 5S60b kiki/macosx/English.lproj/SDLMain.nib/objects.nib0000666000000000000000000001005007644705750020652 0ustar rootroot typedstream@NSIBObjectDataNSObjectNSCustomObject)@@NSString+ NSApplicationi NSMenuItemNSMenu̔i@@@kikiNSMutableArrayNSArray i@@IIi@@@@:i@ About kikiNSCustomResource)NSImageNSMenuCheckmarkNSMenuMixedStateHide h Hide OthersShow AllQuit  _NSAppleMenuServicessubmenuAction:NSMutableStringServices_NSServicesMenuSDLTest _NSMainMenuEditEdit ßUndozßRedoZßßCutxßCopycßPastevßClearß Select AllaßßFindFindޟFind...fޟ Find Nextgޟ Find PreviousdޟUse Selection for FindeޟScroll to SelectionjßSpelling񄟙 Spelling...:Check Spelling;Check Spelling As You TypeßSpeechStart speaking Stop speakingNSView) NSResponder @@@@ffffffff NSImageView NSControl) NSMutableSetNSSetINSFilenamesPboardType&&icc@ NSImageCell)NSCellAii@@@@ main_titleiiic NSTextField  --NSTextFieldCell= NSActionCell@,version 0.8 2002 by kodi monsterkodi@gmx.netNSFont$[36c]LucidaGrandef  i:c@@NSColor@@@System controlColorff?*ffff?>:NSButton -&&Ò NSButtonCell?$LucidaGrande  " ssii@@@@@K  &&NSWindowTemplate iiffffi@@@@@c9&pxNSWindowViewՁՁ"(FileFile .Newn.Open...o. Open Recent Open Recent9 Clear Menu_NSRecentDocumentsMenu..Closew.Saves. Save As...S.Revert.. Page Setup...P.Print...pSDLMain(Window, NSTextField21111RSDLMain File's OwnerMainMenu NSNibControlConnectorτNSNibConnectorhide:^hideOtherApplications:^unhideAllApplications:^ terminate:NSNibOutletConnector_Rdelegate^"( performClose:^(makeKeyAndOrderFront:@ia"Ǯ]ǪǰǙǼcǡ(gǛ9eDzRǕjǵlǿ8ǫ,SIBCocoaFrameworkkiki/macosx/German.lproj/0000777000000000000000000000000010336064546014346 5ustar rootrootkiki/macosx/German.lproj/CVS/0000777000000000000000000000000010336064533014775 5ustar rootrootkiki/macosx/German.lproj/CVS/Entries0000666000000000000000000000015110313727042016322 0ustar rootroot/Localizable.strings/1.2/Sat Apr 3 10:24:55 2004// /SDLMain.nib/1.1.1.1/Wed Apr 9 02:56:40 2003// D kiki/macosx/German.lproj/CVS/Entries.Extra0000666000000000000000000000006410313727042017407 0ustar rootroot/Localizable.strings////*/// /SDLMain.nib////*/// kiki/macosx/German.lproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727042020112 0ustar rootrootkiki/macosx/German.lproj/CVS/Entries.Old0000666000000000000000000000000010313727042017030 0ustar rootrootkiki/macosx/German.lproj/CVS/Repository0000666000000000000000000000003210313727042017066 0ustar rootrootkiki/macosx/German.lproj kiki/macosx/German.lproj/CVS/Root0000666000000000000000000000006410313727042015637 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/German.lproj/Localizable.strings0000666000000000000000000000547710033510367020206 0ustar rootroot/* Localized versions of kiki texts */ /* game title */ "kiki the nano bot" = "kiki der nano bot"; /* menu */ "new game" = "neues spiel"; "load level" = "level laden"; "next level" = "nächster level"; "restart" = "neustart"; "setup" = "einstellungen"; "story" = "geschichte"; "demo" = "demonstration"; "about" = "information"; "help" = "hilfe"; "quit" = "beenden"; "back" = "zurück"; /* about */ "version" = "version"; "programmed by" = "programmiert von"; "sounds from" = "sounds von"; "thanks to" = "dank an"; "visit" = "besuche"; "for more games" = "für mehr spiele"; "main menu" = "hauptmenü"; /* story */ "STORY_PAGE_1" = "es war einmal\ndie nano-welt,\nin der lebte eine schar\nvon kleinen robotern.\n\nglücklich verbrachten sie\nihr künstliches leben damit,\nrohstoffe für den\nerschaffer zu sammeln,\ndamit er mehr und mehr\nkleine roboter herstelle."; "STORY_PAGE_2" = "eines tages aber\nzerstörten\nparasitäre kapazitäten\ndas hauptprogramm\ndes erschaffers.\n\nseit dem funktioniert er\nnicht mehr richtig\nund produziert nur noch\nfaule, dumme roboter,\ndie aufeinander schiessen\nund die nano-welt zerstören."; "STORY_PAGE_3" = "deine aufgabe ist es nun,\nkiki,\ndem einzigen gesunden bot,\nder überlebte,\nbei der reparatur des \nerschaffers zu helfen.\n\nviel glück!"; /* setup */ "off" = "aus"; "on" = "an"; "sound" = "sound"; "volume" = "lautstärke"; "fullscreen" = "vollbildschirm"; "fov" = "blickwinkel"; "speed" = "geschwindigkeit"; "keyboard setup" = "tastaturbelegung"; "save" = "speichern"; /* keyboard setup */ "$no_itemkeyboard setup" = "$no_itemtastaturbelegung"; "$no_item" = "$no_item"; "move forward" = "vorwärts"; "move backward" = "rückwärts"; "turn left" = "links"; "turn right" = "rechts"; "jump" = "springen"; "push" = "schieben"; "shoot" = "schiessen"; "change view" = "kamera wechseln"; "look up" = "hochschauen"; "look down" = "runterschauen"; "press the new key" = "drücke die neue taste"; "action without key" = "aktion ohne taste"; "back to setup" = "zurück zu einstellungen"; /* help */ "HELP_SPIKES_1" = "$scale(1.5)aufgabe:\nerreiche den ausgang!\n\nmeide die stacheln!\ngehe nur über sie,\nwenn sie eingefahren sind."; "HELP_GOLD_1" = "$scale(1.5)aufgabe:\nerreiche den ausgang!\n\num zum ausgang\nzu gelangen,\nschiebe die steine\n\num einen stein zu schieben,\ndrücke \"$key(push)\"+\"$key(move forward)\""; "HELP_JUMP_1" = "$scale(1.5)aufgabe:\nerreiche den ausgang!\n\num zum ausgang\nzu gelangen,\nspringe ueber die wuerfel\n\num zu springen,\ndrücke \"$key(jump)\""; "HELP_JUMP_2" = "um vorwärts zu springen,\ndrücke \"$key(jump)\"+\"$key(move forward)\"\n\ndu kannst dich drehen\nwährend du springst!\n\num dich zu drehen,\ndrücke \"$key(turn left)\"\noder \"$key(turn right)\""; kiki/macosx/German.lproj/SDLMain.nib0000666000000000000000000000502007644705750016273 0ustar rootrootYMl_PjJ a6c6؎h=eLۻZ%mzZ%-OBd$(qKr%1!l"eQWUf C$YF3ӮzzX<-ZDSǣB,uw,l߀=wvDG xh P4-E78^8HUϜ'#s1Xa;*jGbGhќȹr4t݊NY5:NѼl6 BjÄNjv4P|DOvt$+94I4Xc<["`d^<&#oe{$ UôFYе,6=Cꃩ tfo4`+QC*;Be<*VT= S5ͱrMʕ͵E)r- i6Kb蹜h鏄P BfTM<d=ae%ffj24kg{L^ǠmXĺ:i uD駹ZIƱ]BmyzZUAi~A 2rZIтF;N3=] -RTGy[xj!(1Ip~c벑t` 5rEI#Ui`&hTu  GC=oVTUЮ^UUT^Pb~粟 Vlf-gu*1j38ݻȯ@4B?5Unb,r8]p|N$$ "ia<' [. M?xvbUg7 C4HA*"B|jta%ǩWiy#XN jpꉟ:ZNJ:ܪw&&.ҵKNԅ.Ͽ?`"$t7u;Y,]Cĕ>Nt^%shkFwⳁDx2\5i6Mvsi[ n^LRIh~lەe 3c8_Aof -B/0J}>#{0 $%ŀ7T~`VmPUWytޞnxM!ڊwc Ǧf8-$7DXI6Kv|T6} G:ʠy:r9´Kڬmw*"$m'hӘR+x$ t3 IEFl&b(, RxpCgkdG(V?R{hY^nx+w=*0nafɻ]_)7zE#CKULm8FEyKJ6MqxFÆPZ^Cy\ ʐ: rA 6=)6{%)t=;7>2@/CUMBqR5BS(n0$A.>\cUu1) $mm ؀+OwgE27/O\6L`npqVw Rd u }FMy~/C9W_}_O_}> Ͽm6$lt.9[6rCRhkdFWtyKR98888888888888888888888888888888888888888>m/]r5Pkiki/macosx/icns/0000777000000000000000000000000010336064540012736 5ustar rootrootkiki/macosx/icns/CVS/0000777000000000000000000000000010336064533013373 5ustar rootrootkiki/macosx/icns/CVS/Entries0000666000000000000000000000014510313727045014726 0ustar rootroot/kiki02.icns/1.1.1.1/Wed Apr 9 02:56:42 2003// /kiki03.icns/1.1.1.1/Wed Apr 9 02:56:43 2003// D kiki/macosx/icns/CVS/Entries.Extra0000666000000000000000000000005410313727045016007 0ustar rootroot/kiki02.icns////*/// /kiki03.icns////*/// kiki/macosx/icns/CVS/Entries.Extra.Old0000666000000000000000000000000010313727042016510 0ustar rootrootkiki/macosx/icns/CVS/Entries.Old0000666000000000000000000000000010313727042015426 0ustar rootrootkiki/macosx/icns/CVS/Repository0000666000000000000000000000002210313727042015463 0ustar rootrootkiki/macosx/icns kiki/macosx/icns/CVS/Root0000666000000000000000000000006410313727042014235 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/icns/kiki02.icns0000666000000000000000000015260507644705752014735 0ustar rootrooticnsICN#x=w?w_v{{po7}}?_?;w_߀p?????icl4ί ?ͯުʯ : * ꪯ?:#ꪪ!ѳ?/"?󯪯>:+?ꪣ; ꯯>: ꯪ?? ꪪ:>ڪ? icl8V+߳޳߈߳޳޳+]޳޳޳++߳޳ݏ߳޳]޳ݏ߭޳޳ݏ޳+޳ޏ޳eݏ+ޏ޳߭܈޳_eeݏݳޏޭݏ޳44_eݏݳ]܏ݳݏ܉ݳ-^e݈ށ܏߉܎  .^ވ޳e_ݎe:5:;_Aވݳe܉܎_^;_eݏ]ޏ߇j܎޳e;ޏݳݳޭݎk߉ݏ܈݈޳߭ݏe܏ݳݏ޳ݎe܈ޭݏݳ2݉܎݈޳߳ݏ߳޳޳݈ݏ޳+޳޳]߳޳+߳޳޳+il32ֺ: 8-/1( f A$331:<5,U҈ '4996;DHA8Jۀ׏BnF.432:;΄10.-,+>?GQZ_UJ>%H>P[mmaP:CʮbUYaV=EVql`Q0lZ[9O\nqeT>1ڷvYc]BrSXrk`Q*Lsu3O]puiWC!ecHVbUlf[Q-L-O_qzmZGýdgiM;ZenoTZARVPH8"#EXhyweS0b`C0U`ikV@8IPKB2!5N^o|xgUA<`G6M[bcV9/@IF;-$BTeqteSC$RIHGUZ[U:i7B@?4&3JZdjcRA,&;KNOQRQ;<8;;==2>OX^`P?2!+߀!,  !>5p  (ZG?#  ;" #dI* ],, o0 ])  /9: İZ) 9< &?D  ~vmeQ!  P 5C `meX<  ^J(7  G\F0  m]  -<0  .{  00!    0"    )Ny       d {* , g0(ĨԹrzU08Ј Ԁqc,0%Ʉϋz>߀! p     9   -'  Q ;?C: ])   HMPTXI 9<       P     ^B      m ]    .{             Ny      d {* , g0(Ĩl8mkich#H?x;?=w7{#\6]?v;_l/o>n;wx?`{wp????????????|ich4 ϯ ϯͯ ? :?گ:::*+ :* *?: ڢ???, !ª ?*:?++"?ꪯ++*?*>+>ꪪꪯ:ڪ㪪?Z:㪪:㮪?:ꪪ?::ߪꯪ:5?? ߪ? گ ߪ ޯ ު ich8 V߳߬޳߳V߳޳V+ೳ޳߳޳߳޳޳޳޳+߳++޳޳]޳޳V߳߳޳ݏݏ޳޳޳+߳߳߳ݏ޳V޳߳ݏ޳߳ݏ޳޳޳߳ݏ݈ݏ޳ݏݳ߭eݳ޳߭ݏ܏߉_eeݏ޳Vݏݏ܏4;_e_ݏݏށV݈޳ݏݏݳ444;_eݏ޳݈݈޳܎߳4.4;eݏݳݏ܏]eݏ܉޳ .. -4e+߈܈߭_߳ݏێ݉޳   4ވ܏ݳe_ݏe޳5:5:;;:_;޳ݏމeݏeݳ^5:;_;_eޏ޳ݏ߭eݎe܎_:;;;_ݳVݏݏ޳߉݉eۈ޳;__ݏ܉]ݏ޳ݏ܎e܈߉_eݳݏjVݏ޳߳ݎ܉j޳eݏ܉޳߲߳݉kk߉ݏ޳+޳ݎkj߉ݏ޳߳݉ۉ߉ޭݎ޳޳ݏۈ޳ޭ݉ݳ޳߳݉޳ݎ޳+߳޳߳ݏ޳߭޳޳޳޳ވݏ޳޳޳޳ݎ޳V߳޳޳޳݉޳V߳޳޳+V߳޳޳޳+߳޳߳߳޳V߳߁++ih32TI.r+& @ڢ z.,+//*% %%.1/0782,& T$.54328>?83-+%18:8759?EGC=60[ݟP"n1!,4767<:8:@FMPKD>8Z ]6;97,)͊#%0332208>;;AGNTWQKE>PI/8AA=>>4))&O10/..-,*9?>BHOU[^ZSKD<$0OUWXZ\M>.+e5=K\YQHA7"&+%HOU[hnf]VJ9]|m5?TWXZ^RC3,38HYd]ULE7#I7LFOT[iqi`XL<#Zɻy6SWY[aVH7~,0CUfhaYPG5T6I^EOT\jskcZN?'LһyJWY\bZK:c:Rerme]TF+y9^rBNT]kuof]QB+7 Ь]Y]d_P>G;Tjvoh`V?&{Kn@NT_lwri_SE/'-֧__ecTA48Rhrkd]T?$?\| =MU_mytkaTG3inffXD*;QenhaZT@(Gl.:MV`nzxncWI7Ŀq`hj]H/?Pbke^YTB':^}>6MWbo{{qeYK;ĿRKcim`L4,CN^gb[XSC((LnH2MXbp|~sg[M>mP8]djpdO7,NKXc^[WRD*^7Zz@-MYdq}uj]OB#xx_J%P^ekshS;,ZHU_]ZVRF,0Ih.NZer~xl`RF'cn`R$MYagmulW?,`EP[[XSNG2Dy78 ;P[esymaSG+Dq_R/:V\djppaMGހ+k@JUXTPJA6-!3GU_iv{ocVK*Wn_N-,RZ`gll]K8*{:EPTQMG=3#(>LYdnzsh]PC'p`Q32KW^dghaK9h*y4?JONJC9/#3FP]hr{}tf[PC N_Q@4DQZ`bb`O99ނ)'8CJIF>4+ &>KUblrvpeXMC).[LFEBNVZ[\ZL96ׄ'S3>FDB=5,!/DOZeknndYLB9J?DNNMTUVVWL:+'$8A@>?<3(%8IS\bgjbWM@9"#0>KMMNOPQRN:,I%u-<;;=?;1/@MUY^b`TI?6*)8?DGGHJJKJ;)*ه$4789;=>98FMRUZ^UH>7-'+05:>CEFF<-".568:<<>EIMQVTI<6.}N  #(,13,x:-2689;=@EILNF;2+"H &.479;7 @% 7pRID< o  B&$.  -rSI<O  n.9  _I ,  m%7A  Y   +$-=H     ,#5BM  ytnibW2   #/>H  jytnic^H*   "&6C"  Uojd_Q6(   %"R,=  Ad_ObGgcDP=;c}f@Z=\c]JD6&OicA6JOVA 7<!%(-//.-,-025531.,*(&#!"X!$(-110/.--02578641/-+)'$"}%t $(,132100/.0357:;96420.,)'%" n(, #),0443321101358:=><:8631/,*(&#!O*= $(,04665433211368;=?A?=;8642/-+(&$=˝-V $'+048876554322368;=@BDB@>;97530.+)'7e.1 #'+/58:988765543469;=@BEGECA?<:8531.,)( ՅE}B !%)-159: 9887655479;>@CEHJHFDA?=;8641/-* `7.*$ IЧ $'+04798#;;:998776579<>@CEHJMKIGDB@>;96420-kwA77662-($ "&*.3687%67<<;:998767:<>ACFHKMONLJHFCA><:7520^ۉΆI248:978961-(#c @!$(,1565%37==<;::987:=<;;:99:=?ADFIKNPSUURPNKIGDB@=;96?e4),037:>@?><;;<==940+&"| &).24432K0.2:>>=<;;:;=?BDGILNPSUXXVSQNLIGEB@><9:Ł:#&*-148;?BCA@>=<=>?@=94/+&"IΞB(,03210L/-,3;?>>=<;;=@BEGILNQSVX[[XVTQOMJHFCA?<;qT!$'+/269=@DFEDCA@>>?@ABA<83.*% '010/O..,)-4<@?>==<>@BEGJLOQSVX[]^[YWTRPMKIFCA><5 !*,037:>AEHIGFECB@?@ABCDDA<73.)% fr(30/.-N+('.5=A@?>=>@CEHJMOQTVY[]`a^\YWTQNKHEB?<9,#158;>BFILKJHGEDCA@BCDEFGD?;61-(#94/4310/.-,R++*'%'/7>A@@?>ACFHJMORTVY[^`ba^[XUROLIFC@=90$&8ABEILMNNLKIHFECBCDEFGHIHD>:61,(# 3576531/.,+*R)(&#")08?BA@?ACFHKMPRTWY\^`cb_\YVSPMJGDA>:1&*:KMLLKKMOMLJIGFDDEFGHIJKKHC>951,'#JЖr(358:975320.-+*)(S'%# "*19@CBAADFIKMPRUWY[^`cc`]ZWTQNKHEB?;3'+6FKIIHHMONLKIHFEFGHIJKLMNLFA=94/+&-j4/469<=;976421/-+*(''&$"$+3:ACBBDGIKNPRUWY[^`dda^[XURPLIGD@<4)+64@GFEEGMPOMLKIGGHIJKLMNOPOKFA=84/+&ck247:=@@><;976420/-+(%" %,4;BDCDGILNQSUWY[]`deb_\YVSQNKHEA=6*2C=:>BCBBFLPPNMKJHIJKLMNOPQRROIE@<73.)?Jp)358;>ACBA?=;:86530,($!&-5@EKPQOMLJJKLMNOPQRSTURNID@<62.)o+0368;>ADFECA??=:73/,($  '.6=DFGJLNPRTWY[]`ehea_\YVSPMJGC>8-"2_UQLHA:<=?EJPQPNMKKLNOPQRSTUVWVRMID?;61+\o 2479:62.+'#!(07>EHJLNPRTWY[]aehfc`]ZWTQNKHD?:/$'h^ZUQNF76;>DIORQONMNOPQRSTUVWXYYUPKE?93.'p]*347:=@CFILLHEA=961.*&#")18@HJLNPRTWY[]aeigda^[XUROLID@;0% %qgc^ZVRK419>CINRRPONPQRSTUVWXYZ[YRLGA;5/*4q*/358;>ADGJNNJGC>:72.+'"#*1BHNRSQPQRRTUVWXYYZ[ZTNHB<71+q!2369AGMRTRQSTUVWXXYYZ[[VPJD>82,!]q^*247:=@CEJRTQNKHEB?;73/+'# %7GIKNPRTVXZ]bgkjgda^[XUSPLGB>5* uzvrmieb[7->AFLQTSTTVWWXXYYZ[]WQKF@:4.$Bs*/258;=ACIPVUROLIFCA>:73/+%  !5FJKNPRTVXZ]cglkheb_\YVTQMGC>6+ v{vrnjf`:%BGNVZWTQNKHEB?<:61*# " 4EJKNPRSVXZ^cglmigda^[XURMHD?8-!l{wsnkgC;@EJPUVWXXYYZ\_[UOIC=70( ^K*2479<@FMT[\XURPMJGDA>;71*#1, 2DIKMOQSVXZ^chmnjheb_\YVSNIE@:.#a|wspmG!:?DISVWXXYYZ]_\VPJE?92*_!/248:>DKRY_]ZWTQNKHEB?<81*# &4H70CIKMOQSVXZ_dhmolifc`]ZWSOJEA;0$f|xtrJ#:>FRVWXXYY[]`^XRLF@:3+_#135870)"-;K\.BIKMOQSVX[`dhnpmjgda^[XUPKFB<1&Kμ|ywM(;EPVWXY [^a`YTNHB<4-_Q+146:AHOV]dd`]ZWTQOKHEB>70)K%4BRb,AIJMOQSUW[_einqnkheb_\YUQLGB=3'Gȿ~|P-EOVWXY \^aa[UOID=6."c`'/148?FMT[bgeb_\YVSPMJFC>70'4,:IYk0+?IJMOQSUW[aeinrolifc`]ZVQLHC>4) 'ŴS#:OVWXYYZ\_bb]WQKE?7/%JL~#026>ELSZ`hifc`]ZWTQNKHD>7.#l%3BQ`q0 )=IJMOQSUX\aejorpmjgda^[WRMHD?6* %Ҁɶa(CWXXYYZ\_bc^XRMG@80'-L6*156+4+:IXft@ '5.Nq2;CLT]emuwtqnkgda^[XUQI>2')8GVeryq 4FJLNPRUY^cgkpuvspmjgd_[VQMHD=2'oȬsEWYZ\_adgg`[UOG?7/#hMi2;CLT]enwxurolifc`]ZVPE:/#'0?N]mw|x3EJLNPRUZ^bhlpuwtqnkhe`\WRMID>4(g˭RWZ]_behhb\VPH@80&QL1:BKS\dmuvtqnkheb`]ZWOC9.#K7FUds{1DJLNPRVZ_dhlqvxuroljfa]XSNJE@5*EͮTX]`behid^XRJB92)4M/:BKS\dmturomjgda^[YVOD9.$p4>M\ly/CJLNPRV[_dhmqvyvspmkgb]YTOJFA7+8غX[`cfhjf_ZSKC;3*#M.9AJR[clrtqnkhec`]ZXVOD:/$"7ETcs}0-AJKMORW[_dimqwzwtqnlhc^YTPKGB8- !`_cfikga[ULD<4-ͅM-9AJR[ckqspmjgdb_\YWVPE:/$->M\ky> +@JKMORW[`eimrwzyvspmic_ZUPLHC:."acgilic]VMF=5.w78@IQZbjoqolifca^[XWVPE:/$"6ETcr= )>IKMORW\`dinrw{zwtqnid`[VQMHC;0$ º]bdgjmjd^WOG?7/ w:8@IQZbhmpnkheb_\ZXVUPE;0$)3&mN4SbcehknmgbZRJA92'Jw78?HPY`ejmkhfc`]ZYWVUQF<1&.>LZhwg$9HKMOSY]afkosx}}zwtplgb^XTOKF?5(kzUM/Abacfiknoic[SKC;3)GOX_chljgda^\ZXWUTQG<1'$7ESap|| !7HKMOTY]bgkoty}~{xuqlgc^YUPKFA6)Z[OR/-`_adfilnpke]TMD<4,'vT7>GOW]afkifc`][YXWUTQG<2(/>LZiv}v 5GKLPTY^bfkpty~|yvrmhd_ZVQLGB8+:eUSS8#[]_bdgiloqmf^VNE=5.!vO6=FNV[`eiheb_\ZYXVUTQH=2('7ESapz4FJLPUZ^bglpuz~~{wsnie`[VRMHC9- 1o\XTR;Q\]`begjmorng`WOG?7/vZ7=FNUY^cggda^\ZYWVTSQH=3)'0>LZit{1DKLQUZ^chlpuz~|xtojea\WSNID;. zb]ZTQ? A]Z]`cehjmprpiaXQH@81 v~54*H/>LZhsx~.BJMQV[_dimqv{~zuplgb]YTOJF>1#Ż"phe`ZTPFMTY\^adfiknqtsld[SKC;3'vu5;DKPTY^bc`]\[YXVUSRQI?4* (7ESantI,@JMRV[`dimrv{{vqlhc^YUPKG?3%xnke`ZTOJGRWZ\_adgiloqttme\ULD<4*v4;DJNSW\ab_]\ZYWVUSRPJ?5+ "/>LZhrr*?JNRV\`dinrv{{wrmhd_ZVQLHA4&jtpke`ZTOJ$L[h*5@JOSW\aejnsw|}xtojf`\WSNIC7)@{wqke`ZTOK+"NQVY[^`cegjloqtvsld]UMF>7`v0:@EINRW\_][ZXWUSRPNLID=2'")7EXB &1CGLPUZ]\ZYWUTRPOMKGC>5*W"0>L!,7BIMQUY^bfkotx}zuplgb^YTOKE:, }wqke_ZTNJ4 ANRVY[^`begjloqrrld]UNF?70t080vyqke_ZTNJ; &KMSWY[^`begjlmmnld]VNG?80Le159>BFJOSWWVUSRPNMKIFA=:61) !*4=EJMRVZ^cgkptx{~zvqmhc_[VQMI<&Q~qke_ZTNJ<,GKPUXZ\_adfijk e]VNG?81.ljdG36;?DHMQUVTTRQOMLJHD@<840+! %08@GKOTX\`eilquy}}yuplhd_[VRMJC.$zrke_ZTNJ?"4FHNSWY[^`ceghi e]VNG@81+aB149=AEJNRTSRQOMLJIFB>:63.+$ !,4CGLONMLKJHGEA=951-)&"(/7?EINRV[_cgkoswyz|{wsojea\XTPKGCA5Nre_YTNIB5689?DJPTVY[^_` a^WOH@92,&[!048:62.+'# '.6>EIMQUY^bfjnqrtuwvrmie`\XSOKGB?=.UaZVRNHBBGFDA@FKQTWYZZ[\ ]WOH@92-'*ѐY/48=AEIIHGFEDC@<841-)%""*29AGJNSW[`dhlnoqrturlhd`[WSNJFB?=4/]SOLHD@GNMKIFDIOSUWXXY ZZ[WPHA93-'!J'26;?CGGFEDCCB?;841-*&#&-5=DHLPUY]aeiklmoqrqmhd_[VRNIEA><8& OMHEA<=INMKILRTUVWX WPHA93-(!j '-48=AEEDCCBA<>:740-)&"!)19@FJNRVZ^cfgijlmoplhc_[WRMIEA>;9.4IA>:5;JNMNNOMPSSTUV PHA94.("9%26:?C?BA@?@@A>:730,)%"%-4;83B;72.=MNMNOOPPQRST PIA:4.("J;,48>??@@=:63/,)%"(08@DIMQUZ]_abdfgijkfb^YUQMHD@=:75& 160++@LLKLLMNOPQ RPIA:4.)# $16:?@?>=7>>?@@=962/+(%,4;BFKOSW[\^_abdfgigb^YTPLHC?=:75-0)$*CKIJJKLMNO POIA:4/)#MES+48=>==<;<==>?@@<952.+)/7?DHLPUWY[\^_abdffb]YUPLHC?<9640! *BFEFGHIJKKLM NNIA;5/)#*֙G!06:=<;::;<<=>>??<851.,2:AEINRUVWYZ\^_abda]XTPKGB?<9631&$(.;<>?ACEFGHIJK LIB;5/)$o)48;:9@:;;<==>?>;840/6>CGKOQSTVWY[\^_a`\XSOKFB>;9520+ *0234579;=>@BDEEFGGHIB;5/*$l /698C99:;;<==>?>;732:@EILNPQSTVWY[\^_\WSNJFA>;852/-:&(*,-/13468:<=?ACDEFG HB;60*$>:66=CFIKLNPQSTVXY[\\VRNIEA=:842/-%!#%')*,.023579:<>@BCDDE B<60*$Ğ7-.655677899:;;<==>=99@DFHIKLNPQSTVWYZWRNJD@=:741.,(a"o!#%&(*,.023579:<>@BCDDC<60+%6%3445667889::;<<=><=ACEFHIKLNPQSTVXVQMIE@<9741.+) ߀"`!#%')+-/13579;;72,&W5>,33455677899:;;<==>@ACEFHIKLNOQSTUQLHD@<9630-*(#؃: !""+4$.13455667889::;<<=>@ACDFHIKLNOQSQLGC?;9630-*'%7ϰ {~~~2U(+.13556678899:;;<=>@ACEFHIKLNPPLHC?;852/,)'$ 1 &(+.1355677899:;;<=>@ACEFHIKMNKGC>;852/,)&# d0o "%(+.135667889::;;=>@ACDFHIKKFB>:741/,)&#!/) #&(+.146677899:;;=>@ACDFHIFA=:741.+(%"  . #&)+.14677899::;=>@ACEFFB=9640.+(%"<-8 #&)+.14678899:;=>@ACDA=9630-*'$! +  #&),.1467899:;=>@B@<852/-*'$! *M  #&),/247899:;=??;852/,)&# (qE "$'*,/24789:;=;752/,)&# #O! #(,/369:;;841.+(%"ȣVP+.%*0342/,(%"ӺkiCB**"!! ó~uMJ1֘\r<y@z \D;a.*Jok]74 ĝQ\)} r)z@iݕ;BϧMX;ԉr"[5ņ݋;! Ntq:˞4M=Wߛm"$ r 3˖l  # Lݒ!j($##k/*(%% @ 4/-*('%V 831/-+)' :8631/-+) ==;86420.+XU;C?=;96420- 8;HCA?=:86430   6NHECA?=;9653" A /RMJHFDB@>;976$    $ 9aOMMKHFDB@><:9%  %.  .o\OMLJHFDB@=<;'G F!(1   +ucQLMLIGECA?>(] '$,5  fRLLKIGECA@*Az  {g (/8  iRLNLIGEDC1 &   ($+2:  {lRLMLJHFF4ކ   c '/5<'  }oSLMLJHI6Ɔ(   h#+27>'  izXKLLJK8 ^   ;$'.6:?3  gYKMMN:  a   #*29<@8  MZJMP<  b\   v&.6;>B<   H[KPC  Hy   :"*29=?CF    /Ƹ\OC  &   f&-5ADGM   ҫc   ͅ   &-5<@CFIQ   þĀ u      ")19?BEILS  !}}{ywusrplb_][[WG     $,3;@CFILU-    b|zxwvtromkigeca`^^\K1  g   ")07>BDGJR/  +T~{yxusqomkigeca_^^P6(  A   %,3;@BEHO3     @~|zxusronkigeca_^]S=*'  05  ")07=@CFL>     5zxvtrpmkiheca_^^VC-')  :  %,3:>ADJ;     !}vtrpnljhfda_^]YH2*))   7  ")07BB   dmifdb`^][RB410-*(#    l ;%,39<@?    Rkeca_][UF832/-*(#    i ")069@$  Lga^]\WJ<7520-*'$   %,389    8e]\YM@:852/-*'$    9")09%  3bYPD=;952/,*'$    F%-3   XH@=;862/-*'%  ="+  G@>;852/,*'%  Ά Q&   @?;863/-*'%   3    A;853/,*'%    _   ;<8520,*'%    )    (?8530-*'$  %   =9520,*'%  &     1;530,*'$    A#     <530-*'$! ۋ6   7620-)'$! c   '930-*'$"   m   620-*'$# /e     *0,+)'$"  ː  .)'%$#    '&$" W  $     ! 4    w     ;N   ә  k   a :,  # `_  ߀R M7 ׀3 6ϰwywO ck:/  I n? ~L ȣ~TL$$  ӹfb61 uj><$֘\r<y@z \D;a.*Jok]74 ĝQ\)} r)z@iݕ;BϧMX;ԉr"[5ņ݋;! Ntq:˞4M=Wߛm"$r3˖l #Lݒjk@VXU8 A       G E   #$# ] '  $&')*"Az  {a   ')*+,/0' &      &--./0246+ކ  c  (11234567:<0Ɔ(  `  #6456789;<=@B6 ^  ;  $:89:;<=>?@ABFI@# a    >;<=>?@BCDEFGHKOE& b\  l  A?@ABCDEFGHIJKMMPTJ)  Hy  )  CBCDEFGHIJKMNOPQRSVZP-  &  `  F(GIJKLMNOPQRSTUVXY\`V:      DJJKLMNOQRTUVWXYZ[]^abejeC  ͅ    FPOPQRSUTPQSSTUVWXYWL MNTM(       '0.-,+**%       "   g    !   A         05         :         7       F          m  w       l.        i            /     F    =     Ά K    3     _      )     %    &      A#     ۋ6   c     m   /e      ː     W      4    w   ;N  ә  k   a :,  # `_  ߀R M7 ׀3 6ϰwywO ck:/  I n? ~L ȣ~TL$$  ӹfb61 uj><$t8mk@kiki/macosx/icns/kiki03.icns0000666000000000000000000016633707644705753014746 0ustar rootrooticnsMICN#c???W{?[o=wn'v[';[/[?;?w|??????icl4 ڪ *oo_oʪ* o o o**oo oooꢢ* n**oo*^in+"o**_n^inV!olooene,oo*+Ynn+++e_l _+"^ Yooo*no *noooʪ^ o_ n o_ icl82+^+WVeV,e_+􁉉_e_ee_e󭉉ee__e_݉e__e;_ee__ee_;;__ee_ձ֫_^_:5:;A__eϱ_^444444;_e_ϰ+_^X44 44:_e𪫫^_43- .444_իϱΪe;^44 . 34^^ժΫֱϰիe_;44444^_着αe_e_;;4:4_^_ժϱe_e_;;__;e_ղU󭉉e_A_;ee+󳉉_e_ee_ϲ󭉉_ϱz\Vղ1+2%б++VV++il32لAdr$ ŀzmYƀV^( YqveW2fwqdW儂u\n|}pb\>Fet{n_# D .ds}pZ i  Rut  Rfö  7 vϿ˻ ! ȷ $$ ó! ''  +)  Ⱥ -'4 vȻ,!+ e dǺ "& Ktq  ) -^l{wjT  V  ;Ucryl_T" 4 |ACSZL=[,  p Ƿb (BY K#kerلAu2r$ ŀ=6/V^( Y8?;2324;B?82:䄂o16=EE>81F>"29AHJD=7/ D 29@HORKE>8- i  (:AIPWZSMF@:  R3CKRZab[UNHB 7 F\dlt|xdYRLGPlkYOJ  ! Xrs^N $$ ^vѻze '' K_wƻ}h+)  BKYowb -'4 ;GNWg~zrj\ ,!+ e 2CJRYcjc\TNG"& %9AHPWYSLF?8  ) /6=DLNHB;5*  V  !*19@C<6/- 4 |(!)-&G,  p İb (BY K#kerڄ# FMu2*$ƀj[#) i 'o/D6@BFM?/%4LRPM@&6CEKVH8Y)9TYVQB'7FHQ^Q@3y-@\_]TD(9ILXfZG*f0IdfbVF):LP_ncM*Q6RlmfYG(=;4&CaseCXOo~reYG! ""! D^pwU5|Deuj]RF!CZl}hE-:YjcVMD!AVhuvX7D0N`[NHA! =SckhH-g*BTSFC>"  :O[`Z9& H6GK@>;# 367JQVK. |);C:97# j4AFK<' .:443!//7<@/ Qp5/+"T(14Fvml8mkich#H@?x z?m|?kn>}??U;ڮ?U>+QUwv; }R}wJ~?j=M}?7~g{|kZ=ݭwo?( p????????????????ich4 o ۪ o **ooooʪ*oooo*oooo*oo_o_**oooo*oi_o+*^o_o**ooo_Yo**+/o^_o*+*+*+o_ o_o/ooV oo+++*+on nf!oVo onn+++/f!nnoono -oeo*+һ/ni^onnnf򫲲+ol o*++-,+nUo_n+++mioono+n_e*++on_^o:*io_o**n_*_Vnoo*nooڪYj ooߪo_ o ^oooo_ _ |ich8 +]VV^^+V]+V_++eeV֬eee+_eee_e_e߉e__e_eee;e_eee󭉉eee_e;__eee։e_ee_;_A_e_eeիիe_e_;A_;;__e_eeիիիի։ee_;_;;;;;e;_ee_ի^^_^:;44;;;;e__eeիի+_^_X:X44444:_;_e_e𪫫^:X444444:_;_e_իԫի_^Y:434- - 444^:_e𫪪իի^_^444 - -444_:_իԪ+__:X434- --444X^ԫիԫe__:_44- .434^;_իժ着ԫիee_:;444.3444_^^ժիee___:5444:X:X_^磌ի։e_ee_;:;4:;4;^_^_ԫիe__A_;;;;__;_eeeի﫪eee__A_;_;e_ee_𫪫իމe_ee_;e;e_eeի+e_e_e_ee+ի୉ee_eϱޭeeϱϱOޭݭ2Vֱб++VVih32ֈ'Egh߅uω zm[rt}qbW`܅5 nwxjbP ԃar{~rj`K;#IZku~ypg_FK׀Wfnyyoh_Hb<`ir}wogX+ / &VdmvvndU _ VdoxzphP   F  7fnyzrh 3  Mpy|u ~  [|û \   j¹ D  qȾ+ |ǻ !  Ĺ #$   , %&[  + (( 5   ö, #+*  #!  Ⱦ* %-+! n!&¹% '.*   +zû (.&   nĻ (*! 0*  _ú  '&oR Mx|!$" } =js~~vl! ڀ %ZbmvxnfU     EU`ir|zsjaY:  8   ?OXbmw}ujbZOO  _8 ?;GR\bZQF=DЀ   k l3/9?704v ɂ ! > Kw$  /y =ڔd/_?Pֈw'Ef3I߅uω a<6-\:>80+`܅5 6;@;40( ԃ09=B>84/%;#I05:?CA<83/)K׀127CGHD@;73, / *16:@DILHD?;62+ _ +17<@FKORNIEA<84(   F  27:~  ->BHLQV[_a]YTQLHD@ \   9HMSX]chnka]XTPLHE  D  CY`fkpv{~qcZVRMIF + J`n|zi]TOLH !  Pdr|oaSNK #$  UgutcWN, %&[  [kyĶzm` (( 5   Ucr;uh #+*  #! FP^p~ÿqd %-+! n!AGMXgu&zm` '.*   +CGMRVXUQLHC?:5! ڀ ,16:?DINPLHC@;63*    "*048>BGIEA=950,  8  &',06;?B>:41,'6 _8 )#(-0,(",Ѐ   k c!#l ɂ ! > Kw$  /y =ڔd/_?PֈW/ I;*߇# )yω  ;F  ('"h c"&,+!.ޅ %'9:51-($?%+04:>6&*׃ +9BB?=94."07;>AC@4)Q;%/;GFDB@=4(T P !7=?@BFE9/%(2?LKIGEA2% !&9?ABDKL@6,t!+5DQOMLJB3"  ':ACEGPQE;2G#-7JUSQOMC4"&:CEFJTWKA7% m&0:PZWVTOE5# &HJLWbh]SE+ 5-9Kbgeb]TH8%(&?KMP\gndZI0h*0>Qgkif^VJ9$ )&AMOT`lsj`L3T%3DWlomg`WK:#+'ANPWepxodO6?(7J^rtqiaYL:"#+--.//+" (BQS\ju~vhS:+,=Pdwxtjc[M:!%0:??@@<3) )DSWanz{lW>$/BVi{|ukd\N8 &2>Vj~yoh_M5&0:A@@?<4).H_juxbH08Pdy}tkc[L4, )00/..-'/I]itnX>,4I^r~xof^WK41IZfq~zdN6F JAVivri`XRJ3  3GWcn|nYC/y j;Pcpme[SOI3 4FUaly~|dO9* 5I[ih`VOLG2 2CS^itwsZE2#ڀ -AR`bZPIHE1 0AP\flohN9,0 ';KX^UKFEC1 /?NZbei_D1(J(4CPXPFBB@1-=KV[^aT:,$kJ,9FPJA?>=0 *;HPSVYH1'w&2?JF=<;:0! [d)9FJLPR?+#˂)7BA98870! ) I'6?CEII6'"  -9;5543/ %27;=A>-"Y $&152210-* #-147:5)! P1/-( " }$+030Zt}|>8ics4 Ү_*omj*"Ve+^֟,/eZm_+*^on˽o  ics8Wdee_U։e__eeV։_;;_V^444:_贈ϱ_4- 4^Ved5:4_Ϋ+։_A_e_իбֳe]]U+is32b,dupd|c4/,/hn~OkT30a{O:XH1-Xc5ID<.XZS(HJ%C1%.3:|s8mkicm#8{}~~}>ڻ}^~y=|>icm4h ʭ*oj+*o]e+/nnojoͼ icm8+2+,W֫_e։e_;eV_444:_ϱ_:.4^ժφϱ։e:5__ֱϱ։eeϱ,+VV,UVVit32ezܬa%+ޛ}]TpyҬqcəz|^WOŗO  UX Bu{}aVYRޔ/67${ْ ry{~dYXXKovП$_ kxx|f]ZYR`v r nuvz}i_]ZZGcJirtw{lb`]Y[:ΙՋ|lsuy}kfc`\YY)--x|drswz~mifc_\[S&I[pqtx|plieb_\\ỈPtPmoruy}solheb_\\>.Շ 9Mimpsw{~vqnkhea^[Z3@uɐDclmqux|yurnkhea^\U)K*^O\jkosvz}|wtqnkgda^]N"kN݂OThimptx{~zwtqmjgd`]]Dw>t@_Legjnruy|}zwtpmjgc`][<Ҋ@!uC`ehloswz~}zwspmjfc`^W5)|<[dfimqtx{}yvsplifc_^R0'q\(5Ubdgknrvy}|yvsolieb_^L,'I,V(z1O_aeilpsw{~|yvrolieb_]F)A+  ܈+(':H\_cfjnqux||yurokheb_ZA&"  )#BY^adhkosvz}{xurnkhda_W>#   k+;U[^beimptx{~{xtqnkgda_T:   3 ,5PY\_cgknrvz}{xtqnjgda^Q7   ݇a -.JY[_cgjnrvy}{xurnkhda^L4   < / &BW\`cgkorvz~|yvroliecZE,   n /8Q]`dgkorvz~}zvsplifbT=   g  0+I]adhloswz~~zwtqmjg`L  [ 0:Xbehlpswz~~{xtqnkhZ  4ͅ   0Jcfimptx{|yurolg   7   0^gjmqux{}yvspn     0ijnquy|}zwts      0norvy}~{xw   f  0rsvz}¿|}'   [  0vwz~8   5  01~{~8    1  06¿9    07:     07ÿ;  c   0<¾;    R  0T;   M  0VS   !  (  0Wÿ\  !"!  's   0Xþ\  "#"  ߃U   0\]  #$$## ՂR   1s^  $%%$#  ς.  1v_ !%&&%$  *   1wÿ_ "&''&$      1x¾e   #'( %      2{}  !$() %! l  2 "%(**)%! p  2ÿ #&),+)&! G y   2  #'*-,*&" :X   2 !$(+.-*&" 3D !! 2Ŀ "%(,/.*&" ( "! 2#¾~ #&)-0/+'# c  #! 2}  $'*-1/+'# / !#! 2¿} !$(+.2/+'# T  !#! 2us "%(+/1.*&" |(  "  0o] "%(,/0,($  N  !  1f] "%),/.+&" ˃}   0S] "&),.-)$!   0TE #&),-+'# :  0@;  #&)++)%! ^    06<  #'))*(#  H   0/8  #'(()&! w  0}~   $&'$  х  0z{~ !$%%&&"   0 kvx|~~ !#$$%$  >  0eqsvz~|ys !""##" eF   0\lmqtx|}yvug  !!""! v   /Khhlosvz~~{wtqoc  !!    /Dcbfjmqtx{|yurokj^     ݇   /.]]adhkorvz}}zwspmifgL  $   . OY[_bfimqtx{~{xtqnkgda`>  EF  .=QVY]`dhkorvy}|yvrolheb_\V4   lk  . ,CQTX[_bfimptx{}yvspmjfc`]YVH%    .2JORVY]`dgkorvy}}zwtqnkgda^[WUL:    , 0LNPTX[_bfimptw{~{xuqnkheb_\XUSO9     )BKMQTX\`dhkorvy}|yvrolifb_\XUQOJ,   ):  &JVADGKOTX\adimquy}~{wspmifb^[WSPLHF:qO   Lm  &x4:=AEIMRVZ^bgkosqmjfb_[WTPMIEB>;=   r   'E137;?CGLPTX\`dc_\XTQMIFB?;75-d    q)*-159=AEJNRVUQMJFC?;841.*<    (   8T#'+/37;?DHGC?<852-*   =^  eTI04&(-07:961.+&+44Q  ~ ζtuV  Í 0   (,  []  f  ؏Ĩd 4:7uF9-|qV:.,ڝ\-ܭ= TލDVh+ר}L.ڷߍ4EdVSёb2%+ޛs>./pyҬqcə=>/+/ėO  UX B:=>0*,<ޔ/67${ْ =<=?1,++=ovП$_ =;<>@3.-,(Yv r H:;<>@4/.,,#`JI8:;=?A50/.,-ΙՋd69:<>@@521/.,,--xh189;=>AA6421/--)I-78:;=?AA85421/--$̉Pt(678:<>@BB975320/--&Շ 9*4679;=?@BC;875420/-,;uɐ%1568:<=?ACD<9865310.-*G*^6-4579:<>@BDD=;:865320..&hN݂:)34689;=?ABDE><;9864310.."u>t@O%23568:<>?ACEE@><;9864310.-Ҋ@!i!023579;=>@BDFFA?><;976431/.+)r-12468:;=?ACDFGBA?><:976421//(q\(*013578:<>@ACEGHDBA?><:976421/.&I,V(z'/024679;=>@BDFHIEDB@?=<:875420/.#;+  ܈+(#'$./13468:<=?ACEFHIGEDBA?=<:975421/-!  ) ,./13579:<>@BCEGIJHGECB@?=;:865420/+  k+ )-.024679;=?@BDFHIKJHGECB@?=;:875320/*   3 , ',-/13568:<>@BCEGIKMLJIGEDB@?=;:865320/(   ݇a -$,-/13568:<>@BDEGIKMONLJIGEDB@?=<:875320/&    < / +-/13569:<>@BDFHILMOQPNLKIGFDCA?><:975421-#   n /(./13579;<>@BDFHJKMOQSRPNMKIHFECA@><;986431)  g  0$.023579;=>@BDFHJLMPQSUTRPOMKJHGECB@>=;:86530&  [ 0,024579;=>@BDFHJLNPQSUWUTRPOMLJHGEDB@?=;:8754-   4ͅ   0%124689;=?ACDFHJLNPQSUWYWVTRQONLJIGFDBA?><:9763    7   0/3468:;>?ACDGHJLNPRTVWY[YXVTSQPNLKIHFDCA@><;977     0 4568:<>?ACEGIJLNPRTUWY[][ZXVUSQPNMKJHFECB@>=;:9      0 679:<>@BCEGIKMOPRTVWZ[^_]\ZXWUSRPOMLJHGEDB@?=<;    f  0 99;<>@BDEGIKMOQRTVXY\]_a_^\ZYWUTRQONLJIGFDBA?=>   [  0;;=?ABDFHJKMOQSUVXZ\^_aba`^\[YWVTSQPNLKIHFDCA?B   5  0>=?ABDFHJLMOQSUWY[]_abdeca`^][YXVUSRPNMKIHFECAD    1  0CACEGIKMOQSUWY[]_acehillgc`_]\ZYWVTSQONLKIGFDCE    0KIKMOQSUWY[]_acegikmoqttoid`^][ZXVUSRPOMLJHGEDF     0 PQSUWY[]_acegikmoqsuwy{{wqlf`][ZYWUTRQONLKIGFDG  c   0"RSX\^`bdfhjlnprtvxz|~~xsnhb^[YXVUSRPNMKJHGEG    R  00RTZ`ehjlnprtvxz|~{upje_[XWVTRQONLJIGFH   M  02TV[agmqtuwz|}}wrlga\XVUSRPNMKJHGI)   !  (  03UW]chntz}ztoid^YUTRQONLKIGI.  !"!  's   03WX^djou{|vpkf`[VSQPNMKJHJ.  "#"  ߃U   06XZ`ekqw}~xsmhb]WSPOMLJIK.  #$$## ՂR   1CX[aglrx~zuojd_YTPNMKJL/  $%%$#  ς.  1EY]bhnty|wrlga\VQMKJM/ !%&&%$  *   1FZ^diou{ytnic^YSNKM/ "&''&$      1G\_ekqv|¼{vpkf`[UOO2   #'( %      2I]aflrx~Ŀ~xsmhb]WTA  !$() %! l  2 T]bhnsyzuojd_\H "%(**)%! p  2 V^ciou{þ|wqlgdN #&),+)&! G y   2 QZ_djpv|ſ~xsmheO  #'*-,*&" :X   2 IRV\bhnsyý|wqlfdN !$(+.-*&" 3D !! 2 DIOUZ`flrw}zupjebL "%(,/.*&" ( "! 2EEHLRX^djpu{ysnic`K #&)-0/+'# c  #! 2AEFHKPV\bhmsy}xrmgb_J  $'*-1/+'# / !#! 2 ADEGIJOTZ`fkqw}{vqke`]I !$(+.2/+'# T  !#! 2:DEFHJLNRX^diou{zuojd_\D "%(+/1.*&" |(  "  17DDEGIKMNQV\bhmsy~xsnhc]\7 "%(,/0,($  N  !  12CCEFHJLNOQTZ`fkqw}}wrlga\[6 "%),/.+&" ˃}   0)DBDFGIKMNPRTX^diou{}{yvpke`ZY6 "&),.-)$!   0*CACEFHJLNOQSUW\ahmsy~|{ywusrpnid^YX' #&),-+'# :  0 B@BDFHIKMOPRTVWZ_ekqw}~|zywusqonkjhfeb]WW"  #&)++)%! ^    0B?ACEGHJLNPRSUWXZ^ciou{~|zxvtsqomkihfdb`^][YVU"  #'))*(#  H   0@?@BDFHIKMOQRTVXY[]agmswvtrpnmkigecb`^\ZXWUSQOR   #'(()&! w  0>>@BCEGIJLNPQSUWY[\^`ekpnljigeca_]\ZXVTRQOMKIGH   $&'$  х  0<=>@BDFGIKMOQRTVXZ[]_`dhfdca_][YXVTRPNMKJHFDBAA !$%%&&"   05:;=?ACEGIJLNPRTVWY[]_aba_]\ZXWUSRPNMKJHFECA@>> !#$$%$  >  0289:<>@BDFHIKMOQSUVXZ\^_^\[YXVTSQOMLJHGEDB@?=<9  !""##" eF   0-568:;=?ACEGHJLNPRTUWY[][ZXWUSRPNMKIHFDCA@><;:3  !!""! v   /%33579:<>@BDFGIKMOQSUVXZXWUTRQOMLJHGECB@?=;9871  !!    /"1124689;=?ACDFHJLNPRSUWUTRQONLKIGFDBA?=<:8754/     ݇   /..013578:<>@BDEGIKMOQSTSQPNMKIHFECA@>=;976423&  $   .',-/124679;=?ACDFHJLNPQPNMKJHFECB@?=;:8653200  EF  . (+,.013578:<>@BCEGIKMNMKJHGEDBA?><:975421/.*   lk  .!(*+-/124689;=?@BDFHJKJIGEDBA?><;9865310.,*$    . %')*,.023579:<>@ACEGIHFDCA@>=;:865320/-+*&     ,&'(*+-/024689;=>@BDFECB@?=;:875320/-,*)'      (!%&(*,./13578:<>@ACB@?=<:975421/-,*('%   ):  &FC!!#%'*,.02468:<>@?=;986420/-+)'%$#iN   Lm  &p "$&(*,/0357986421/-+)(&$" ,   r   '6!#%')+-011/-+*(&$"!\    k "$&(**(&$#!/    (   8K!##!$|   =^  eL?"%&'H  ~ ʲgg|V  Í 0   (,  []  f  ؏Ĩd 4:7uF9-|qV:.,ڝ\-ܭ= TލDVh+ר}L.ڷߍ4EdVSv5(-ޛR q zҬ qdəzė P  VY   D'ޔ0  98  &|ْ/o  wП% `Rw   s   !] !#   &%#! M)  "$&(($!ϙ  #++)'%#!  ՋM.!#$&(*,.-)&"6 '/1/-+*(&%#!  {U  "$&()+-/1341.)#R #+475420/-+*(&%#!  "y ̉R !#%')+-.02468:950*%|'08=;:865320.-+)(&$#  Շ #%')+-/13468:<>@=71+&  ($,4:?A?>=;:875320.-+*&"A6x  (*,.024689;=>@AB@<72-'!%͐!* (/48<@BAA@?>=;9864310.*%  C!%"+/02468:<=>?@AACB>;72.(#="-#)-159=;:8652-(#ee"#-4579;<=>??@AABEE@=941-)$_$1#'*.26:>DEDDCBBAA@??><<950,'"ނ&s$D%/7:;<==>??@AABCGGB?:63/+'#%Q #'+/37:?FGFFEDDCBBA@@??<72.)$ ?$ &09<<==>??@AABCDHIEA=951-)%!֊% $(,048;BHIHGGFEEDCCBAA@;61-(#J]$ (2:==>>?@@ABBCCEJKGC?;730,($)!%)-158=DJJIIHGGFFEDDCBA<5/+&!"i(u   )2:=>>??@AABCCDGLMIEA=952.*&!k("&*.269>FLLKKJIIHGGFEEDB<5.)% (O  !*2:>>?@@ABBCDDEIMPLHD@<840,($A(c#'+/36:@HNMMLKKJIIHHGFEB=5.(#'53 #*2;??@AABCCDDEGKOQNJFB>:62.*%$ވ(< $(,047:63/(s&"&*.259?GOSRRQPPONNMMLJGD>6/(!% #*170)"$ "*170)"# ")2=BCCDEEFGGHJOSX\YUQMIEA=:3+#$E!%)-148?FNVXWWVUUTSSRQOLIE?80)"# ")2=CDDEFFGGHILPUZ]\XTPLHD@<5-%p#)"&*.159AHQXZYXWWVVUTTSPLIF?81*## ")2=DDEEFGGHIJNRW[_^ZVRNJFB>6.&k$* #'+/26;CKSZ[ZZYXXWWVUSPMJF?81*## ")2>DEFFGHHIIKPTX]a`\XTPLHD@7/'`$!$(,047=EMU\]\[[ZYYXWWTQNKG@91*## ")3>EFFGHHIJJMQVZ_cb^ZVRNJFA90(;$"%)-048@HOX^_^]\\[ZZYXUQNKG@92+$# !)3>FFGHHIJJKNSW\aeea\YUQMIB:1*@##&*.15:BJRZ``_^^]]\[[XUROLHA92+$$ !)3?FGHIIJKKLPUY^bggc^[WSOKD;3+ +#$'+.26=DLT\bba``_^^]\YVSOMHA:3,$$ !)4?GHHIJJKLNRW[_diiea]YUQME<4,"#$(,/38?GOV_dccbaa`__]YVSPMHA:3,%$ !)4?HIIJKKLMPTY\afklhc_[WTNF>5-$#j%),049AIQXafedccbba`]ZWTPNIB:3,% !*4@HIJKLNRUZ^chlmjea^ZVPG?7.&#a!&*-15FMU]eihggfeedb^[XUROJB;4-% $ *5@IKLLMNNPUY^bfkprnjfb^ZRJB91(%=%(+/39@HPX`hkjihhggeb_\YUROJC<4.$ $ +6AJLLMNNORW[_dhmqtqlhea\TKC;2*%#&),04;CKRZbjllkjjihfc`\YVSPJC<5-$  $ +6AKMMNNOPTY\aejnsvsokgc]UMD<4,&"'*-16=EMT\dlnmllkkifc`]ZWSPKD<5-$  $!+6AKMNNOOQUZ^cgkptxuqmie_VNE=5-h'(*.28@GOW_gnponmmljgda^[WTQKD=6-#  $!,7BKNNOPPRW\`eimrvzwsokg`XOG?6.!Y+)+/3:BIQYaipqpponnkgda^[XURKD=6-#   !" %!,7BLOOPPQTY^bfkotx|yuqmiaYPH@7/#V-),056," "%&%&'( )(%! %!,7BMPPQQRV[`chlquy~|xtpkcZRIA91&3 "*-17>FNV^emtsrqolifb_\YVSLE>5," #'+,,-./ 0/+($  %"-7CMPQQRTX\aejnrw{~zvrld[SKB:2'5/w$+.29AIPX`hpvvuutsplifc`]ZWSME>5+"#'+/33456 2.+'# %"-8CMQQRSVZ^cglpty}|xtne]TLD;3)#߃0\',/45+! $(,048:;<==<951-)&" %"-8CNRRSTW\`eimqv{~{vof^VME=4+Ղ2\),06>EMU]eltzyxxwtqnjgda^[XTMF>4+!!%(,048<@BCDC?<840,)%! %#.9DNRSSUY^bfjosx|}xph_WOF>6-ς4<*-18@HPW_gow{{zzxtqnkheb_[YTNF>4* !%)-159=AEHIJKJFB?;73/,($  %#.9DOSTTV[_dhlquy~zqiaXPH?7/5<,.3:BJRYaiqy}||{xurokheb_\YUNF=3* "&*.26:=AEIMPQPQBFJNRVW?XXWTPLHD@=951-*&" $/:DPUUVZ^cglpty}|tkc[RJB92z&.07?GNV^fnu}}yvspmjgd`]ZVOF<3)#'+/37;?CGKORV[]^^_^ZWSOKGC@<840,)%! $/:EPVVW[`eimqv{~umd\TKC;3!pz#.2:AIQYahpx}zwtqmjgda^[VOF<2) $(,047;?CGKOSW[_cefea]YVRNJFC?;73/,($  $/:EPVVY]bfjosx|vnf]UMD<4#uz#/4:62.+'#%0;EQWW[_dhlquy~xog_VNF=6&Nz~&06>FNU]emu}~{xurokheb_\WOE;1(  $(,048<@DHLPTX\`chjjfb^ZWSOKGC@<840-)%!%0;FQWY\`ejnrv{yqh`XOG>7(C<_)29AHPX`how|yvrolifc`]XOE;1' !%)-148<@DHLPTX\`c:a^ZVRNJGC?;730,($ %0;FQXZ^bglptx}zrjaYQH@8*>BFJNRUZ\9[YUQMJFB>:63/+'#&1$09AIPXahpx~{xtqnkhda^WMC90& !%)-159=AEHGF3D@<851-)%!'2=HS\`ehmrv{wnf]ULC<.\%47>FNV^gow|yvsolifb_]WMC90& "&*.26:>A@?2><840,)%! (3>HS[_dhlquz~}tkbZQH@8(%E5;CKT\dlt|~zwtqmjgda][VMC9/&  #'+/37:98278740,($  (3>ISZ^cgkpty}xog^VMD;5!$a29AIQYaiqz|xurokheb_[YVLC9/&   $(,03211010/+'# )4?JSY]bfkotx|}tkcZRI@83˃$06>FNV_gow}zvspmjfc`]YXVLC9/%  "%)-,+*),'# *4?JRX\aejosw{yph_VNE<40-$+450.*19AIRZbjptxwspmifc`\YVSRKB8.$  % "-8AGNSW\`ejnsw|vne\TKC:2/,х&/7?GOW_gmqvuqnkhda^[WTQPKB8.$ $ #-8?FNRV[_dimrv{{rjaYPG?60-)+%-4ELQUY]bgkptyz{}~|sjbYQH?60-+!hW(/7?HOX_chlnlheb_[XURNMJA7-##$/6=DKPTX\afjoswxyz|yog^VMD;3/+)#%-5=EMU\`eiljfc`]YVSPMLLKKIA7-##%/54/,(%#%-5=EIMRV[^[WTQNJGEED@6,###*18?DIMRV[_`abdefge]TKB:1-*'$!#*3;AFJOSW[YUROLHEC BB?6,# $ ")07>CHLQUZ\]_`abceaXPG>6/,(%"*!(08>CGKPTXWSPMJFCBA ?6+# % ")07=BGKPTXZ[\]^_`b]TLC;2-*'$ /G%.6;@DHMQUUQNKHDBA@ >5+# G1&aT!(/6=5+$  ')U  '-5;?DHMOPRSTUVWYYRH@70,)%"&-26:?CGLNLHEB?>=< 5+$  'f"% &-4:?CHKMNOPQRSUVUMD<3.+'$!6#+/37<@DILJGC@=<;5*$  BBx% %,39>CGIJKLMOPQRTRIA80,)&"Df!(+049=AFJHEA>;: 994+%! lE6 ?$ $+38=BEFGHJKLMNOQNE<4.*'$ $(-15:>CGFC?<:98 4+%! ǯ[[u#]$+27<@BCDFGHIJKMNJB90,)&"č!%*-27;?DDA>:987 4+%! 8# #*16;>?ABCDEGHIJKF>4.+'$!-5"&*/48?@BCDEFGHC:1,)&"cf#',149>@=:765 443+'  ! "(/589:;<>?@ABCEE>5.+'$!  $)-16;>;75432+&j!"(/35679:;<=>?ABB:1,)&"ُ!&*.37;9644321,%Ũ g #(.1245678:;<=>@>6.+($!AD#'+04874321+$ :  (-/012346789:;=;2,)&"} S$(-155210 /.,(" = $),-/012345679:7/+($!>~2!%)-230/ .,)&"  #'*-./02345673-)&#)gT&*/1/ .,)&#  2 !%(,./01234/+($Hޝu:.-,)&#  1ܭ@ "&*,/011-4nd<&#  Xi  $(+.Qݨ \1 2ڷ ߍ7 )ZÇfX!Yt8mk@kiki/macosx/kiki.icns0000666000000000000000000014661607644705750013642 0ustar rootrooticnsgICN#o{տw߿???????icl4ooooooo_o_V_n^oof*on_򲲪nmoon"++ooono+]U*Yoonmno+YU^]ooooni_o*noonon^Vjooooooo_ooooooicl8߭իի։eի֭_e_e񫪫𪫱:;:;_eժαe4;45:аα;5;իα;;_;_eժ߉𪪰;;e񱤪򭉲򫪪։;_񫪆𪪫__񫪪ֳeeիα_ֱի֭իݭ֫il32    9+    d_V/% mwnN0)  Dk$88 #  ĵ49F*6 (#R7Q; -) .u4UL&; H //u6VB &o /5%mq;=L- 'g* 05#sZ"==  F 0, ye5'3* "!-$kQ !)!' r]5!0p`E   2P= !&         1/+% 6@<7' 0)  #ULGB588 # fok`QD9F*6 (#Fx}l,7Q; -) ~wm>4UL&;  $ //[gb_X: 6VB 7 /5%8a]S8=L- 3 05#B\N9- "== # 0, NK<2'3* !-$J?5( !)!' C8.!80#  '    &)*( $'$"",7@DC?42263 +)-8DORKE2 3?><@FMTM@,,009DN\WQ@#.-84&7^[UD81 %-4?=;:<@EIMSQI?.&,/.--3:CJQXTPLF7 ?@BDB@BGLNS_VM@' (-*-113:CHO^[WSM>)&5:AEFIMNRecZP0",,*"%05:AFLad_[VH5! *6* +:LMPbyxpW/*,>CI_qnidWF4 *GMO^y}hA%-024.$ :1'8AF[q}yuhWI6  FNZshH+,@GG=6/)&+?DXn|o^P@"  NWpxY7+-@MOJFA7&>BVlxgYJ0 $UnmM2ARTOLH:(:ATjoaS;!#&*+)=Oe{qcQ9 /Pi\16Peb]YT@)7NdyykZF(  "TooJ$;Wifa\W@&)Kawr`N.  5Yt\= A]nid_XC&J`u}mZH& E_zkH5 >[lha\WG0 LbxueT@ JeZ<.3Tfe^YUI4%Mdz|l\N8 $NisI7# M^b[VRK8&,Pf}rbSI. 5Unv~]=1GX]YTPK<)1Si~}jZNC& ';YiowpM8, @QXVRNI@,5Tk{taRK= +6@X`fn_B3'2IQSOJD<.9WlvzjWLF5 4CEHOV\aK;-"BJOJE?7*=YiqzrbPIC- =CFGHINTUB6((;CKF@:1$@YdltiYJE?% 8CDEFGHILK=1'1;DC;5*CV^fl_PFA: 8@ABCCDDEC;0$%5?A91,($(DPY`eWJC=517889::81'-7>7/0101AKT[]NF?9/ )./.,%/84.1247;EMUTHB:5( "12.1258;@HPMD>72#$..136:mqG _DMK(-ja$B}\X#cyAKoc\+ bu;dBST:h\&%df%:J5$foI+FPE=-0XW< 78+)18IE-%02#s8mkicm#8~?icm4hooo_e梻n+ooV^_oicm8ϱ։ի;:_;;eֳϪ_ϱֱ֫it32NI                    #,*)+,'  845/    =?>=>?5   2LGFGH:      UQPNNK6   !"!  O_\\] [YVTRPD-  !"#$%$   4ohiiheca^\YWVJ8& "#$%&((   svtsomkhfda_]\Q=.  #&'()*+%   Z}zxvsqnljgecbZB1&  ")*+,-.)   1}{yvtromjhgcL4)"*--.01-%   ~|ywurpnlkV:-!!*/01242)   U}{xvtqqcA/%  )134565-$    ~|ywwnL3) (1678991(   ||yX8-! (079;<<5,#   Dh?/%  '/8<=>?:0'     uI3)  &.7>@AB?5,$  !!  mʿļW6* %.6?CCEC:1(   !!""#! %ķh>, %-5>EFHG>5,# !""##$# ɺzG, $,4=EIJJB90'  !#$$%%$! 2M°W( #+4=EKMMG=4+# !% &'&" 3Ƕh) #+34,"  !&(() %! 3+.!)1:BKSVTKB90'  !%)**+*'# 6@ )1:BKSYWOF=4+"'  %*++,,($! 3V  (09AJRZ[SJA8/&  ,)   %*,- *&" 3Ž~'/8@IQZ_WNE<3*" 0@  %)..//+($  3üt8 &.8@IQYa\SJA8/&"4O"   %).0 -)%! 22gU  &.7?HPXa_TKA7-"&:UC  $).112.+'" 4`a/ &.7@IQ[aZOE;1' ,@W`  $).2330,($  3``aQ (09BKS\]TJ@6+!  1F[o) $)-2441-*%! tba_%!*2;CMU[YOD:0&  $8L`qO $(-2563/+'# .necaE#+4=EOUXTI?5+!   *>Repp  $(-26740-($! -4khd`Z %-6?GOSUND:0&  /DXjr. #(-16962.*&" -ljf``8  '/7AINPQI?4*     5I_nu[ #(-16:740,'$  ,)¿znmgb_S)19BILNMC9/%  &';Pery  #(,16;952-)%! F˿wrnid_]1 !*3;DGIKH>4*    &.@Sdpv{0 #(,16;:61-($  +gɼvtpke`^J  #,4>CEFIC9/$  % )9IZiqv: #(-16;84/+&" +źxwqlgb]Y)  %.6=@BDE>3)   %/?O`lr{" $(-27962-)$  {xsnid^\A '08<=?BB8.$  # %5EVemu $).3783/+&" ~zupje`\T%  )279:=?=3)   "+;L\je   %*.3661-)$  ({vqlgb\[; "*2468:<8-#  !!1BRc_ !%*/354/+'" @}xsnic^[M$ $,0135793(  !(7H[M !&+/232-)%  bztoje`[W5 &+-/1356-#   #/>S@ "'+/120+'# {vqlgb\YG&  &)*,.032(  ,4I0 "',./0.)%! }xsmhc^YS2# $&(*,.0,"  '2?! #(,-./,'# ~ytoje`ZWC)!!#%')+-'  13 $(*+--)%! '{vqlfa\XO2' !#%&)*"   (  $()*++'# =}wrmhc^YU?-%   "$&&    %'()**%! S~ytoje_ZVK4+! !$!   !$%&')(# m{vpkfa\WR>1( !  !#$%&(&! |wrmhc^XTH8.   !!"$%&$ ~ytnid_ZUO@4!    !"$$" $~zupkfa\VRH;$     !"#  8zvrokgb]XSN@&    !! H|rnkgc_\XTQE&       Ssieb^ZWSOME'    ]ha]ZVSOKHC&    _^YVRNKGC@'   ZTPMIEB?='   $SKHEA>:9$   -IB?=964"  0>86310!  ),)''(                                                %#$       +(''%    !"!  '/. -,+*)("   !"#$%$   74 3210/-,+*$ "#$%&((   9;:97654310/.-( #&'()*+%   ,B><;:986543211-!  ")*+,-.)   GAA@?=<;:9864431&"*--.01-%   @GEDBA@?>=<:98765+ !*/01242)   *OIGFEDCBA?>=<;:981   )134565-$    NMKJIHGEDCBA@?=<;;6&(1678991(   BXPMLLKIHGFEDBA@?>><,(079;<<5,#   $f`\VQMLLKJIGFEDCB@3 '/8<=>?:0'    ZfeaZSNMLKKJIGEEDCC:$ &.7>@AB?5,$  !!   :lghjkmke\TOM KJIHGFFB+ %.6?CCEC:1(   !!""#! iijklmoqsqlaVOM LKIHHG4 %-5>EFHG>5,# !""##$# QplmnpqrsuwywpcXQMLKJK=# $,4=EIJJB90'  !#$$%%$! 2)snoprstuvxy{}~wi[QMMNMNE+ #+4=EKMMG=4+# !% &'&" 3fsqrtuwwxz{}}{n`SMMOL4 #+3"*2;CLRSPF>4,"  !&(() %! 3wvwxy{|}~xgYE!)1:BKSVTKB90'  !%)**+*'# 6\}yz{}~j" )1:BKSYWOF=4+"   %*++,,($! 30{|}~I (09AJRZ[SJA8/&    %*,- *&" 3 s~ypg`[V< '/8@IQZ_WNE<3*"  %)..//+($  3Lyqjd_\ZYZ\S9 &.8@IQYa\SJA8/&'   %).0 -)%! zumgca_^]\[]N3* &.7?HPXa_TKA7-" *!  $).112.+'" 4fzuplhedccbba`_^]\[\[E/0 &.7@IQ[aZOE;1'   +/ $).2330,($  32qihggfeddcba`_^]\[\W?00((09BKS\]TJ@6+!  #-7 $)-2441-*%!  fjhgfedcba`_^]][[\S900/!*2;CMU[YOD:0& &09' $(-2563/+'#  Dmffedcba`_^]\[L6210"#+4=EOUXTI?5+!   )388 $(-26740-($! -hedcba`__]]\[[YF531/, %-6?GOSUND:0&   !,59@ #(-16962.*&" - _ecba`_^]\[Z[U@5520/ '/7AINPQI?4*    $/7:B- #(-16:740,'$  ,dca`_^]\\ZZ[P<7631/) )19BILNMC9/%  &(29<@? #(,16;952-)%! $ga`_^]\[ZZYK;8741/.!*3;DGIKH>4*    & )28:=D #(,16;:61-($  +4f__^\\[ZZWG:97520.$  #,4>CEFIC9/$  %$-48;B #(-16;84/+&" Bd^]\[ZYZSC<;8630.,  %.6=@BDE>3)   $ (059= $(-27962-)$  Na]\[ZYYPA=<9641/.  '08<=?BB8.$  ##+26:  $).3783/+&"  X^[ZYYXL@><:7520.)  )279:=?=3)   " &.52  %*.3661-)$  ][ZYYUIA?=;8530.- "*2468:<8-#  ! )1/ !%*/354/+'"  _YYXSGB@>;9641/-&  $,0135793(  ! #.& !&+/232-)%  1_XXPFCA?<:752/-+  &+-/1356-#  )  "'+/120+'# A\VNFDB@=;8530.,#  &)*,.032(   $ "',./0.)%! KWLGEC@>;9641.,)  $&(*,.0,"   #(,-./,'#  PMHFDA?<9742/-+! !#%')+-'     $(*+--)%! OJGEB?=:8530.,'  !#%&)*"    $()*++'# OHEC@>;9641.,*   "$&&    %'()**%! )NFDA?<:742/-+% !$!   !$%&')(# 6JEB?=:8520-+(  !  !#$%&(&! @GC@>;9631.,*$   !!"$%&$  DEA?<9742/-*'     !"$$" EA>=:8530-+)$     !"#  B<:97531.,)'     !! #>87531/-,*("       )9431/-+)(&"    .31/-+)'&$!    /.,*(&$#!   ,*(&$"!   )%$"    $!                                !   !"##$%%&&'&&$"%&%$$#""  !$')*++,,--.-,+)'%(+-,++*))(&$#  "$'*-0122334321/-")**,./1344332110/.,*)'%""$(*-036899::;;:9865+!,-.--.023579::;:98875421/-+)% ! !%'*-0369<>@@A@?><;85*-1 00/134689;=>@A @?>=;:87641-# $##""!"%(+-0369@BCEGHJLNNMKHEB>;84/  ((''&&%!(+.1379==<;;:;=>@BCEGHJLMOPRVSOLIFB@<5' *-,,+&**))+.147:82)!. &,39@BBAA@??>==<<=?ABDFHIKMNOORZXURNKHEB>@ACEFHJLMNOOQZ^ZWSPMJGB6( "+.--00//..-".147:=@BFHJLNV[YWVTSQPNMKID?81)!,5DC@>ACEFFEDDCEFHJLMMNOOPWbeb^[XURND7) %,--,'(,0232110147:=@CEGIKMT]_]\ZYWVTSQOJD?80)  1=:57:<@BEGFFGIKLMMNNOPVbigc`]ZWTK>1" !+-,)$%*.24433247:=@BDFHJLS\b`^][ZXWUTRMGB<5,% ''54369;>ADFHIIJKLMMNNOOU`kmifb_\YQD8*(,+&!#(+/35"47:=?ACEHJLR\cca`^\[ZXWUPJE?91(!% #02358:=@CEHJKLLMNNOOU_jqnkhea_XK?2#  %,,(#!%)-04667:=?ACEGIKQ[cfdca`^][ZXSMHB=5,$$ +11479@BDGIKQZcigedba_^\[VPKE@90(  "*/0358;@JLLMMNOOS]gsyvrolieYM?2$ (+,'" $(,049<>@BDFHJPYbjjhgedba_^YSNHC<4,$!+./24;FLLMMNNOR\gq{{xuqnkaSF9,$+,)$"&)-7;=?ACFHJOXajmkjhgedb`\VQKF@80'  *,.6AKLLMNNOQ[fp{}zwsphZM@4%  )*,'! #&2;=?ACEGINW`ionlkihfec_YTNIC<5,#")1;HLLMMNNQZeoz|yvnaTG;,%*,(# +:<>@BDFHMW_hpqonlkihfb\WQLF@80(!-6CLLMMNNPYcnx~{uh[NA4&')2**+,,*% $7<=?ADFHLV^gptrqonlkie`ZTOIC<4,#  (1@CEGKT\fnwxvusrpoke`ZUOID;4," 4?KMMNNOVaku}pbVI=.B-0123455689840-(%!  #8<>@BDFJS\emw{yxvusrnhc]XRLG@70& ;GMNNU`jtvi]PC6' E056789::;<<952.*&" 3<=?BDEIR[dmu}|{ywvtqkf`[UOJD<3+  !DLMMNNT_is~}pdWJ=0H06;<==>?@A>:63/*'#);=?ACEHRZclt}~|zywtoic^XRMG@8/$   /KMMNNS^hs}wk^QD7( K06;?ABCDEC?;730,)'$" ! 9=>@BDHQYbks}}|zwrlfa[UPJD<3)  6OMNNR]gq|~qdXK>0N07;@EGHIHD@<9642/-+(&&+4<=@BDGPXajr|~}zuoid^XSMH@7."  EPMNQ\fp{xk_RE8( Q07;@EJMMIFDA?=:8631.//%* -<=?ACGOXair{}xrlga[VPKD;2'IONP[eozrfYK?1U07<@EJOPMLIGEC@><9763)!$ $9=?ACFNW`hqz{uojd^YSNG?7,  !  POPZdoyym_RF9) X17<@EJPQPNLKIHFDB@=8/'& 4=>@BEMV_hpy~xrmga\VQKC<1% !#%$  QPYcnxsfZM@2u 28@BELU^gox{upjd_YTNG?6)  !"#$&((" SXblwzm`TG:) v*283'  !"#$%'(*+,*(#Raku{naTH;' Q-38=AHRYXWUSRPOMKJHB;3,$!-=>@BJS\dmv~ysmhb]WRKC8,   !#$&$ Y_jt~ui[OB2-48=BKU[ZXWUSRQOMKJD<4,#8 $:>?BIR[clu}|vpke`ZUOG=1%  !!  8W^is}Ž|naSE5.48=DNW]\ZXWUTRPOMKE=5-#34>?AHQZckt}ysnhc]XRLA5*  GT]gr|yj\M?/ .49>GPZ_]\ZYWVTRPOLF>6-$--=>@GPYbjs||vqkf`[UOF:/#  JR]gr}ŻqcTE9( .49@JS\a_^\ZYWUTRPMF?6-$' %:>@GOXair{ztnic^XRK?3',LT_ityj\M?5 .4:CLU_ca_^\ZYWUSQNG@7-%%5>?FNX`irz}wqlfa[UND8,  CLU^foxzuojd^YRG;/# :HR\gr|yj\M?830;DMW`hjhfdba_][YXSJ@7.$.=CKT]enw~xrmga\UJ=0"BIT^it~rcUF:6/3>GPYbkkihfdb`^][YSJ@7/% %:BJS\dmvztmga[TH:,'DKV`kvyk\N?85* 5@IR[emmkihfdb`^\ZTKA81$5AIS[dmu~}wpjd]WQD7) 6DMXbmxrdUF;63$8CLU^hooljhfdb`^[ZULC92%0AIR[clu~zsmf`ZUOA3& =EOZdozzk]N@9508CLU^gnnkigeca_]ZXVND;2'$2AJS\dnv}vpjc]VSK>0"$?GQ\gq|rdUF<73,5@JS\dlmjhfdb`^[YWVOF=3,%5BKT]enwysmf`YTQH:-1?IS^is~zk]N@:52' 0>HPYbjligeb`^\ZXVUQG>5,$$ !7CLU]fox|vpic\VROE7)9AKU`kusdVG=840!$:ENW_gjhfda_][YWUTQI?6-'% #9DLV^gpyyslf`YSQMA4& !:BMWblwzl]NA;62-8CKU]dggeca^\ZXVUSQJA8/' $&;EMV_hqz|voic\VQOK>1# -;DNYdnysdVG>950)5@IR[befdb_][YWUTRQLB90*##)HS]hrwz|sdVG>:51-A$:DMV\_cb`][YWUTRQOMF<4-'.?GPYbjt|xrke_XRPMKB4' .6@JU_jrtvy{~{l]NB<83/*A8BKTZ]`a^\ZXVTSQPNMG>5.("0@HQZckt}{uohb[UPNLI?1# #.8BLWbknpsvx{~teVG?:61-&A4?IQWZ]_][YWUSRPOMLH?7/)"2AIR[clu~xqke_XROLJG<.  '/:DNYchkmpsuw{zl]NB=94/+"A/950,&?6AJORUYZXVTRQONLKIHD<4,%$8CLT]fox|ztnhaZTOMKHF?1$ 867?JTY\^acfiknpfWHA<73.*# ?0>HLOSVYWUSQPNMKJHFC=6-& ':DLU^gpwz}~wqjd^WQNKIGE<.  ><;<ALTVY[^`cehkk^OD?:51,(>$;EIMPSVVSRPOMLJHFD@;6/' );DMV_hpux{~ztngaZTOLJGEC9+  BAABDMPSUXZ]_beheWHA=83/*&>9CGJMQTURQPNLJHFDB>94/( +6?DGKNQSRPNLJHFDB@<72-(! .=FOXaimqtwz~ztmg`ZTNLIGEC?2$(EABCDEFGHJLOQTVY\^aXIB>950+& =0=AEHKORQNLJHFDB@>:50+%  0>GPXbhkorux|}wpjc]WPMJHFCA<83.(# 2?HQZbfimpsvzzsmf`YSMKIGDB@9+  2DABCDEFFGHIJMPRUXVJC>:50+'"<7<:50+&! 4@HRZadgjnqtxvpic]VPLJHEC@>6( 3EABCDEFFGHIJLORUPFA<83/*% <39=@CFJLJGDB@><:83.)$ !6AIS[_behlorvslf_YSMJHFCA?<3% 3DABCDEFGGHI LOQJC?:61-("<-6:=@DGJIFC@><:961,'" $7BJTZ]`cfjmpspic\VOKIGDB@>;/! 6CABCDEEFGHI KMGB=84/+%;!27:>ADHHEB?<:974/*%&9BLTW[^adhknqmf_YRMJHECA><9,  =DABBCDEFGHIEA<73-(!:.48;>AEGDA>;9752-' (;CLRVY\_bfilnib\UOKIFDB?=;6)  8CABCDEF EC@<961,':*158<93% /9;>?@A B@>:730,(C.269<@CB?<9631-)('%$"! -=EKNQTX[^adhhb[UNJHFCA?<:80"  ,059:;< =<;852.*&"9+/369=@B?<9630/.-,*)(&%#/>EILORVY\_cfe^XRKIFDB?=;86-(.35567 8898630,)$  (-037:=@>;852//0$.-+*(1>DGJMPTWZ]adb[TNJGEC@><974)!+023 441.*'$ 8 *.147;>=:741./0012321/-4>BEHKNRUX[_b^XQKHFDA?=:862& (-./ .,)%" $+.158;<9630./00123436<:753- #%&&$" 5 ',/269841../01123445678;>BEHKORUYZTMHFDB?=:8631*  4(-/36630../01123445689:<@CFIMPSWWQJGEB@>;97420&  2(-0453/../01123456789:;>ADGKNQUTMHECA?<:8531.$ ).142.&/0112345679:;<=?BEILOSQJGDB?=;9642/,!  *.11.%/0123456789:;<=>@CGJMPMHEC@><97520.)-!*/0-../012345679:;<=>?@ADHKNJFDA?=:8631/,%+"*/-./0123456789:;<=>?@ACEIKGDB@=;9642/,))"+-./0123467899;<=>?@ABCDGHECA><:7530-*(#+-./01245678:;<=>?@ABCDFFDB@=;8641.)%%)*+,./01345679:;<=?@ABB@>=;97541,##$&()*+,./01245678:;<;:875320.,)! #$%&'(*+,-.0124566421/-,*)&# !"#%&'()+,-/00.,+)'&$"  !"$%&')**(&%#!  !"$$"!      t8mk@fǏux Rx ⲕp ax 䲕p x 䲕p x 䲕p u 䲕p Ɏ uɎ DžɎ Ʌ̓ <긧      ko o o o oo 0o 0x 0o xo xk ɏ관ɎAuoɏ 5ɎupɏpufpɅɎ Ɏ ɎɎ u ɏɎ fǎgkkiki/macosx/kiki.pbproj/0000777000000000000000000000000010336064544014230 5ustar rootrootkiki/macosx/kiki.pbproj/CVS/0000777000000000000000000000000010336064533014661 5ustar rootrootkiki/macosx/kiki.pbproj/CVS/Entries0000666000000000000000000000006410313727046016215 0ustar rootroot/project.pbxproj/1.3/Sun Apr 13 18:27:43 2003// D kiki/macosx/kiki.pbproj/CVS/Entries.Extra0000666000000000000000000000003210313727046017272 0ustar rootroot/project.pbxproj////*/// kiki/macosx/kiki.pbproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727045020001 0ustar rootrootkiki/macosx/kiki.pbproj/CVS/Entries.Old0000666000000000000000000000000010313727045016717 0ustar rootrootkiki/macosx/kiki.pbproj/CVS/Repository0000666000000000000000000000003110313727045016754 0ustar rootrootkiki/macosx/kiki.pbproj kiki/macosx/kiki.pbproj/CVS/Root0000666000000000000000000000006410313727045015526 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/kiki.pbproj/project.pbxproj0000666000000000000000000017756407646326037017340 0ustar rootroot// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 38; objects = { 089C165CFE840E0CC02AAC07 = { children = ( 089C165DFE840E0CC02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; }; 089C165DFE840E0CC02AAC07 = { fileEncoding = 10; isa = PBXFileReference; name = English; path = English.lproj/InfoPlist.strings; refType = 4; }; 089C165EFE840E0CC02AAC07 = { fileRef = 089C165CFE840E0CC02AAC07; isa = PBXBuildFile; settings = { }; }; //080 //081 //082 //083 //084 //100 //101 //102 //103 //104 1058C7A1FEA54F0111CA2CBB = { isa = PBXFrameworkReference; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; refType = 0; }; //100 //101 //102 //103 //104 //170 //171 //172 //173 //174 17587328FF379C6511CA2CBB = { isa = PBXApplicationReference; path = kiki.app; refType = 3; }; //170 //171 //172 //173 //174 //190 //191 //192 //193 //194 19C28FACFE9D520D11CA2CBB = { children = ( 17587328FF379C6511CA2CBB, ); isa = PBXGroup; name = Products; refType = 4; }; //190 //191 //192 //193 //194 //290 //291 //292 //293 //294 29B97313FDCFA39411CA2CEA = { buildStyles = ( F511262903598A34010C7980, 4A9504CDFFE6A4B311CA0CBA, ); hasScannedForEncodings = 1; isa = PBXProject; knownRegions = ( English, Japanese, French, German, Portuguese, Dutch, Nederlands, Svenska, Spanish, Swedish, ); mainGroup = 29B97314FDCFA39411CA2CEA; projectDirPath = ""; targets = ( 29B97326FDCFA39411CA2CEA, ); }; 29B97314FDCFA39411CA2CEA = { children = ( ADABD91A0436726D00A80108, 19C28FACFE9D520D11CA2CBB, 29B97317FDCFA39411CA2CEA, 29B97323FDCFA39411CA2CEA, F5278977034B082401946AF1, F5278814034B07AC01946AF1, F506DB85034BC69C01466274, ); isa = PBXGroup; name = "SDL App"; path = ""; refType = 4; }; 29B97317FDCFA39411CA2CEA = { children = ( C3F210E70443B56100A8013F, 089C165CFE840E0CC02AAC07, F5FB992303A27C1D0173325C, C39E98240435D4A600A8013F, C39E989C0435D71400A8013F, F518061C034BDCA4018AA3FF, F5180614034BD520018AA3FF, F5180615034BD520018AA3FF, C39E99F50435E01800A8013F, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; }; 29B97323FDCFA39411CA2CEA = { children = ( 1058C7A1FEA54F0111CA2CBB, F52536F302DE558A01694C0A, F5F25C95031A76C6014E1008, C34A749D042D057500A8013F, C340CF4404472CD100A8013F, ); isa = PBXGroup; name = Frameworks; path = ""; refType = 4; }; 29B97326FDCFA39411CA2CEA = { buildPhases = ( F5F01DA4032A878701C74C01, 29B97327FDCFA39411CA2CEA, 29B97328FDCFA39411CA2CEA, 29B9732BFDCFA39411CA2CEA, 29B9732DFDCFA39411CA2CEA, F5278C9B034B1B5601946AF1, F56FCAA4035A2F3801826FD4, ); buildSettings = { CURRENT_PROJECT_VERSION = 1; DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "\"$(USER_LIBRARY_DIR)/Frameworks\" /tmp/kodilib /Users/kodi/Projects/Python/PythonMinimal/Mac/OSX/Python/build"; HEADER_SEARCH_PATHS = "\"$(USER_LIBRARY_DIR)/Frameworks/SDL.framework/Versions/A/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL.framework/Versions/A/Headers\" \"$(USER_LIBRARY_DIR)/Frameworks/SDL_mixer.framework/Versions/A/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL_mixer.framework/Versions/A/Headers\" \"$(USER_LIBRARY_DIR)/Frameworks/Python.framework/Versions/2.3/include/python2.3\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/Python.framework/Versions/2.3/include/python2.3\" /usr/include/python2.2 /tmp/kodilib/kodilib.framework/Versions/A/Headers"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = "/Users/kodi/Projects/Python/Python-2.2.1 /Users/kodi/Desktop"; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-Wno-long-double"; OTHER_LDFLAGS = "-framework SDL -framework SDL_image -framework SDL_mixer"; PREBINDING = NO; PRODUCT_NAME = kiki; VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; dependencies = ( ); isa = PBXApplicationTarget; name = kiki; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; productReference = 17587328FF379C6511CA2CBB; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions py CFBundleTypeIconFile icns/kiki03.icns CFBundleTypeName kiki python source CFBundleTypeRole Viewer CFBundleTypeExtensions rec CFBundleTypeIconFile kiki02.icns CFBundleTypeName kiki record file CFBundleTypeRole None CFBundleExecutable kiki CFBundleGetInfoString kiki 0.9.0 CFBundleIconFile kiki.icns CFBundleIdentifier com.mulle-kybernetik.kodi.kiki CFBundleInfoDictionaryVersion 6.0 CFBundleName kiki CFBundlePackageType APPL CFBundleShortVersionString 0.9.0 CFBundleSignature KODI CFBundleURLTypes CFBundleVersion 0.9.0 NSMainNibFile SDLMain NSPrincipalClass NSApplication "; }; 29B97327FDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( F527899F034B082401946AF1, F5FB4873035B96AC0158EDEC, F506DC0D034BC69C01466274, F506DC0F034BC69C01466274, F506DC11034BC69C01466274, F506DC13034BC69C01466274, F5FB486F035B95DF0158EDEC, F506DC16034BC69C01466274, F506DC18034BC69C01466274, F506DC1A034BC69C01466274, F5FB486D035B95890158EDEC, F5FBB3760361B11F01BB7558, F5FC32C6035A76B201B41E69, F506DC03034BC69C01466274, F506DBD6034BC69C01466274, F5F2340C034CB96A01FA59B7, F506DBD7034BC69C01466274, F506DBD9034BC69C01466274, F506DBDA034BC69C01466274, F506DBDB034BC69C01466274, F506DBDD034BC69C01466274, F5FB4871035B96160158EDEC, F506DBDE034BC69C01466274, F51126360359AE03010C7980, F506DBE0034BC69C01466274, F56FCAA3035A1D9D01826FD4, F506DBE1034BC69C01466274, F506DBE3034BC69C01466274, F506DBE5034BC69C01466274, F506DBE7034BC69C01466274, F59BC75103709F6D0127FD9F, F5FD1FE00372132D01877D93, F506DBE9034BC69C01466274, F506DBEB034BC69C01466274, F506DBED034BC69C01466274, F5076A190379CD41017C22A3, F5076A1D0379DB92017C22A3, F5FDCCE0038174C201EBDB6F, F506DBEF034BC69C01466274, F506DBF3034BC69C01466274, F506DBF5034BC69C01466274, F511262F03599514010C7980, F56FCA9D035A1AD301826FD4, F5FC30BB03553CB801AA2931, F5AF8FE80350D14401296EDB, F506DBF7034BC69C01466274, F506DBF9034BC69C01466274, F506DBFB034BC69C01466274, F506DBFD034BC69C01466274, F506DBFF034BC69C01466274, F506DC01034BC69C01466274, F506DC05034BC69C01466274, F506DC07034BC69C01466274, F506DC09034BC69C01466274, F506DC0B034BC69C01466274, F5FC32C2035A664B01B41E69, F504A5E1035CE1C301FE4D31, F5FEF600035E170C0153D82D, F5FEF601035E170C0153D82D, F5FEF603035E172C0153D82D, F523424F035F18D901CE571F, F5FC32C8035A8B5901B41E69, F504A5D8035CD2A101FE4D31, F504A5D9035CD2A101FE4D31, F5FB4864035B8A7A0158EDEC, F5FB4869035B8AD20158EDEC, F5FEF5F0035D92230153D82D, F5FEF5FD035DF7020153D82D, F523424D035EFFEC01CE571F, F5FCEAC203675B50014B6121, F5FB992203A277980173325C, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 29B97328FDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( 089C165EFE840E0CC02AAC07, F5180617034BD520018AA3FF, F5180618034BD520018AA3FF, F518061D034BDCA4018AA3FF, F5FB992503A27C1D0173325C, C39E983F0435D4A600A8013F, C39E98BE0435D71400A8013F, C39E99F60435E01800A8013F, C3F210E90443B56100A8013F, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 29B9732BFDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( F5FBB3750361B11F01BB7558, F5F2340B034CB96A01FA59B7, F506DBD5034BC69C01466274, F506DBD8034BC69C01466274, F506DBDC034BC69C01466274, F5FC32C5035A76B201B41E69, F506DC02034BC69C01466274, F506DBDF034BC69C01466274, F56FCAA2035A1D9D01826FD4, F506DBE2034BC69C01466274, F506DBE4034BC69C01466274, F506DBE6034BC69C01466274, F59BC75003709F6D0127FD9F, F5FD1FDF0372132D01877D93, F506DBE8034BC69C01466274, F506DBEA034BC69C01466274, F506DBEC034BC69C01466274, F5076A1C0379DB92017C22A3, F5076A180379CD41017C22A3, F506DBEE034BC69C01466274, F506DBF0034BC69C01466274, F506DBF2034BC69C01466274, F506DBF4034BC69C01466274, F5FC30BA03553CB801AA2931, F511262E03599514010C7980, F56FCA9C035A1AD301826FD4, F506DBF6034BC69C01466274, F506DBF8034BC69C01466274, F506DBFA034BC69C01466274, F506DBFC034BC69C01466274, F506DBFE034BC69C01466274, F506DC00034BC69C01466274, F506DC04034BC69C01466274, F506DC06034BC69C01466274, F506DC08034BC69C01466274, F506DC0A034BC69C01466274, F5AF8FE70350D14401296EDB, F5FC32C1035A664B01B41E69, F5FB4863035B8A7A0158EDEC, F5FB4868035B8AD20158EDEC, F5FEF5EF035D92230153D82D, F5FEF5FC035DF7020153D82D, F523424C035EFFEC01CE571F, F5FCEAC103675B50014B6121, F506DC17034BC69C01466274, F506DC19034BC69C01466274, F506DC15034BC69C01466274, F506DC0C034BC69C01466274, F506DC0E034BC69C01466274, F506DC10034BC69C01466274, F506DC12034BC69C01466274, F506DC14034BC69C01466274, F527899E034B082401946AF1, F5FB992103A277980173325C, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 29B9732DFDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( F54686E1034498A50118BD89, F525370402DE558A01694C0A, F5F25CB1031A76C6014E1008, C34A749E042D057500A8013F, C340CF4504472CD100A8013F, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; //290 //291 //292 //293 //294 //4A0 //4A1 //4A2 //4A3 //4A4 4A9504CDFFE6A4B311CA0CBA = { buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; DEPLOYMENT_LOCATION = YES; DEPLOYMENT_POSTPROCESSING = YES; DSTROOT = /; INSTALL_MODE_FLAG = "ug+w,o-w,o+rX"; OPTIMIZATION_CFLAGS = "-O2"; }; isa = PBXBuildStyle; name = Deployment; }; //4A0 //4A1 //4A2 //4A3 //4A4 //AD0 //AD1 //AD2 //AD3 //AD4 ADABD91A0436726D00A80108 = { children = ( ADABD91B0436728400A80108, C3CBACDB0440774900A8013F, C3CBACDC0440774900A8013F, C3CBACDA0440773400A8013F, C3CBACDD044079EB00A8013F, C3CBACE004407DA400A8013F, ); isa = PBXGroup; name = README; refType = 4; }; ADABD91B0436728400A80108 = { isa = PBXFileReference; path = BUILD.rtf; refType = 4; }; //AD0 //AD1 //AD2 //AD3 //AD4 //C30 //C31 //C32 //C33 //C34 C340CF4404472CD100A8013F = { isa = PBXFrameworkReference; name = Python.framework; path = /Users/kodi/Projects/Python/PythonMinimal/Mac/OSX/Python/build/Python.framework; refType = 0; }; C340CF4504472CD100A8013F = { fileRef = C340CF4404472CD100A8013F; isa = PBXBuildFile; settings = { }; }; C340CF4B04472CD800A8013F = { fileRef = C340CF4404472CD100A8013F; isa = PBXBuildFile; settings = { }; }; C34A749D042D057500A8013F = { isa = PBXFrameworkReference; name = kodilib.framework; path = /tmp/kodilib/kodilib.framework; refType = 0; }; C34A749E042D057500A8013F = { fileRef = C34A749D042D057500A8013F; isa = PBXBuildFile; settings = { }; }; C34A74A1042D05A400A8013F = { fileRef = C34A749D042D057500A8013F; isa = PBXBuildFile; settings = { }; }; C396AF6B043F1E9F008FA9E9 = { fileEncoding = 4; isa = PBXFileReference; path = kiki.hsc; refType = 4; }; C39E98240435D4A600A8013F = { includeInIndex = 1; isa = PBXFolderReference; name = py; path = ../py; refType = 2; }; C39E983F0435D4A600A8013F = { fileRef = C39E98240435D4A600A8013F; isa = PBXBuildFile; settings = { }; }; C39E989C0435D71400A8013F = { includeInIndex = 1; isa = PBXFolderReference; name = sounds; path = ../sounds; refType = 2; }; C39E98BE0435D71400A8013F = { fileRef = C39E989C0435D71400A8013F; isa = PBXBuildFile; settings = { }; }; C39E99F50435E01800A8013F = { isa = PBXFileReference; name = main_title.jpg; path = ../html/images/main_title.jpg; refType = 2; }; C39E99F60435E01800A8013F = { fileRef = C39E99F50435E01800A8013F; isa = PBXBuildFile; settings = { }; }; C3B65980042E13BE00A8013F = { isa = PBXFileReference; name = Spanish; path = Spanish.lproj/Localizable.strings; refType = 2; }; C3CBACDA0440773400A8013F = { isa = PBXFileReference; name = Readme.rtf; path = /Users/kodi/Projects/kiki/Readme.rtf; refType = 0; }; C3CBACDB0440774900A8013F = { fileEncoding = 30; isa = PBXFileReference; name = Thanks.txt; path = /Users/kodi/Projects/kiki/Thanks.txt; refType = 0; }; C3CBACDC0440774900A8013F = { fileEncoding = 30; isa = PBXFileReference; name = "uDevGame Readme.txt"; path = "/Users/kodi/Projects/kiki/uDevGame Readme.txt"; refType = 0; }; C3CBACDD044079EB00A8013F = { fileEncoding = 30; isa = PBXFileReference; name = Readme.txt; path = /Users/kodi/Projects/kiki/Readme.txt; refType = 0; }; C3CBACE004407DA400A8013F = { fileEncoding = 30; isa = PBXFileReference; name = Readme.txt; path = /Users/kodi/Projects/kiki/linux/Readme.txt; refType = 0; }; C3CC523A042E15CF00A8013F = { isa = PBXFileReference; name = Dutch; path = Dutch.lproj/Localizable.strings; refType = 2; }; C3CC523E042E15ED00A8013F = { isa = PBXFileReference; name = Swedish; path = Swedish.lproj/Localizable.strings; refType = 2; }; C3F210E70443B56100A8013F = { children = ( C3F210E80443B56100A8013F, ); isa = PBXVariantGroup; name = SDLMain.nib; path = ""; refType = 4; }; C3F210E80443B56100A8013F = { isa = PBXFileReference; name = English; path = English.lproj/SDLMain.nib; refType = 4; }; C3F210E90443B56100A8013F = { fileRef = C3F210E70443B56100A8013F; isa = PBXBuildFile; settings = { }; }; //C30 //C31 //C32 //C33 //C34 //F50 //F51 //F52 //F53 //F54 F504A5D6035CD2A101FE4D31 = { fileEncoding = 30; isa = PBXFileReference; name = cylinder.h; path = ../src/items/cylinder.h; refType = 4; }; F504A5D7035CD2A101FE4D31 = { fileEncoding = 30; isa = PBXFileReference; name = gear.h; path = ../src/items/gear.h; refType = 4; }; F504A5D8035CD2A101FE4D31 = { fileRef = F504A5D6035CD2A101FE4D31; isa = PBXBuildFile; settings = { }; }; F504A5D9035CD2A101FE4D31 = { fileRef = F504A5D7035CD2A101FE4D31; isa = PBXBuildFile; settings = { }; }; F504A5E0035CE1C301FE4D31 = { fileEncoding = 30; isa = PBXFileReference; name = KikiItems.h; path = ../src/items/KikiItems.h; refType = 4; }; F504A5E1035CE1C301FE4D31 = { fileRef = F504A5E0035CE1C301FE4D31; isa = PBXBuildFile; settings = { }; }; F504A5E6035CEC0801FE4D31 = { children = ( F506DBA0034BC69C01466274, F506DB9E034BC69C01466274, F506DBAA034BC69C01466274, F506DBA8034BC69C01466274, F5FDCCDF038174C201EBDB6F, F506DBA4034BC69C01466274, F506DBA2034BC69C01466274, F5076A170379CD41017C22A3, F5076A1B0379DB92017C22A3, ); isa = PBXGroup; name = headers; refType = 4; }; F506AEAA0353BB1401E262B6 = { children = ( F5FB4870035B96160158EDEC, F51126350359AE03010C7980, F506DB92034BC69C01466274, F506DB94034BC69C01466274, F56FCAA1035A1D9D01826FD4, F506DB95034BC69C01466274, F506DB97034BC69C01466274, F506DB9B034BC69C01466274, F506DB99034BC69C01466274, F59BC74F03709F6D0127FD9F, F5FD1FDE0372132D01877D93, ); isa = PBXGroup; name = headers; refType = 4; }; F506AEAB0353C00701E262B6 = { children = ( F5FB486C035B95890158EDEC, F506DB8E034BC69C01466274, F506DB8A034BC69C01466274, F506DB8D034BC69C01466274, F5FC32C4035A76B201B41E69, F506DBB9034BC69C01466274, F506DB89034BC69C01466274, F506DB90034BC69C01466274, F506DB8C034BC69C01466274, F5F2340A034CB96A01FA59B7, F5FBB3740361B11F01BB7558, ); isa = PBXGroup; name = headers; refType = 4; }; F506DB85034BC69C01466274 = { children = ( F506DBC2034BC69C01466274, F506DB9C034BC69C01466274, F506DBCC034BC69C01466274, F506DBCF034BC69C01466274, F506DB87034BC69C01466274, F506DBAB034BC69C01466274, F506DB91034BC69C01466274, ); isa = PBXGroup; name = src; path = ../src; refType = 4; }; F506DB87034BC69C01466274 = { children = ( F506AEAB0353C00701E262B6, F506DB88034BC69C01466274, F506DB8F034BC69C01466274, F506DB8B034BC69C01466274, F5F23409034CB96A01FA59B7, F5FC32C3035A76B201B41E69, F506DBB8034BC69C01466274, F5FBB3730361B11F01BB7558, ); isa = PBXGroup; path = base; refType = 4; }; F506DB88034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiAction.cpp; refType = 4; }; F506DB89034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiAction.h; refType = 4; }; F506DB8A034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiColorObject.h; refType = 4; }; F506DB8B034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiEvent.cpp; refType = 4; }; F506DB8C034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiEvent.h; refType = 4; }; F506DB8D034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiObjectHeader.h; refType = 4; }; F506DB8E034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPos.h; refType = 4; }; F506DB8F034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPyAction.cpp; refType = 4; }; F506DB90034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPyAction.h; refType = 4; }; F506DB91034BC69C01466274 = { children = ( F506AEAA0353BB1401E262B6, F506DB93034BC69C01466274, F56FCAA0035A1D9D01826FD4, F506DB96034BC69C01466274, F506DB9A034BC69C01466274, F506DB98034BC69C01466274, F59BC74E03709F6D0127FD9F, F5FD1FDD0372132D01877D93, ); isa = PBXGroup; name = bots; path = ../src/bots; refType = 4; }; F506DB92034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = body.h; refType = 4; }; F506DB93034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBot.cpp; refType = 4; }; F506DB94034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBot.h; refType = 4; }; F506DB95034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBotStatus.h; refType = 4; }; F506DB96034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiMutant.cpp; refType = 4; }; F506DB97034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiMutant.h; refType = 4; }; F506DB98034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPlayer.cpp; refType = 4; }; F506DB99034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPlayer.h; refType = 4; }; F506DB9A034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiStatusDisplay.cpp; refType = 4; }; F506DB9B034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiStatusDisplay.h; refType = 4; }; F506DB9C034BC69C01466274 = { children = ( F504A5E6035CEC0801FE4D31, F506DB9F034BC69C01466274, F506DB9D034BC69C01466274, F506DBA9034BC69C01466274, F506DBA7034BC69C01466274, F506DBA5034BC69C01466274, F506DBA3034BC69C01466274, F506DBA1034BC69C01466274, F5076A160379CD41017C22A3, F5076A1A0379DB92017C22A3, ); isa = PBXGroup; path = gui; refType = 4; }; F506DB9D034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiCharacter.cpp; refType = 4; }; F506DB9E034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiCharacter.h; refType = 4; }; F506DB9F034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiGUI.cpp; refType = 4; }; F506DBA0034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiGUI.h; refType = 4; }; F506DBA1034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiMenu.cpp; refType = 4; }; F506DBA2034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiMenu.h; refType = 4; }; F506DBA3034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPageText.cpp; refType = 4; }; F506DBA4034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPageText.h; refType = 4; }; F506DBA5034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiScreenText.cpp; refType = 4; }; F506DBA7034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiText.cpp; refType = 4; }; F506DBA8034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiText.h; refType = 4; }; F506DBA9034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiTextLine.cpp; refType = 4; }; F506DBAA034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiTextLine.h; refType = 4; }; F506DBAB034BC69C01466274 = { children = ( F506DC1B034BC73B01466274, F5FC30B803553CB801AA2931, F56FCA9A035A1AD301826FD4, F506DBB6034BC69C01466274, F506DBAC034BC69C01466274, F506DBAE034BC69C01466274, F5AF8FE50350D14401296EDB, F506DBB0034BC69C01466274, F511262C03599514010C7980, F506DBBE034BC69C01466274, F506DBB2034BC69C01466274, F506DBB4034BC69C01466274, F506DBBA034BC69C01466274, F506DBBC034BC69C01466274, F506DBC0034BC69C01466274, F5FC32BF035A664B01B41E69, F5FCEABF03675B50014B6121, F5FB4866035B8AD20158EDEC, F5FB485D035B8A7A0158EDEC, F5FEF5ED035D92230153D82D, F5FEF5FA035DF7020153D82D, F523424A035EFFEC01CE571F, ); isa = PBXGroup; path = items; refType = 4; }; F506DBAC034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiAtom.cpp; refType = 4; }; F506DBAD034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiAtom.h; path = ../src/items/KikiAtom.h; refType = 4; }; F506DBAE034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBullet.cpp; refType = 4; }; F506DBAF034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiBullet.h; path = ../src/items/KikiBullet.h; refType = 4; }; F506DBB0034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiCellText.cpp; refType = 4; }; F506DBB1034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiCellText.h; path = ../src/items/KikiCellText.h; refType = 4; }; F506DBB2034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiGate.cpp; refType = 4; }; F506DBB3034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiGate.h; path = ../src/items/KikiGate.h; refType = 4; }; F506DBB4034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiLight.cpp; refType = 4; }; F506DBB5034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiLight.h; path = ../src/items/KikiLight.h; refType = 4; }; F506DBB6034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiNeutron.cpp; refType = 4; }; F506DBB7034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiNeutron.h; path = ../src/items/KikiNeutron.h; refType = 4; }; F506DBB8034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiObject.cpp; refType = 4; }; F506DBB9034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiObject.h; refType = 4; }; F506DBBA034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiSpikes.cpp; refType = 4; }; F506DBBB034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiSpikes.h; path = ../src/items/KikiSpikes.h; refType = 4; }; F506DBBC034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiStone.cpp; refType = 4; }; F506DBBD034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiStone.h; path = ../src/items/KikiStone.h; refType = 4; }; F506DBBE034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiSwitch.cpp; refType = 4; }; F506DBBF034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiSwitch.h; path = ../src/items/KikiSwitch.h; refType = 4; }; F506DBC0034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiWall.cpp; refType = 4; }; F506DBC1034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; name = KikiWall.h; path = ../src/items/KikiWall.h; refType = 4; }; F506DBC2034BC69C01466274 = { children = ( F59036520353A3A201529C15, F506DBC3034BC69C01466274, F506DBC5034BC69C01466274, F506DBC7034BC69C01466274, F506DBCB034BC69C01466274, F506DBC9034BC69C01466274, F5FB991F03A277980173325C, ); isa = PBXGroup; path = main; refType = 4; }; F506DBC3034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiController.cpp; refType = 4; }; F506DBC4034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiController.h; refType = 4; }; F506DBC5034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPython.cpp; refType = 4; }; F506DBC6034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPython.h; refType = 4; }; F506DBC7034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPythonWidget.cpp; refType = 4; }; F506DBC8034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPythonWidget.h; refType = 4; }; F506DBC9034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = main.cpp; refType = 4; }; F506DBCA034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = SDLMain.h; refType = 4; }; F506DBCB034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = SDLMain.m; refType = 4; }; F506DBCC034BC69C01466274 = { children = ( F506DBCE034BC69C01466274, F506DBCD034BC69C01466274, ); isa = PBXGroup; path = sound; refType = 4; }; F506DBCD034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiSound.cpp; refType = 4; }; F506DBCE034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiSound.h; refType = 4; }; F506DBCF034BC69C01466274 = { children = ( F506DBD1034BC69C01466274, F506DBD3034BC69C01466274, F506DBD0034BC69C01466274, F506DBD2034BC69C01466274, ); isa = PBXGroup; path = world; refType = 4; }; F506DBD0034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiCell.cpp; refType = 4; }; F506DBD1034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiCell.h; refType = 4; }; F506DBD2034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiWorld.cpp; refType = 4; }; F506DBD3034BC69C01466274 = { fileEncoding = 30; isa = PBXFileReference; path = KikiWorld.h; refType = 4; }; F506DBD5034BC69C01466274 = { fileRef = F506DB88034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBD6034BC69C01466274 = { fileRef = F506DB89034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBD7034BC69C01466274 = { fileRef = F506DB8A034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBD8034BC69C01466274 = { fileRef = F506DB8B034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBD9034BC69C01466274 = { fileRef = F506DB8C034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBDA034BC69C01466274 = { fileRef = F506DB8D034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBDB034BC69C01466274 = { fileRef = F506DB8E034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBDC034BC69C01466274 = { fileRef = F506DB8F034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBDD034BC69C01466274 = { fileRef = F506DB90034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBDE034BC69C01466274 = { fileRef = F506DB92034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBDF034BC69C01466274 = { fileRef = F506DB93034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE0034BC69C01466274 = { fileRef = F506DB94034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE1034BC69C01466274 = { fileRef = F506DB95034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE2034BC69C01466274 = { fileRef = F506DB96034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE3034BC69C01466274 = { fileRef = F506DB97034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE4034BC69C01466274 = { fileRef = F506DB98034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE5034BC69C01466274 = { fileRef = F506DB99034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE6034BC69C01466274 = { fileRef = F506DB9A034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE7034BC69C01466274 = { fileRef = F506DB9B034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE8034BC69C01466274 = { fileRef = F506DB9D034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBE9034BC69C01466274 = { fileRef = F506DB9E034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBEA034BC69C01466274 = { fileRef = F506DB9F034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBEB034BC69C01466274 = { fileRef = F506DBA0034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBEC034BC69C01466274 = { fileRef = F506DBA1034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBED034BC69C01466274 = { fileRef = F506DBA2034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBEE034BC69C01466274 = { fileRef = F506DBA3034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBEF034BC69C01466274 = { fileRef = F506DBA4034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF0034BC69C01466274 = { fileRef = F506DBA5034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF2034BC69C01466274 = { fileRef = F506DBA7034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF3034BC69C01466274 = { fileRef = F506DBA8034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF4034BC69C01466274 = { fileRef = F506DBA9034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF5034BC69C01466274 = { fileRef = F506DBAA034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF6034BC69C01466274 = { fileRef = F506DBAC034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF7034BC69C01466274 = { fileRef = F506DBAD034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF8034BC69C01466274 = { fileRef = F506DBAE034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBF9034BC69C01466274 = { fileRef = F506DBAF034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBFA034BC69C01466274 = { fileRef = F506DBB0034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBFB034BC69C01466274 = { fileRef = F506DBB1034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBFC034BC69C01466274 = { fileRef = F506DBB2034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBFD034BC69C01466274 = { fileRef = F506DBB3034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBFE034BC69C01466274 = { fileRef = F506DBB4034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DBFF034BC69C01466274 = { fileRef = F506DBB5034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC00034BC69C01466274 = { fileRef = F506DBB6034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC01034BC69C01466274 = { fileRef = F506DBB7034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC02034BC69C01466274 = { fileRef = F506DBB8034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC03034BC69C01466274 = { fileRef = F506DBB9034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC04034BC69C01466274 = { fileRef = F506DBBA034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC05034BC69C01466274 = { fileRef = F506DBBB034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC06034BC69C01466274 = { fileRef = F506DBBC034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC07034BC69C01466274 = { fileRef = F506DBBD034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC08034BC69C01466274 = { fileRef = F506DBBE034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC09034BC69C01466274 = { fileRef = F506DBBF034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC0A034BC69C01466274 = { fileRef = F506DBC0034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC0B034BC69C01466274 = { fileRef = F506DBC1034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC0C034BC69C01466274 = { fileRef = F506DBC3034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC0D034BC69C01466274 = { fileRef = F506DBC4034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC0E034BC69C01466274 = { fileRef = F506DBC5034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC0F034BC69C01466274 = { fileRef = F506DBC6034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC10034BC69C01466274 = { fileRef = F506DBC7034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC11034BC69C01466274 = { fileRef = F506DBC8034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC12034BC69C01466274 = { fileRef = F506DBC9034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC13034BC69C01466274 = { fileRef = F506DBCA034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC14034BC69C01466274 = { fileRef = F506DBCB034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC15034BC69C01466274 = { fileRef = F506DBCD034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC16034BC69C01466274 = { fileRef = F506DBCE034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC17034BC69C01466274 = { fileRef = F506DBD0034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC18034BC69C01466274 = { fileRef = F506DBD1034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC19034BC69C01466274 = { fileRef = F506DBD2034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC1A034BC69C01466274 = { fileRef = F506DBD3034BC69C01466274; isa = PBXBuildFile; settings = { }; }; F506DC1B034BC73B01466274 = { children = ( F504A5E0035CE1C301FE4D31, F5FC32C7035A8B5901B41E69, F5FEF602035E172C0153D82D, F504A5D7035CD2A101FE4D31, F504A5D6035CD2A101FE4D31, F5FEF5FE035E170C0153D82D, F5FEF5FF035E170C0153D82D, F523424E035F18D901CE571F, F5FC30B903553CB801AA2931, F56FCA9B035A1AD301826FD4, F506DBB7034BC69C01466274, F506DBAD034BC69C01466274, F506DBAF034BC69C01466274, F5AF8FE60350D14401296EDB, F506DBB1034BC69C01466274, F506DBB3034BC69C01466274, F506DBB5034BC69C01466274, F506DBBB034BC69C01466274, F506DBBD034BC69C01466274, F506DBBF034BC69C01466274, F506DBC1034BC69C01466274, F511262D03599514010C7980, F5FC32C0035A664B01B41E69, F5FCEAC003675B50014B6121, F5FB485E035B8A7A0158EDEC, F5FB4867035B8AD20158EDEC, F5FEF5EE035D92230153D82D, F5FEF5FB035DF7020153D82D, F523424B035EFFEC01CE571F, ); isa = PBXGroup; name = headers; path = ""; refType = 2; }; F5074717037D7A7501DAA4B8 = { isa = PBXFileReference; path = intro01.rec; refType = 4; }; F5076A160379CD41017C22A3 = { fileEncoding = 30; isa = PBXFileReference; path = KikiScrollMenu.cpp; refType = 4; }; F5076A170379CD41017C22A3 = { fileEncoding = 30; isa = PBXFileReference; path = KikiScrollMenu.h; refType = 4; }; F5076A180379CD41017C22A3 = { fileRef = F5076A160379CD41017C22A3; isa = PBXBuildFile; settings = { }; }; F5076A190379CD41017C22A3 = { fileRef = F5076A170379CD41017C22A3; isa = PBXBuildFile; settings = { }; }; F5076A1A0379DB92017C22A3 = { fileEncoding = 30; isa = PBXFileReference; path = KikiColumnMenu.cpp; refType = 4; }; F5076A1B0379DB92017C22A3 = { fileEncoding = 30; isa = PBXFileReference; path = KikiColumnMenu.h; refType = 4; }; F5076A1C0379DB92017C22A3 = { fileRef = F5076A1A0379DB92017C22A3; isa = PBXBuildFile; settings = { }; }; F5076A1D0379DB92017C22A3 = { fileRef = F5076A1B0379DB92017C22A3; isa = PBXBuildFile; settings = { }; }; F5076A210379F0A0017C22A3 = { isa = PBXFileReference; path = levelselection.py; refType = 4; }; F50987CB037890170158EC73 = { isa = PBXFileReference; path = highscore.py; refType = 4; }; F511262903598A34010C7980 = { buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = YES; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "\U0001-DDEBUG"; }; isa = PBXBuildStyle; name = Development; }; F511262C03599514010C7980 = { fileEncoding = 30; isa = PBXFileReference; path = KikiTest.cpp; refType = 4; }; F511262D03599514010C7980 = { fileEncoding = 30; isa = PBXFileReference; name = KikiTest.h; path = ../src/items/KikiTest.h; refType = 4; }; F511262E03599514010C7980 = { fileRef = F511262C03599514010C7980; isa = PBXBuildFile; settings = { }; }; F511262F03599514010C7980 = { fileRef = F511262D03599514010C7980; isa = PBXBuildFile; settings = { }; }; F51126350359AE03010C7980 = { fileEncoding = 30; isa = PBXFileReference; path = tire.h; refType = 4; }; F51126360359AE03010C7980 = { fileRef = F51126350359AE03010C7980; isa = PBXBuildFile; settings = { }; }; F5180614034BD520018AA3FF = { isa = PBXFileReference; name = kiki02.icns; path = icns/kiki02.icns; refType = 4; }; F5180615034BD520018AA3FF = { isa = PBXFileReference; name = kiki03.icns; path = icns/kiki03.icns; refType = 4; }; F5180617034BD520018AA3FF = { fileRef = F5180614034BD520018AA3FF; isa = PBXBuildFile; settings = { }; }; F5180618034BD520018AA3FF = { fileRef = F5180615034BD520018AA3FF; isa = PBXBuildFile; settings = { }; }; F518061C034BDCA4018AA3FF = { isa = PBXFileReference; path = kiki.icns; refType = 4; }; F518061D034BDCA4018AA3FF = { fileRef = F518061C034BDCA4018AA3FF; isa = PBXBuildFile; settings = { }; }; F523424A035EFFEC01CE571F = { fileEncoding = 30; isa = PBXFileReference; path = KikiGenerator.cpp; refType = 4; }; F523424B035EFFEC01CE571F = { fileEncoding = 30; isa = PBXFileReference; name = KikiGenerator.h; path = ../src/items/KikiGenerator.h; refType = 4; }; F523424C035EFFEC01CE571F = { fileRef = F523424A035EFFEC01CE571F; isa = PBXBuildFile; settings = { }; }; F523424D035EFFEC01CE571F = { fileRef = F523424B035EFFEC01CE571F; isa = PBXBuildFile; settings = { }; }; F523424E035F18D901CE571F = { fileEncoding = 30; isa = PBXFileReference; name = generator.h; path = ../src/items/generator.h; refType = 4; }; F523424F035F18D901CE571F = { fileRef = F523424E035F18D901CE571F; isa = PBXBuildFile; settings = { }; }; F52536F302DE558A01694C0A = { isa = PBXFrameworkReference; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; refType = 0; }; F525370402DE558A01694C0A = { fileRef = F52536F302DE558A01694C0A; isa = PBXBuildFile; settings = { }; }; F5278814034B07AC01946AF1 = { children = ( F5278815034B07AC01946AF1, F5278816034B07AC01946AF1, F5278817034B07AC01946AF1, F5278818034B07AC01946AF1, F5278819034B07AC01946AF1, F527881A034B07AC01946AF1, F527881B034B07AC01946AF1, F527881C034B07AC01946AF1, F5076A210379F0A0017C22A3, F50987CB037890170158EC73, F527881D034B07AC01946AF1, F527881E034B07AC01946AF1, F527881F034B07AC01946AF1, F5F23414034CDF1301FA59B7, F5F2E654034DC14C019CD69A, C396AF6B043F1E9F008FA9E9, F574AA69034E1871016A8FC9, F5074717037D7A7501DAA4B8, F5FE67CB0380058501B6A922, F5FE67CD038009C101B6A922, F5FDCCE40381E6D701EBDB6F, F5FDCCE60381F44A01EBDB6F, ); isa = PBXGroup; name = py; path = ../py; refType = 4; }; F5278815034B07AC01946AF1 = { isa = PBXFileReference; path = action.py; refType = 4; }; F5278816034B07AC01946AF1 = { isa = PBXFileReference; path = buffer.py; refType = 4; }; F5278817034B07AC01946AF1 = { isa = PBXFileReference; path = colors.py; refType = 4; }; F5278818034B07AC01946AF1 = { isa = PBXFileReference; path = edit.py; refType = 4; }; F5278819034B07AC01946AF1 = { isa = PBXFileReference; path = env.py; refType = 4; }; F527881A034B07AC01946AF1 = { isa = PBXFileReference; path = file.py; refType = 4; }; F527881B034B07AC01946AF1 = { isa = PBXFileReference; path = interpreter.py; refType = 4; }; F527881C034B07AC01946AF1 = { isa = PBXFileReference; path = levels.py; refType = 4; }; F527881D034B07AC01946AF1 = { isa = PBXFileReference; path = obj.py; refType = 4; }; F527881E034B07AC01946AF1 = { isa = PBXFileReference; path = setup.py; refType = 4; }; F527881F034B07AC01946AF1 = { isa = PBXFileReference; path = world.py; refType = 4; }; F5278977034B082401946AF1 = { children = ( F5278978034B082401946AF1, F5278979034B082401946AF1, F527897B034B082401946AF1, F527897C034B082401946AF1, F527897E034B082401946AF1, F527897F034B082401946AF1, F5278980034B082401946AF1, F5278981034B082401946AF1, F5278982034B082401946AF1, F5278983034B082401946AF1, F5278984034B082401946AF1, F5278988034B082401946AF1, F5278989034B082401946AF1, F527898A034B082401946AF1, F527898B034B082401946AF1, F527898C034B082401946AF1, F527898D034B082401946AF1, F527898E034B082401946AF1, F527898F034B082401946AF1, F5278985034B082401946AF1, F5278987034B082401946AF1, F5278986034B082401946AF1, F527897A034B082401946AF1, ); isa = PBXGroup; name = SWIG; path = ../SWIG; refType = 4; }; F5278978034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KConsole.i; refType = 4; }; F5278979034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KEventHandler.i; refType = 4; }; F527897A034B082401946AF1 = { isa = PBXFileReference; path = kiki.py; refType = 4; }; F527897B034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiAction.i; refType = 4; }; F527897C034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBot.i; refType = 4; }; F527897E034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiController.i; refType = 4; }; F527897F034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiEvent.i; refType = 4; }; F5278980034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiGUI.i; refType = 4; }; F5278981034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiItems.i; refType = 4; }; F5278982034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiMutant.i; refType = 4; }; F5278983034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiObject.i; refType = 4; }; F5278984034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPlayer.i; refType = 4; }; F5278985034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPy.i; refType = 4; }; F5278986034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPy_wrap.cpp; refType = 4; }; F5278987034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPy_wrap.h; refType = 4; }; F5278988034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPyAction.i; refType = 4; }; F5278989034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPython.i; refType = 4; }; F527898A034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPyTypemaps.i; refType = 4; }; F527898B034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiSound.i; refType = 4; }; F527898C034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiText.i; refType = 4; }; F527898D034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiTypes.i; refType = 4; }; F527898E034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KikiWorld.i; refType = 4; }; F527898F034B082401946AF1 = { fileEncoding = 30; isa = PBXFileReference; path = KWindow.i; refType = 4; }; F527899E034B082401946AF1 = { fileRef = F5278986034B082401946AF1; isa = PBXBuildFile; settings = { }; }; F527899F034B082401946AF1 = { fileRef = F5278987034B082401946AF1; isa = PBXBuildFile; settings = { }; }; F5278C9B034B1B5601946AF1 = { buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( C34A74A1042D05A400A8013F, C340CF4B04472CD800A8013F, ); isa = PBXCopyFilesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F542402903A5937101FD2DA9 = { fileEncoding = 30; isa = PBXFileReference; name = Portuguese; path = Portuguese.lproj/Localizable.strings; refType = 2; }; F54686E1034498A50118BD89 = { fileRef = 1058C7A1FEA54F0111CA2CBB; isa = PBXBuildFile; settings = { }; }; F56FCA9A035A1AD301826FD4 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBillBoard.cpp; refType = 4; }; F56FCA9B035A1AD301826FD4 = { fileEncoding = 30; isa = PBXFileReference; name = KikiBillBoard.h; path = ../src/items/KikiBillBoard.h; refType = 4; }; F56FCA9C035A1AD301826FD4 = { fileRef = F56FCA9A035A1AD301826FD4; isa = PBXBuildFile; settings = { }; }; F56FCA9D035A1AD301826FD4 = { fileRef = F56FCA9B035A1AD301826FD4; isa = PBXBuildFile; settings = { }; }; F56FCAA0035A1D9D01826FD4 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBotFume.cpp; refType = 4; }; F56FCAA1035A1D9D01826FD4 = { fileEncoding = 30; isa = PBXFileReference; path = KikiBotFume.h; refType = 4; }; F56FCAA2035A1D9D01826FD4 = { fileRef = F56FCAA0035A1D9D01826FD4; isa = PBXBuildFile; settings = { }; }; F56FCAA3035A1D9D01826FD4 = { fileRef = F56FCAA1035A1D9D01826FD4; isa = PBXBuildFile; settings = { }; }; F56FCAA4035A2F3801826FD4 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; neededFileNames = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "touch ${DERIVED_SOURCES_DIR}/${TARGET_NAME}_vers.c"; }; F574AA69034E1871016A8FC9 = { isa = PBXFileReference; path = kiki.cfg; refType = 4; }; F59036520353A3A201529C15 = { children = ( F5FB4872035B96AC0158EDEC, F5FB486E035B95DF0158EDEC, F506DBC4034BC69C01466274, F506DBC6034BC69C01466274, F506DBC8034BC69C01466274, F506DBCA034BC69C01466274, F5FB992003A277980173325C, ); isa = PBXGroup; name = headers; refType = 4; }; F59BC74E03709F6D0127FD9F = { fileEncoding = 30; isa = PBXFileReference; path = KikiRecorder.cpp; refType = 4; }; F59BC74F03709F6D0127FD9F = { fileEncoding = 30; isa = PBXFileReference; path = KikiRecorder.h; refType = 4; }; F59BC75003709F6D0127FD9F = { fileRef = F59BC74E03709F6D0127FD9F; isa = PBXBuildFile; settings = { }; }; F59BC75103709F6D0127FD9F = { fileRef = F59BC74F03709F6D0127FD9F; isa = PBXBuildFile; settings = { }; }; F5AF8FE50350D14401296EDB = { fileEncoding = 30; isa = PBXFileReference; path = KikiBomb.cpp; refType = 4; }; F5AF8FE60350D14401296EDB = { fileEncoding = 30; isa = PBXFileReference; name = KikiBomb.h; path = ../src/items/KikiBomb.h; refType = 4; }; F5AF8FE70350D14401296EDB = { fileRef = F5AF8FE50350D14401296EDB; isa = PBXBuildFile; settings = { }; }; F5AF8FE80350D14401296EDB = { fileRef = F5AF8FE60350D14401296EDB; isa = PBXBuildFile; settings = { }; }; F5F01DA4032A878701C74C01 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; neededFileNames = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "cd ../SWIG && swig -c++ -python -globals kiki -o KikiPy_wrap.cpp KikiPy.i && cp kiki.py ../py"; }; F5F23409034CB96A01FA59B7 = { fileEncoding = 30; isa = PBXFileReference; path = KikiActionObject.cpp; refType = 4; }; F5F2340A034CB96A01FA59B7 = { fileEncoding = 30; isa = PBXFileReference; path = KikiActionObject.h; refType = 4; }; F5F2340B034CB96A01FA59B7 = { fileRef = F5F23409034CB96A01FA59B7; isa = PBXBuildFile; settings = { }; }; F5F2340C034CB96A01FA59B7 = { fileRef = F5F2340A034CB96A01FA59B7; isa = PBXBuildFile; settings = { }; }; F5F23414034CDF1301FA59B7 = { isa = PBXFileReference; path = intro.py; refType = 4; }; F5F25C95031A76C6014E1008 = { isa = PBXFrameworkReference; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; refType = 0; }; F5F25CB1031A76C6014E1008 = { fileRef = F5F25C95031A76C6014E1008; isa = PBXBuildFile; settings = { }; }; F5F2E654034DC14C019CD69A = { isa = PBXFileReference; path = config.py; refType = 4; }; F5FB485D035B8A7A0158EDEC = { fileEncoding = 30; isa = PBXFileReference; path = KikiGear.cpp; refType = 4; }; F5FB485E035B8A7A0158EDEC = { fileEncoding = 30; isa = PBXFileReference; name = KikiGear.h; path = ../src/items/KikiGear.h; refType = 4; }; F5FB4863035B8A7A0158EDEC = { fileRef = F5FB485D035B8A7A0158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB4864035B8A7A0158EDEC = { fileRef = F5FB485E035B8A7A0158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB4866035B8AD20158EDEC = { fileEncoding = 30; isa = PBXFileReference; path = KikiValve.cpp; refType = 4; }; F5FB4867035B8AD20158EDEC = { fileEncoding = 30; isa = PBXFileReference; name = KikiValve.h; path = ../src/items/KikiValve.h; refType = 4; }; F5FB4868035B8AD20158EDEC = { fileRef = F5FB4866035B8AD20158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB4869035B8AD20158EDEC = { fileRef = F5FB4867035B8AD20158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB486C035B95890158EDEC = { fileEncoding = 30; isa = PBXFileReference; path = KikiBase.h; refType = 4; }; F5FB486D035B95890158EDEC = { fileRef = F5FB486C035B95890158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB486E035B95DF0158EDEC = { fileEncoding = 30; isa = PBXFileReference; path = KikiMain.h; refType = 4; }; F5FB486F035B95DF0158EDEC = { fileRef = F5FB486E035B95DF0158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB4870035B96160158EDEC = { fileEncoding = 30; isa = PBXFileReference; path = KikiBots.h; refType = 4; }; F5FB4871035B96160158EDEC = { fileRef = F5FB4870035B96160158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB4872035B96AC0158EDEC = { fileEncoding = 30; isa = PBXFileReference; path = Kiki.h; refType = 4; }; F5FB4873035B96AC0158EDEC = { fileRef = F5FB4872035B96AC0158EDEC; isa = PBXBuildFile; settings = { }; }; F5FB991F03A277980173325C = { fileEncoding = 30; isa = PBXFileReference; path = KikiLocalization.m; refType = 4; }; F5FB992003A277980173325C = { fileEncoding = 30; isa = PBXFileReference; path = KikiLocalization.h; refType = 4; }; F5FB992103A277980173325C = { fileRef = F5FB991F03A277980173325C; isa = PBXBuildFile; settings = { }; }; F5FB992203A277980173325C = { fileRef = F5FB992003A277980173325C; isa = PBXBuildFile; settings = { }; }; F5FB992303A27C1D0173325C = { children = ( F5FB992403A27C1D0173325C, F5FB993003A27C9D0173325C, C3CC523A042E15CF00A8013F, F542402903A5937101FD2DA9, C3B65980042E13BE00A8013F, C3CC523E042E15ED00A8013F, ); isa = PBXVariantGroup; name = Localizable.strings; path = ../src/main; refType = 4; }; F5FB992403A27C1D0173325C = { fileEncoding = 30; isa = PBXFileReference; name = English; path = English.lproj/Localizable.strings; refType = 2; }; F5FB992503A27C1D0173325C = { fileRef = F5FB992303A27C1D0173325C; isa = PBXBuildFile; settings = { }; }; F5FB993003A27C9D0173325C = { fileEncoding = 30; isa = PBXFileReference; name = German; path = German.lproj/Localizable.strings; refType = 2; }; F5FBB3730361B11F01BB7558 = { fileEncoding = 30; isa = PBXFileReference; path = KikiTools.cpp; refType = 4; }; F5FBB3740361B11F01BB7558 = { fileEncoding = 30; isa = PBXFileReference; path = KikiTools.h; refType = 4; }; F5FBB3750361B11F01BB7558 = { fileRef = F5FBB3730361B11F01BB7558; isa = PBXBuildFile; settings = { }; }; F5FBB3760361B11F01BB7558 = { fileRef = F5FBB3740361B11F01BB7558; isa = PBXBuildFile; settings = { }; }; F5FC30B803553CB801AA2931 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPushable.cpp; refType = 4; }; F5FC30B903553CB801AA2931 = { fileEncoding = 30; isa = PBXFileReference; name = KikiPushable.h; path = ../src/items/KikiPushable.h; refType = 4; }; F5FC30BA03553CB801AA2931 = { fileRef = F5FC30B803553CB801AA2931; isa = PBXBuildFile; settings = { }; }; F5FC30BB03553CB801AA2931 = { fileRef = F5FC30B903553CB801AA2931; isa = PBXBuildFile; settings = { }; }; F5FC32BF035A664B01B41E69 = { fileEncoding = 30; isa = PBXFileReference; path = KikiWire.cpp; refType = 4; }; F5FC32C0035A664B01B41E69 = { fileEncoding = 30; isa = PBXFileReference; name = KikiWire.h; path = ../src/items/KikiWire.h; refType = 4; }; F5FC32C1035A664B01B41E69 = { fileRef = F5FC32BF035A664B01B41E69; isa = PBXBuildFile; settings = { }; }; F5FC32C2035A664B01B41E69 = { fileRef = F5FC32C0035A664B01B41E69; isa = PBXBuildFile; settings = { }; }; F5FC32C3035A76B201B41E69 = { fileEncoding = 30; isa = PBXFileReference; path = KikiFace.cpp; refType = 4; }; F5FC32C4035A76B201B41E69 = { fileEncoding = 30; isa = PBXFileReference; path = KikiFace.h; refType = 4; }; F5FC32C5035A76B201B41E69 = { fileRef = F5FC32C3035A76B201B41E69; isa = PBXBuildFile; settings = { }; }; F5FC32C6035A76B201B41E69 = { fileRef = F5FC32C4035A76B201B41E69; isa = PBXBuildFile; settings = { }; }; F5FC32C7035A8B5901B41E69 = { fileEncoding = 30; isa = PBXFileReference; name = wire.h; path = ../src/items/wire.h; refType = 4; }; F5FC32C8035A8B5901B41E69 = { fileRef = F5FC32C7035A8B5901B41E69; isa = PBXBuildFile; settings = { }; }; F5FCEABF03675B50014B6121 = { fileEncoding = 30; isa = PBXFileReference; path = KikiWireStone.cpp; refType = 4; }; F5FCEAC003675B50014B6121 = { fileEncoding = 30; isa = PBXFileReference; name = KikiWireStone.h; path = ../src/items/KikiWireStone.h; refType = 4; }; F5FCEAC103675B50014B6121 = { fileRef = F5FCEABF03675B50014B6121; isa = PBXBuildFile; settings = { }; }; F5FCEAC203675B50014B6121 = { fileRef = F5FCEAC003675B50014B6121; isa = PBXBuildFile; settings = { }; }; F5FD1FDD0372132D01877D93 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPlayback.cpp; refType = 4; }; F5FD1FDE0372132D01877D93 = { fileEncoding = 30; isa = PBXFileReference; path = KikiPlayback.h; refType = 4; }; F5FD1FDF0372132D01877D93 = { fileRef = F5FD1FDD0372132D01877D93; isa = PBXBuildFile; settings = { }; }; F5FD1FE00372132D01877D93 = { fileRef = F5FD1FDE0372132D01877D93; isa = PBXBuildFile; settings = { }; }; F5FDCCDF038174C201EBDB6F = { fileEncoding = 30; isa = PBXFileReference; path = KikiScreenText.h; refType = 4; }; F5FDCCE0038174C201EBDB6F = { fileRef = F5FDCCDF038174C201EBDB6F; isa = PBXBuildFile; settings = { }; }; F5FDCCE40381E6D701EBDB6F = { isa = PBXFileReference; path = intro04.rec; refType = 4; }; F5FDCCE60381F44A01EBDB6F = { isa = PBXFileReference; path = intro05.rec; refType = 4; }; F5FE67CB0380058501B6A922 = { isa = PBXFileReference; path = intro02.rec; refType = 4; }; F5FE67CD038009C101B6A922 = { isa = PBXFileReference; path = intro03.rec; refType = 4; }; F5FEF5ED035D92230153D82D = { fileEncoding = 30; isa = PBXFileReference; path = KikiMotorCylinder.cpp; refType = 4; }; F5FEF5EE035D92230153D82D = { fileEncoding = 30; isa = PBXFileReference; name = KikiMotorCylinder.h; path = ../src/items/KikiMotorCylinder.h; refType = 4; }; F5FEF5EF035D92230153D82D = { fileRef = F5FEF5ED035D92230153D82D; isa = PBXBuildFile; settings = { }; }; F5FEF5F0035D92230153D82D = { fileRef = F5FEF5EE035D92230153D82D; isa = PBXBuildFile; settings = { }; }; F5FEF5FA035DF7020153D82D = { fileEncoding = 30; isa = PBXFileReference; path = KikiMotorGear.cpp; refType = 4; }; F5FEF5FB035DF7020153D82D = { fileEncoding = 30; isa = PBXFileReference; name = KikiMotorGear.h; path = ../src/items/KikiMotorGear.h; refType = 4; }; F5FEF5FC035DF7020153D82D = { fileRef = F5FEF5FA035DF7020153D82D; isa = PBXBuildFile; settings = { }; }; F5FEF5FD035DF7020153D82D = { fileRef = F5FEF5FB035DF7020153D82D; isa = PBXBuildFile; settings = { }; }; F5FEF5FE035E170C0153D82D = { fileEncoding = 30; isa = PBXFileReference; name = kolben.h; path = ../src/items/kolben.h; refType = 4; }; F5FEF5FF035E170C0153D82D = { fileEncoding = 30; isa = PBXFileReference; name = motor.h; path = ../src/items/motor.h; refType = 4; }; F5FEF600035E170C0153D82D = { fileRef = F5FEF5FE035E170C0153D82D; isa = PBXBuildFile; settings = { }; }; F5FEF601035E170C0153D82D = { fileRef = F5FEF5FF035E170C0153D82D; isa = PBXBuildFile; settings = { }; }; F5FEF602035E172C0153D82D = { fileEncoding = 30; isa = PBXFileReference; name = valve.h; path = ../src/items/valve.h; refType = 4; }; F5FEF603035E172C0153D82D = { fileRef = F5FEF602035E172C0153D82D; isa = PBXBuildFile; settings = { }; }; }; rootObject = 29B97313FDCFA39411CA2CEA; } kiki/macosx/Portuguese.lproj/0000777000000000000000000000000010336064546015277 5ustar rootrootkiki/macosx/Portuguese.lproj/CVS/0000777000000000000000000000000010336064533015726 5ustar rootrootkiki/macosx/Portuguese.lproj/CVS/Entries0000666000000000000000000000007410313727042017257 0ustar rootroot/Localizable.strings/1.1.1.1/Wed Apr 9 02:56:45 2003// D kiki/macosx/Portuguese.lproj/CVS/Entries.Extra0000666000000000000000000000003610313727042020337 0ustar rootroot/Localizable.strings////*/// kiki/macosx/Portuguese.lproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727042021043 0ustar rootrootkiki/macosx/Portuguese.lproj/CVS/Entries.Old0000666000000000000000000000000010313727042017761 0ustar rootrootkiki/macosx/Portuguese.lproj/CVS/Repository0000666000000000000000000000003610313727042020023 0ustar rootrootkiki/macosx/Portuguese.lproj kiki/macosx/Portuguese.lproj/CVS/Root0000666000000000000000000000006410313727042016570 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/Portuguese.lproj/Localizable.strings0000666000000000000000000001276307644705755021160 0ustar rootroot/* Portuguese (Portugues do Brazil) versions of kiki texts */ /* translation by F.C.Covett */ /* game title */ "kiki the nano bot" = "kiki, o nano-rob"; /* menu */ "new game" = "novo jogo"; "load level" = "carregar nvel"; "next level" = "prximo nvel"; "restart" = "recomear"; "setup" = "configurar"; "story" = "estria"; "demo" = "demo"; "about" = "crditos"; "help" = "ajuda"; "quit" = "sair"; "back" = "voltar"; /* about */ "version" = "verso"; "programmed by" = "desenvolido por"; "sounds from" = "audio por"; "thanks to" = "agradecimentos"; "visit" = "visite"; "for more games" = "para mais jogos"; "main menu" = "menu principal"; /* story */ "STORY_PAGE_1" = "era uma vez,\nhavia\nestes minsculos robs\nvivendo em um mundo nanoscpico.\n\neles viviam felizes em sua vidinha articifial,\nsempre ocupados, coletando matria-prima\npara seu criador,\nque ento fazia mais e mais\nano-robs."; "STORY_PAGE_2" = "mas um dia,\num certo parasita\ndestruiu o programa central\nde controle do criador.\n\ndesde ento, o criado no\nfunciona mais direito\ne s produz\nrobs preguiosos e malucos\nque atiram uns nos outros,\nassim destruindo o mundo nanoscpico."; "STORY_PAGE_3" = " sua misso ajudar kiki,\no nico nano-rob so,\na reparar o criador.\n\nboa sorte!"; /* setup */ "off" = "desligar"; "on" = "ligar"; "sound" = "som"; "volume" = "volume"; "fullscreen" = "tela cheia"; "fov" = "campo de viso"; "speed" = "velocidade"; "keyboard setup" = "configurar teclado"; "save" = "salvar"; /* keyboard setup */ "$no_itemkeyboard setup" = "$no_itemconfigurar teclado"; // don't translate $no_item "$no_item" = "$no_item"; // don't change this "move forward" = "mover frente"; "move backward" = "mover para trs"; "turn left" = "virar esquerda"; "turn right" = "virar direita"; "jump" = "pular"; "push" = "empurrar"; "shoot" = "atirar"; "change view" = "mudar a vista"; "look up" = "olhar para cima"; "look down" = "olhar para baixo"; "press the new key" = "digite a nova tecla"; "action without key" = "indefinido"; "back to setup" = "retornar"; /* help */ "HELP_SPIKES_1" = "$scale(1.5)mission:\ndirija-se saida!\n\nevite os espetos!\nsomente ande sobre eles,\nquando estiverem retrados."; "HELP_GOLD_1" = "$scale(1.5)mission:\ndirija-se saida!\n\npara chegar prxima saida,\nmova as pedras\n\npara mover as pedras,\ndigite \"$key(push)\"+\"$key(move forward)\""; "HELP_JUMP_1" = "$scale(1.5)mission:\ndirija-se saida!\n\npara chegar prxima saida,\nsalte sobre os cubos\n\npara pular,\ndigite \"$key(jump)\""; "HELP_JUMP_2" = "para saltar adiante,\ndigite \"$key(jump)\"+\"$key(move forward)\"\n\nvoc pode virar\nenquanto pula!\n\npara virar,\ndigite \"$key(turn left)\"\nou \"$key(turn right)\""; kiki/macosx/Spanish.lproj/0000777000000000000000000000000010336064546014542 5ustar rootrootkiki/macosx/Spanish.lproj/CVS/0000777000000000000000000000000010336064533015171 5ustar rootrootkiki/macosx/Spanish.lproj/CVS/Entries0000666000000000000000000000007410313727042016522 0ustar rootroot/Localizable.strings/1.1.1.1/Wed Apr 9 02:56:45 2003// D kiki/macosx/Spanish.lproj/CVS/Entries.Extra0000666000000000000000000000003610313727042017602 0ustar rootroot/Localizable.strings////*/// kiki/macosx/Spanish.lproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727042020306 0ustar rootrootkiki/macosx/Spanish.lproj/CVS/Entries.Old0000666000000000000000000000000010313727042017224 0ustar rootrootkiki/macosx/Spanish.lproj/CVS/Repository0000666000000000000000000000003310313727042017263 0ustar rootrootkiki/macosx/Spanish.lproj kiki/macosx/Spanish.lproj/CVS/Root0000666000000000000000000000006410313727042016033 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/Spanish.lproj/Localizable.strings0000666000000000000000000001244507644705755020420 0ustar rootroot/* Spanish (Espaol) versions of kiki texts */ /* translation by jay_traveller */ /* game title */ "kiki the nano bot" = "kiki el nanobot"; /* menu */ "new game" = "juego nuevo"; "load level" = "cargar nivel"; "next level" = "siguiente nivel"; "restart" = "reiniciar"; "setup" = "configuracion"; "story" = "historia"; "demo" = "demo"; "about" = "informacion"; "help" = "ayda"; "quit" = "cerrar"; "back" = "atras"; /* about */ "version" = "version"; "programmed by" = "programacion"; "sounds from" = "sonido"; "thanks to" = "agradecimientos"; "visit" = "visita"; "for more games" = "mas juegos"; "main menu" = "menu principal"; /* story */ "STORY_PAGE_1" = "habia una vez,\nunos\npequeos robots\nviviendo en el nanomundo.\n\nvivian una feliz vida artificial\nrecolectando recursos activamente\npara su creador\nquien hizo mas y mas\npequeos robots."; "STORY_PAGE_2" = "pero un dia,\nun parasito\ndestruyo el programa principal\nde control del creador.\n\ndesde entonces\nel solo produce\ninservibles, flojos y pequeos\nrobots estupidos\nquienes se atacan entre si\ny destruyeron el nanomundo."; "STORY_PAGE_3" = "tu tarea es ayudar a kiki,\nel ultimo robot,\na reparar a su creador.\n\nbuena suerte!"; /* setup */ "off" = "desactivado"; "on" = "activado"; "sound" = "sonido"; "volume" = "volumen"; "fullscreen" = "pantalla completa"; "fov" = "fov"; "speed" = "velocidad"; "keyboard setup" = "configuracion de teclado"; "save" = "guardar"; /* keyboard setup */ "$no_itemkeyboard setup" = "$no_itemconfiguracion de teclado"; // don't translate $no_item "$no_item" = "$no_item"; // don't change this "move forward" = "adelante"; "move backward" = "atras"; "turn left" = "izquierda"; "turn right" = "derecha"; "jump" = "salto"; "push" = "empujar"; "shoot" = "disparo"; "change view" = "cambiar vista"; "look up" = "mirar arriba"; "look down" = "mirar abajo"; "press the new key" = "presiona la nueva tecla"; "action without key" = "accion sin tecla"; "back to setup" = "regresar a configuracion"; /* help */ "HELP_SPIKES_1" = "$scale(1.5)mission:\nllega a la salida!\n\nevita los picos!\ncamina sobre ellos,\nsolo si estan retraidos"; "HELP_GOLD_1" = "$scale(1.5)mission:\nllega a la salida!\n\npara poder salir,\nmueve las rocas\n\npara mover una roca,\npresiona \"$key(push)\"+\"$key(move forward)\""; "HELP_JUMP_1" = "$scale(1.5)mission:\nllega a la salida!\n\npara poder salir,\nsalta sobre los cubos\n\npara saltar,\npresiona \"$key(jump)\""; "HELP_JUMP_2" = "para saltar al frente,\npresiona \"$key(jump)\"+\"$key(move forward)\"\n\npuedes girar\nmientras saltas!\n\npara girar,\npresiona \"$key(turn left)\"\o \"$key(turn right)\""; kiki/macosx/Swedish.lproj/0000777000000000000000000000000010336064546014543 5ustar rootrootkiki/macosx/Swedish.lproj/CVS/0000777000000000000000000000000010336064533015172 5ustar rootrootkiki/macosx/Swedish.lproj/CVS/Entries0000666000000000000000000000007410313727042016523 0ustar rootroot/Localizable.strings/1.1.1.1/Wed Apr 9 02:56:45 2003// D kiki/macosx/Swedish.lproj/CVS/Entries.Extra0000666000000000000000000000003610313727042017603 0ustar rootroot/Localizable.strings////*/// kiki/macosx/Swedish.lproj/CVS/Entries.Extra.Old0000666000000000000000000000000010313727042020307 0ustar rootrootkiki/macosx/Swedish.lproj/CVS/Entries.Old0000666000000000000000000000000010313727042017225 0ustar rootrootkiki/macosx/Swedish.lproj/CVS/Repository0000666000000000000000000000003310313727042017264 0ustar rootrootkiki/macosx/Swedish.lproj kiki/macosx/Swedish.lproj/CVS/Root0000666000000000000000000000006410313727042016034 0ustar rootroot:ext:monsterkodi@cvs.sourceforge.net:/cvsroot/kiki kiki/macosx/Swedish.lproj/Localizable.strings0000666000000000000000000001243507644705755020420 0ustar rootroot/* Swedish versions of kiki texts */ /* translation by Ivan aka Fenris */ /* game title */ "kiki the nano bot" = "Nanoroboten Kiki"; /* menu */ "new game" = "nytt spel"; "load level" = "ladda bana"; "next level" = "nsta bana"; "restart" = "brja om"; "setup" = "instllningar"; "story" = "bakgrundshistoria"; "demo" = "demo"; "about" = "om spelet"; "help" = "hjlp"; "quit" = "avsluta"; "back" = "tillbaka"; /* about */ "version" = "version"; "programmed by" = "skrivet av"; "sounds from" = "ljud frn"; "thanks to" = "tack till"; "visit" = "besk"; "for more games" = "fr fler spel"; "main menu" = "huvudmeny"; /* story */ "STORY_PAGE_1" = "det var en gng\nsm, sm robotar\n\nsom levde i nano-vrlden.\n\nde levde ett lyckligt konstgjort liv,\noch samlade flitigt material\nt skaparen\nsom byggde fler och fler\npyttesm robotar."; "STORY_PAGE_2" = "men en dag\nfrstrde en parasitmakt\nskaparens kontrollprogram.\n\n\nSedan dess r han trasig\noch bygger bara\nkorkade och lata sm robotar\nsom skjuter varandra och\nfrstr nano-vrlden."; "STORY_PAGE_3" = "din uppgift r att hjlpa kiki,\nden sista kloka roboten,\natt reparera skaparen.\n\nlycka till!"; /* setup */ "off" = "av"; "on" = "p"; "sound" = "ljud"; "volume" = "volym"; "fullscreen" = "fullskrmslge"; "fov" = "synflt"; "speed" = "hastighet"; "keyboard setup" = "tangentbordsinstllningar"; "save" = "spara"; /* keyboard setup */ "$no_itemkeyboard setup" = "$no_itemtangentbordsinstllningar"; // don't translate $no_item "$no_item" = "$no_item"; // don't change this "move forward" = "g framt"; "move backward" = "g bakt"; "turn left" = "svng vnster"; "turn right" = "svng hger"; "jump" = "hoppa"; "push" = "knuffa"; "shoot" = "skjut"; "change view" = "ndra synvinkel"; "look up" = "titta uppt"; "look down" = "titta nedt"; "press the new key" = "tryck p den nya knappen"; "action without key" = "knappls handling"; "back to setup" = "tillbaka till instllningar"; /* help */ "HELP_SPIKES_1" = "$scale(1.5)mission:\nta dig till utgngen!\n\nse upp fr spikarna!\ng bara ver dem\nom de r infllda!"; "HELP_GOLD_1" = "$scale(1.5)mission:\nta dig till utgngen!\n\nfr att komma dit\nska du flytta stenarna.\n\ntryck p\"$key(push)\"+\"$key(move forward)\"fr att knuffa dem."; "HELP_JUMP_1" = "$scale(1.5)mission:\nta dig till utgngen!\n\nfr att komma dit\nska du hoppa ver kuberna.\n\ntryck p \"$key(jump)\" fr att hoppa."; "HELP_JUMP_2" = "fr att hoppa framt ska du,\ntrycka p \"$key(jump)\"+\"$key(move forward)\"\n\ndu kan vnda dig\nmedan du hoppar!\n\ntryck p \"$key(turn left)\"\neller \"$key(turn right)\" fr att vnda dig!"; kiki/py/0000777000000000000000000000000010340401671011133 5ustar rootrootkiki/py/action.py0000666000000000000000000000353407644705761013013 0ustar rootroot if Controller.isDebugVersion(): print "[action.py]" # ................................................................................................................. class KikiPyActionObject: def __init__(self): self.action_dict = {} def performAction(self, name, time): if name in self.action_dict: if self.action_dict[name][1]: self.action_dict[name][1](time) def finishAction(self, name): if name in self.action_dict: if self.action_dict[name][2]: self.action_dict[name][2]() def actionFinished(self, name): if name in self.action_dict: if self.action_dict[name][3]: self.action_dict[name][3]() def startTimedAction(self, name, time, finished=0): """starts the action with name. time is the duration in milliseconds""" if name in self.action_dict: action = self.action_dict[name][0] action.setDuration(time) self.action_dict[name][3] = finished Controller.timer_event.addAction(action) def addAction (self, name, perform_cb, finish_cb, finished_cb = 0, mode = KikiAction.ONCE): """registers callables perform_cb(time) and finish_cb() as an action with name and mode""" self.action_dict[name] = [KikiPyAction (self, name, 0, mode), perform_cb, finish_cb, finished_cb] # ................................................................................................................. def continuous(*args): default_args = ("continuous kikipy action", 0, KikiAction.CONTINUOUS) return apply (KikiPyAction, args + default_args[len(args)-1:]) def once(*args): default_args = ("kikipy action", 0, KikiAction.ONCE) return apply (KikiPyAction, args + default_args[len(args)-1:])kiki/py/buffer.py0000666000000000000000000007650410326670317013003 0ustar rootroot # ................................................................................................................. # KikiPyBuffer # ................................................................................................................. class KikiPyBuffer: """ kikipy buffer """ # ............................................................................................................. # CLASS ATTRIBUTES # ............................................................................................................. copy_buffer = [] find_string = "" # ............................................................................................................. # INIT # ............................................................................................................. def __init__ (self, editor): """initializes the console with a widget""" self.editor = editor self.cursor = KikiPos() # cursor pos self.selection = KikiPos() # selection pos self.unchanged = 1 # flag for indicating unsaved changes self.lines = [""] # the text buffer self.title_text = "buffer" self.color_line_cache = {} # cache for syntax colored lines self.undo_buffer = [] # undo buffer self.initialize() # initialize the syntax colors # ............................................................................................................. def initialize (self): """initializes the syntax color search patterns and colors""" self.syntax_colors = ( (re.compile(r"\"{3}.*?\"{3}"), KColor(0.1,0.5,0.0)), # doc strings (re.compile(r"\"{1}.*?(?<(-+= ])(len|min|max)(?=\ ?\()"), KColor(0.5,0.5,1.0)), # digits,len,min,max (re.compile(r"\band\b|\bor\b|\bnot\b|==|<>|>=|<=|>|<"), KColor(0.9,0.9,0.0)), # logic & comparison (re.compile(r"\bprint\b"), KColor(0.0,1.0,0.0)), # print ) self.text_color = KColor(0.8,0.8,0.8) self.color_syntax = 1 # ............................................................................................................. def activate(self): """activates the buffer""" sys.stdout = KConsole # redirect interpreter output to console sys.stderr = KConsole self.setChanged(not self.unchanged) # just to update title bar self.setCursor(self.cursor.x, self.cursor.y) # also scrolls the window and resets the selection # ............................................................................................................. def clear(self): """resets the cursor""" self.setCursor(0, 0) # ............................................................................................................. def setChanged (self, changed = 1): """displays the changed flag in the title""" if changed: self.editor.setTitle("*"+self.title_text+"*") else: self.editor.setTitle(self.title_text) self.unchanged = not changed # ............................................................................................................. def handleDoubleClick (self): """selects to word boundaries to the left and the right of the cursor position""" line = self.lines[self.cursor.y] # get the current line if not len(line): # if line empty return # do nothing self.selection.y = self.cursor.y # reset the selection if self.cursor.x > len(line)-1: # if clicked behind line end self.setCursor(0, self.cursor.y, 0) # select whole line self.selection.x = len(line) return char_pos = max(0, self.cursor.x) character = line[char_pos] # get the character at cusor pos if self.findMatchingBracketPos(): console.out("it's a klammer :-)") word_pattern = re.compile((character == " ") and r"\s+" or r"\w+") matches = word_pattern.finditer(line) match = 0 for match in matches: if match.span()[0] <= char_pos and match.span()[1] > char_pos: break if match: self.setCursor(match.span()[0], self.cursor.y, 0) self.selection.x = match.span()[1] # ............................................................................................................. # TEXT EDITING # ............................................................................................................. # ............................................................................................................. def undo (self, n =1): """performs n undo operations""" num_ops = len(self.undo_buffer) if not num_ops: self.editor.setStatus("no undo") return type, pos, text = self.undo_buffer[-1] x, y = pos self.setCursor(x, y) if type == "insert": self.eraseLine(y, x, x+len(text)) elif type == "erase": self.insertTextAtPos(text, KikiPos(x,y)) elif type == "del": self.lines[y:y] = text self.lineChanged(y) elif type == "new": del self.lines[y:y+len(text)] self.lineChanged(y) elif type == "split": self.joinLine() elif type == "join": self.splitLine() elif type == "multi": del self.undo_buffer[num_ops-1] self.undo(text) del self.undo_buffer[num_ops-1:] # delete undo entries for undo operations self.setCursor(x, y) if n > 1: for i in range (1,n): self.undo() # ............................................................................................................. def lineChanged (self, lineIndex, numberChanged=1): """invalidates color line cache for all lines below lineIndex and updates the title bar, if first change""" if numberChanged: for index in range(lineIndex, len(self.lines)-1): if index in self.color_line_cache: del self.color_line_cache[index] self.editor.updateScrollBar() else: if lineIndex in self.color_line_cache: del self.color_line_cache[lineIndex] if self.unchanged: self.setChanged() # ............................................................................................................. def eraseLine (self, lineIndex, start=0, end=-1): """erases characters from start to end in line""" if start == 0 and end == -1: # if default arguments self.undo_buffer.append(("del", (0, lineIndex), [self.lines[lineIndex]])) del(self.lines[lineIndex]) # delete whole line self.lineChanged(lineIndex) return line = self.lines[lineIndex] if end == -1: end = len(line) # default end=-1 for end of line if start < end: self.undo_buffer.append(("erase", (start, lineIndex), line[start:end])) line = line[:start]+line[end:] self.lines[lineIndex] = line self.lineChanged(lineIndex) # ............................................................................................................. def splitLineAndIndent (self): """splits the line at cursor pos, indents cleverly""" self.splitLine() # split line self.setCursor(0, self.cursor.y+1) # set cursor to start of next line self.indentLine() # indent line # ............................................................................................................. def indentLine (self): """indents current line. indent depends on characters and trailing ':' on previous line""" start = 0 indent = re.search(r":\s*(#.*)?$", self.lines[self.cursor.y-1]) and 4 or 0 match = re.search(r"\S", self.lines[self.cursor.y-1]) # get match for first non space character if match: # if non space found start = match.start() # indent next line to same level self.insertTextAtPos("".ljust(start+indent), KikiPos(0, self.cursor.y)) self.setCursor(start+indent, self.cursor.y) # ............................................................................................................. def splitLine (self): """splits the current line at cursor position""" self.undo_buffer.append(("split", (self.cursor.x, self.cursor.y), 0)) line = self.lines[self.cursor.y] self.lines[self.cursor.y] = line[:self.cursor.x] self.lines.insert(self.cursor.y+1, line[self.cursor.x:]) self.lineChanged(self.cursor.y) # ............................................................................................................. def joinLine (self): """joins the current line with the next line""" self.undo_buffer.append(("join", (self.cursor.x, self.cursor.y), 0)) line = self.lines[self.cursor.y]+self.lines[self.cursor.y+1] self.lines[self.cursor.y] = line del(self.lines[self.cursor.y+1]) self.lineChanged(self.cursor.y) # ............................................................................................................. def insertText (self, text): """insert text at cursor position""" if text: self.undo_buffer.append(("insert", (self.cursor.x, self.cursor.y), text)) line = self.lines[self.cursor.y]; line = line[0:self.cursor.x]+text+line[self.cursor.x:] self.lines[self.cursor.y] = line self.lineChanged(self.cursor.y, 0) # ............................................................................................................. def insertTextAtPos (self, text, pos): """insert text at position pos""" if text: self.undo_buffer.append(("insert", (pos.x, pos.y), text)) self.lines[pos.y] = self.lines[pos.y][0:pos.x]+text+self.lines[pos.y][pos.x:] self.lineChanged(pos.y, 0) # ............................................................................................................. def delSelection (self): """erase selected characters""" if self.selectionEmpty(): # nothing to delete return start, start_line, end, end_line = self.selectionRect() # sort selection if start_line == end_line: # single line selection self.eraseLine(start_line, start, end) self.cursor.x = self.selection.x = start self.lineChanged(self.cursor.y, 0) return else: # multi line selection undo_ops = len(self.undo_buffer) self.eraseLine(end_line, end=end) # erase last line self.undo_buffer.append(("del", (0, start_line+1), self.lines[start_line+1:end_line])) # fill undo buffer del self.lines[start_line+1:end_line] # erase lines between last and first self.eraseLine(start_line, start) # erase first line self.cursor.y = self.selection.y = start_line self.cursor.x = self.selection.x = start if start or end: self.joinLine() else: self.lineChanged(self.cursor.y) self.undo_buffer.append(("multi", (self.cursor.x, self.cursor.y), len(self.undo_buffer) - undo_ops)) # ............................................................................................................. def cut (self): """cut selected characters""" if self.selectionEmpty(): return # nothing to delete -> return self.__class__.copy_buffer = self.selectionText() self.delSelection() # ............................................................................................................. def copy (self): """copy selected characters""" self.__class__.copy_buffer = self.selectionText() # ............................................................................................................. def paste (self): """paste selected characters""" undo_ops = len(self.undo_buffer) self.delSelection() if len(self.__class__.copy_buffer) == 1: self.insertText(self.__class__.copy_buffer[0]) self.setCursor(self.cursor.x + len(self.__class__.copy_buffer[0]), self.cursor.y) elif len(self.__class__.copy_buffer) > 1: self.splitLine() self.insertText(self.__class__.copy_buffer[0]) self.undo_buffer.append(("new", (0, self.cursor.y+1), self.__class__.copy_buffer[1:])) self.lines[self.cursor.y+1:self.cursor.y+1] = self.__class__.copy_buffer[1:] self.lineChanged(self.cursor.y) self.undo_buffer.append(("multi", (self.cursor.x, self.cursor.y), len(self.undo_buffer) - undo_ops)) # ............................................................................................................. # FIND # ............................................................................................................. def findAndGotoText (self, text): """searches for the next occurence of text and if found, selects it""" self.__class__.find_string = text result = self.findTextFromPos(text, self.cursor + KikiPos(1,0)) if result: self.setCursor(result.x, result.y) self.selection = self.cursor + KikiPos(len(text), 0) else: self.editor.setStatus("not found") # ............................................................................................................. def findTextFromPos (self, text, pos): """searches for the next occurence of text and returns it's position or None, if nothing found""" lineIndex = pos.y result = self.lines[lineIndex].find(text, pos.x) while result == -1 and lineIndex+1 < len(self.lines): lineIndex += 1 result = self.lines[lineIndex].find(text) if result <> -1: return KikiPos(result,lineIndex) lineIndex = -1 while result == -1 and lineIndex+1 < pos.y: lineIndex += 1 result = self.lines[lineIndex].find(text) if result <> -1: return KikiPos(result,lineIndex) return None # ............................................................................................................. def findMatchingBracketPos (self): """searches the matching bracket for the bracket below the cursor""" bdict = {"(": (")", 1), "{": ("}", 1), "[": ("]", 1), ")": ("(", -1), "}": ("{", -1), "]": ("[", -1)} c = self.lines[self.cursor.y][self.cursor.x] if c in bdict: console.out("is in bdict") if self.lines[self.cursor.y][self.cursor.x] in ("{", "(", "["): console.out("klammer vorwaerts") elif self.lines[self.cursor.y][self.cursor.x] in ("}", ")", "]"): console.out("klammer rueckwaerts") else: return 0 return (0,0) # ............................................................................................................. # CURSOR # ............................................................................................................. # ............................................................................................................. def setCursor (self, x=0, y=0, resetSelection=1): """sets the cursor position to the next valid pos near (x, y)""" new_y = minmax(0, len(self.lines)-1, y) # get a valid line number new_x = minmax(0, len(self.lines[new_y]), x) # get a valid column number self.cursor = KikiPos(new_x, new_y) self.editor.scrollToCursor () if resetSelection: self.selection = KikiPos(self.cursor) # ............................................................................................................. def advanceCursor (self, x, resetSelection=1): """moves the cursor position advanced by x characters""" new_x = self.cursor.x+x if new_x < 0 and self.cursor.y > 0: self.cursor.y -= 1 new_x = len(self.lines[self.cursor.y]); elif new_x > len(self.lines[self.cursor.y]) and self.cursor.y < len(self.lines)-1: new_x = 0 self.cursor.y += 1 self.cursor.x = minmax(0, len(self.lines[self.cursor.y]), new_x) self.editor.scrollToCursor () if resetSelection: self.selection = KikiPos(self.cursor) # ............................................................................................................. # SELECTION # ............................................................................................................. # ............................................................................................................. def selectionEmpty (self): """returns true if nothing selected""" return self.selection.x == self.cursor.x and self.selection.y == self.cursor.y # ............................................................................................................. def selectionRect (self): """returns the sorted start and end position of the selection as four values the end position lies always below the start position (or to the right if on same line) """ cy = self.cursor.y; cx = self.cursor.x; sy = min(len(self.lines)-1, self.selection.y) sx = min(self.selection.x, len(self.lines[sy])) return (cy < sy or (cy == sy and cx <= sx)) and (cx, cy, sx, sy) or (sx, sy, cx, cy) # ............................................................................................................. def selectionText (self): """returns the selection as a list of strings""" start, start_line, end, end_line = self.selectionRect() if start_line == end_line: # single line selection return [self.lines[start_line][start:end]] # return list with selected text else: # multi line selection copy_lines = [self.lines[start_line][start:]] # insert last part of first line copy_lines[1:1] = self.lines[start_line+1:end_line] # insert lines between copy_lines.append(self.lines[end_line][:end]) # append first part of last line return copy_lines # return the list # ............................................................................................................. # KEYBOARD INPUT # ............................................................................................................. def handleKeyModChar (self, keyName, modName, character): """handles a key press""" # ................................................... simple character if len(keyName) == 1 and not modName: self.delSelection() self.insertText(keyName) self.cursor.x += 1 self.selection.x += 1 return 1 if not modName or modName == "SHIFT": reset_selection = not modName # ................................................... backspace if keyName == "BACKSPACE": if self.selectionEmpty(): # if selection empty prev_tab_pos = 0 # calculate previous tab position if self.cursor.x % 4: prev_tab_pos = (self.cursor.x/4)*4 else: prev_tab_pos = self.cursor.x - 4 if prev_tab_pos < 0: # if tabpos at start of line if self.cursor.y > 0: # if not in first line self.setCursor(len(self.lines[self.cursor.y-1]), self.cursor.y-1) self.joinLine() # join this with previous line return 1 # return self.selection.x = self.cursor.x-1 # select previous character if self.lines[self.cursor.y][self.selection.x] == " ": # if previous character is space while self.selection.x > prev_tab_pos and \ self.lines[self.cursor.y][self.selection.x-1] == " ": self.selection.x -= 1 # select to previous tabpos self.delSelection() # delete the selection return 1 # ................................................... delete if keyName == "DELETE": if self.selectionEmpty(): self.selection.x = self.cursor.x + 1 if self.selection.x > len(self.lines[self.cursor.y]): if self.cursor.y < len(self.lines)-1: # join this with next line self.joinLine() self.selection = KikiPos(self.cursor) else: self.selection = KikiPos(self.cursor) # end of file, reset selection return 1 self.delSelection() return 1 # ................................................... cursor keys if keyName == "UP" or keyName == "DOWN": # UP and DOWN dir = (keyName == "UP" and -1 or 1) self.setCursor(self.cursor.x, self.cursor.y + dir, reset_selection) return 1 if keyName == "LEFT" or keyName == "RIGHT": # LEFT and RIGHT self.advanceCursor(keyName == "LEFT" and -1 or 1, reset_selection) return 1 # ................................................... home end page up & down if keyName == "END": # END self.setCursor(0, len(self.lines), reset_selection) return 1 if keyName == "HOME": # HOME self.setCursor(0, 0, reset_selection) return 1 if keyName == "PAGEUP": # PAGEUP self.setCursor( self.cursor.x, \ self.cursor.y - self.editor.view_rows + 1, \ reset_selection) return 1 if keyName == "PAGEDOWN": # PAGEDOWN self.setCursor( self.cursor.x, \ self.cursor.y + self.editor.view_rows - 1, reset_selection) return 1 # ................................................... control sequences else: # .................................................................. CTRL if modName.find("CTRL") <> -1: reset_selection = (modName.find("SHIFT") == -1) if keyName == "a": # CTRL_a self.setCursor(0, self.cursor.y, reset_selection) # cursor to start of line return 1 elif keyName == "e": # CTRL_e self.setCursor(len(self.lines[self.cursor.y]),self.cursor.y,reset_selection)# cursor to end of line return 1 elif keyName == "k": # CTRL_k -> delete (to end of) line self.selection = KikiPos(self.cursor) # reset selection if not len(self.lines[self.cursor.y]): # if line empty self.eraseLine(self.cursor.y) # delete line else: # else self.selection.x = len(self.lines[self.cursor.y]) # select to end of line self.delSelection() # delete selection return 1 elif keyName == "s": # CTRL_s self.color_syntax = not self.color_syntax # toggle syntax coloring return 1 return 0 # .................................................................. META elif modName == "META": # META if keyName == "c": # META_c self.copy() # copy return 1 elif keyName == "v": # META_v self.paste() # paste return 1 elif keyName == "z": # META_z self.undo() # undo return 1 elif keyName == "x": # META_x self.cut() # cut return 1 elif keyName == "f" or keyName == "g": # META_f and META_g if keyName == "g" and self.__class__.find_string: # META_g self.findAndGotoText(self.__class__.find_string) # repeat last find elif self.selectionEmpty() or self.selection.y <> self.cursor.y:# if nothing selected self.editor.requestUserInput("find") # request search string else: # else self.findAndGotoText(self.selectionText()[0]) # search selected string return 1 elif keyName == "l": # META_l self.editor.requestUserInput("goto") # goto line return 1 elif keyName == "a": # META_a self.cursor = KikiPos() # set cursor to [0,0] self.selection.y = len(self.lines)-1 # set selection to end ... self.selection.x = len(self.lines[self.selection.y]) # of last line return 1 return 0 elif modName == "SHIFT+META": if keyName == "z": self.undo_buffer = [] return 1 return 0 else: return 0 # don't handle undefined mods # ................................................... insert text self.delSelection() # always cut the selection before entering new text # ................................................... map and insert character if keyName == "TAB": chars = "".ljust(4 - self.cursor.x % 4) elif not modName and keyName == "BACKSLASH": chars = '\\' elif not modName and keyName == "QUOTE": chars = '\'' elif character and 32 <= ord(character) <= 126: chars = character # simply use the character else: return 0 self.insertText(chars) self.cursor.x += len(chars) self.selection.x += len(chars) return 1 kiki/py/colors.py0000666000000000000000000010135110340401670013006 0ustar rootroot if Controller.isDebugVersion(): print '[colors.py]' # ................................................................................................................. # ........................................................ apply color scheme def applyColorScheme (scheme): """applies the color scheme""" for item in scheme.items(): for subitem in item[1].items(): colorstr = str(subitem[1]) color = apply(KColor, subitem[1]) eval(item[0]+".setObjectColor(\'"+subitem[0]+"\', color)") # ........................................................michas default color_scheme tron_scheme = { # red green blue transparency "KikiWorld": { "base": (0.0, 0.0, 0.3), "plate": (0.05, 0.05, 0.2), }, "KikiLight": { "base": (0.0, 0.0, 1.0), "diffuse": (0.0, 0.0, 1.0), "specular": (0.0, 0.0, 1.0), "halo": (0.0, 0.0, 1.0), }, "KikiSpikes": { "base": (0.5, 0.5, 0.5), }, "KikiBomb": { "base": (0.5, 0.0, 0.0), }, "KikiStone": { "base": (0.0, 0.0, 1.0, 1.0), }, "KikiMovesAtom": { "base": (0.5, 0.5, 0.0, 0.4), "neutron": (0.0, 0.5, 0.0, 0.2), }, # "KikiHealthAtom": { "base": (0.0, 0.5, 0.0, 0.8), # "neutron": (0.5, 1.0, 0.0, 0.8), # }, "KikiSwitch": { "base": (0.0, 0.0, 0.5, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiGate": { "base": (1.0, 1.0, 0.0, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiPlayer": { "base": (0.5, 0.5, 0.5), "dead": (0.3, 0.1, 0.0), "tire": (0.0, 0.0, 0.5), }, "KikiMutant": { "base": (0.5, 0.0, 0.0), "dead": (0.0, 0.0, 0.2, 0.4), "tire": (0.0, 0.0, 0.2), }, "KikiText": { "base": (0.8, 0.8, 0.0), "bright": (1.0, 1.0, 0.0), "dark": (0.6, 0.4, 0.0), }, "KikiGear": { "base": (0.1, 0.1, 0.9, 0.9), }, "KikiValve": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiMotorCylinder":{ "base": (0.0, 0.0, 0.6, 0.9), }, "KikiMotorGear": { "base": (0.0, 0.0, 0.6, 0.9), }, "KikiGenerator": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiWire": { "base": (0.1, 0.1, 0.9, 0.6), "light": (1.0, 1.0, 0.0), }, } # ...........(copy of default................................. nearly default color_scheme neutron_scheme = { "KikiWorld": { "base": (0.13, 0.13, 0.13), "plate": (0.5, 0.5, 0.5), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (1.0, 1.0, 1.0), "specular": (1.0, 1.0, 1.0), "halo": (1.0, 1.0, 1.0), }, "KikiSpikes": { "base": (0.5, 0.5, 0.5), }, "KikiBomb": { "base": (0.5, 0.0, 0.0), }, "KikiStone": { "base": (0.5, 0.5, 0.5, 0.5), }, "KikiMovesAtom": { "base": (1.0, 1.0, 0.0, 0.5), "neutron": (0.0, 1.0, 0.0, 0.3), }, # "KikiHealthAtom": { "base": (0.0, 0.5, 0.0, 0.8), # "neutron": (0.5, 1.0, 0.0, 0.8), # }, "KikiSwitch": { "base": (0.0, 0.0, 0.5, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiGate": { "base": (1.0, 1.0, 0.0, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiPlayer": { "base": (1.0, 0.5, 0.0), "dead": (0.3, 0.1, 0.0), "tire": (0.5, 0.0, 0.0), }, "KikiMutant": { "base": (0.5, 0.0, 0.0), "dead": (0.0, 0.0, 0.2, 0.4), "tire": (0.0, 0.0, 0.2), }, "KikiText": { "base": (0.8, 0.8, 0.0), "bright": (1.0, 1.0, 0.0), "dark": (0.6, 0.4, 0.0), }, "KikiGear": { "base": (1.0, 0.0, 0.0, 0.0), #!!! }, "KikiValve": { "base": (1.0, 0.0, 0.0, 0.0), #!!! }, "KikiMotorCylinder":{ "base": (0.0, 0.0, 0.6, 0.9), }, "KikiMotorGear": { "base": (0.0, 0.0, 0.6, 0.9), }, "KikiGenerator": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiWire": { "base": (0.1, 0.1, 0.9, 0.6), "light": (1.0, 1.0, 0.0), }, } # ........................................................ test color scheme test_scheme = { "KikiWorld": { "base": (1.0, 1.0, 1.0), "plate": (0.08, 0.08, 0.08), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (1.0, 1.0, 1.0), "specular": (1.0, 1.0, 1.0), "halo": (1.0, 1.0, 1.0), }, "KikiSpikes": { "base": (0.5, 0.5, 0.5), }, "KikiBomb": { "base": (0.5, 0.0, 0.0), }, "KikiStone": { "base": (0.5, 0.5, 0.5, 0.5), }, "KikiMovesAtom": { "base": (0.5, 0.0, 0.0, 0.8), "neutron": (1.0, 0.5, 0.0, 0.8), }, # "KikiHealthAtom": { "base": (0.0, 0.5, 0.0, 0.8), # "neutron": (0.5, 1.0, 0.0, 0.8), # }, "KikiSwitch": { "base": (0.0, 0.0, 0.5, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiGate": { "base": (1.0, 1.0, 0.0, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiPlayer": { "base": (1.0, 0.5, 0.0), "dead": (0.3, 0.1, 0.0), "tire": (0.5, 0.0, 0.0), }, "KikiMutant": { "base": (1.0, 0.5, 0.0), "dead": (0.3, 0.1, 0.0), "tire": (0.5, 0.0, 0.0), }, "KikiText": { "base": (0.8, 0.8, 0.0), "bright": (1.0, 1.0, 0.0), "dark": (0.6, 0.4, 0.0), }, "KikiGear": { "base": (0.1, 0.1, 0.9, 0.9), }, "KikiValve": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiMotorCylinder":{ "base": (0.0, 0.0, 0.6, 0.9), }, "KikiMotorGear": { "base": (0.0, 0.0, 0.6, 0.9), }, "KikiGenerator": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiWire": { "base": (0.1, 0.1, 0.9, 0.6), "light": (1.0, 1.0, 0.0), }, } # ........................................................ candy color scheme candy_scheme = { "KikiWorld": { "base": (0.35, 0.0, 0.35), "plate": (0.8, 0.0, 0.9), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (1.0, 0.5, 0.0), "specular": (1.0, 0.0, 1.0), "halo": (1.0, 1.0, 1.0), }, "KikiText": { "base": (0.7, 0.0, 0.7), "bright": (1.0, 0.0, 1.0), "dark": (0.4, 0.0, 0.4), }, "KikiBomb": { "base": (0.73, 0.0, 0.75), }, "KikiStone": { "base": (0.85, 0.0, 0.95, 0.6), }, "KikiSpikes": { "base": (0.8, 0.0, 0.8), }, "KikiMovesAtom": { "base": (0.5, 0.0, 0.5, 0.8), "neutron": (1.0, 0.0, 1.0, 0.8), }, # "KikiHealthAtom": { "base": (1.0, 0.0, 1.0, 0.8), # "neutron": (0.6, 0.0, 0.6, 0.8), # }, "KikiSwitch": { "base": (0.3, 0.0, 0.3, 0.8), "sphere": (1.0, 0.0, 1.0, 0.8), }, "KikiGate": { "base": (1.0, 0.0, 1.0, 0.8), "sphere": (1.0, 0.0, 1.0, 0.8), }, "KikiPlayer": { "base": (0.7, 0.0, 0.7), "tire": (0.3, 0.0, 0.3), }, "KikiMutant": { "base": (0.3, 0.0, 0.3), "dead": (0.2, 0.0, 0.45, 0.5), "tire": (0.7, 0.0, 0.7), }, "KikiBotFume": { "base": (1.0, 0.0, 1.0, 0.5), }, "KikiValve": { "base": (0.5, 0.0, 0.5, 0.9), }, "KikiGear": { "base": (0.7, 0.0, 0.7, 0.8), }, "KikiWire": { "base": (1.0, 0.0, 1.0), "light": (1.0, 1.0, 0.0), }, "KikiGenerator": { "base": (0.5, 0.0, 0.5, 0.9), }, "KikiMotorCylinder":{ "base": (1.0, 0.0, 1.0, 0.9), }, "KikiMotorGear": { "base": (1.0, 0.0, 1.0, 0.9), }, } # ........................................................ default color_scheme default_scheme = { "KikiWorld": { "base": (0.13, 0.13, 0.13), "plate": (0.5, 0.5, 0.5), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (1.0, 1.0, 1.0), "specular": (1.0, 1.0, 1.0), "halo": (1.0, 1.0, 1.0), }, "KikiSpikes": { "base": (0.5, 0.5, 0.5), }, "KikiBomb": { "base": (0.5, 0.0, 0.0), }, "KikiStone": { "base": (0.5, 0.5, 0.5, 0.5), }, "KikiMovesAtom": { "base": (0.5, 0.0, 0.0, 0.8), "neutron": (1.0, 0.5, 0.0, 0.8), }, # "KikiHealthAtom": { "base": (0.0, 0.5, 0.0, 0.8), # "neutron": (0.5, 1.0, 0.0, 0.8), # }, "KikiSwitch": { "base": (0.0, 0.0, 0.5, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiGate": { "base": (1.0, 1.0, 0.0, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiPlayer": { "base": (1.0, 0.5, 0.0), "dead": (0.3, 0.1, 0.0), "tire": (0.5, 0.0, 0.0), }, "KikiMutant": { "base": (0.5, 0.0, 0.0), "dead": (0.0, 0.0, 0.2, 0.4), "tire": (0.0, 0.0, 0.2), }, "KikiText": { "base": (0.8, 0.8, 0.0), "bright": (1.0, 1.0, 0.0), "dark": (0.6, 0.4, 0.0), }, "KikiGear": { "base": (0.1, 0.1, 0.9, 0.9), }, "KikiValve": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiMotorCylinder":{ "base": (0.0, 0.0, 0.6, 0.9), }, "KikiMotorGear": { "base": (0.0, 0.0, 0.6, 0.9), }, "KikiGenerator": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiWire": { "base": (0.1, 0.1, 0.9, 0.6), "light": (1.0, 1.0, 0.0), }, } # ........................................................ bronze color scheme bronze_scheme = { "KikiWorld": { "base": (0.25, 0.15, 0.05), "plate": (0.8, 0.6, 0.2), }, "KikiLight": { "base": (0.1, 0.1, 0.0), "diffuse": (0.4, 0.2, 0.1), "specular": (1.0, 1.0, 0.5), "halo": (1.0, 0.9, 0.2), }, "KikiSpikes": { "base": (0.8, 0.6, 0.2), }, "KikiStone": { "base": (1.0, 0.8, 0.4, 0.8), }, "KikiMovesAtom": { "base": (0.4, 0.4, 0.1, 0.8), "neutron": (0.4, 0.4, 0.1, 0.8), }, # "KikiHealthAtom": { "base": (0.7, 0.4, 0.1, 0.8), # "neutron": (0.7, 0.4, 0.1, 0.8), # }, "KikiSwitch": { "base": (0.9, 0.7, 0.1, 0.8), "sphere": (1.0, 1.0, 0.7, 0.8), }, "KikiGate": { "base": (0.9, 0.7, 0.1), "sphere": (1.0, 0.8, 0.1, 0.8), }, "KikiPlayer": { "base": (0.8, 0.6, 0.3), "dead": (0.4, 0.1, 0.0), "tire": (0.5, 0.2, 0.1), }, "KikiMutant": { "base": (0.5, 0.2, 0.1, 0.8), "dead": (0.5, 0.2, 0.1, 0.4), "tire": (0.3, 0.1, 0.0), }, "KikiBotFume": { "base": (1.0, 0.5, 0.1, 0.5), }, "KikiGear": { "base": (0.7, 0.4, 0.1, 0.9), }, "KikiValve": { "base": (0.5, 0.2, 0.1, 0.9), }, "KikiGenerator": { "base": (0.7, 0.5, 0.3, 0.9), }, "KikiMotorCylinder":{ "base": (0.8, 0.6, 0.2, 0.9), }, "KikiMotorGear": { "base": (0.8, 0.6, 0.2, 0.9), }, "KikiWire": { "base": (0.7, 0.5, 0.3, 0.9), "light": (1.0, 1.0, 0.0), }, "KikiBomb": { "base": (0.9, 0.7, 0.1), }, "KikiText": { "base": (0.7, 0.5, 0.1), "bright": (0.9, 0.7, 0.15), "dark": (0.6, 0.4, 0.0), }, } # ........................................................ red color scheme red_scheme = { "KikiWorld": { "base": (0.2, 0.0, 0.0), "plate": (0.3, 0.0, 0.0), }, "KikiLight": { "base": (0.1, 0.1, 0.1), "diffuse": (1.0, 1.0, 0.0), "specular": (1.0, 1.0, 0.0), "halo": (1.0, 1.0, 0.0), }, "KikiBomb": { "base": (0.5, 0.0, 0.0), }, "KikiStone": { "base": (0.5, 0.0, 0.0, 0.6), }, "KikiSpikes": { "base": (0.3, 0.0, 0.0), }, "KikiMovesAtom": { "base": (0.4, 0.0, 0.0, 0.6), "neutron": (0.5, 0.0, 0.0, 0.6), }, # "KikiHealthAtom": { "base": (0.6, 0.0, 0.0, 0.6), # "neutron": (0.5, 0.5, 0.0, 0.6), # }, "KikiSwitch": { "base": (0.8, 0.0, 0.0, 0.8), "sphere": (1.0, 1.0, 0.1, 0.8), }, "KikiGate": { "base": (1.0, 0.2, 0.0, 0.8), "sphere": (1.0, 1.0, 0.1, 0.8), }, "KikiPlayer": { "base": (0.7, 0.0, 0.0), "tire": (0.3, 0.0, 0.0), }, "KikiMutant": { "base": (0.3, 0.0, 0.0), "dead": (0.2, 0.0, 0.0, 0.5), "tire": (0.7, 0.0, 0.0), }, "KikiBotFume": { "base": (1.0, 1.0, 0.0, 0.5), }, "KikiValve": { "base": (0.5, 0.2, 0.0), }, "KikiGear": { "base": (1.0, 0.5, 0.0, 0.5), }, "KikiWire": { "base": (0.5, 0.0, 0.0), }, "KikiGenerator": { "base": (0.5, 0.0, 0.0), }, "KikiMotorCylinder":{ "base": (0.25, 0.0, 0.0), }, "KikiMotorGear": { "base": (0.25, 0.0, 0.0), }, "KikiText": { "base": (1.0, 0.5, 0.0), "bright": (1.0, 0.8, 0.0), "dark": (0.4, 0.2, 0.0), }, } # ........................................................ blue color scheme blue_scheme = { "KikiWorld": { "base": (0.0, 0.0, 0.2), "plate": (0.1, 0.1, 0.6), }, "KikiLight": { "base": (0.1, 0.1, 0.1), "diffuse": (1.0, 1.0, 1.0), "specular": (1.0, 1.0, 1.0), "halo": (1.0, 1.0, 1.0), }, "KikiStone": { "base": (0.0, 0.0, 0.5, 0.6), }, "KikiSpikes": { "base": (0.1, 0.1, 0.6, 0.8), }, "KikiMovesAtom": { "base": (0.0, 0.0, 0.6, 0.6), "neutron": (0.2, 0.2, 0.8, 0.6), }, # "KikiHealthAtom": { "base": (0.0, 0.0, 0.6, 0.6), # "neutron": (0.5, 0.5, 0.9, 0.6), # }, "KikiSwitch": { "base": (0.0, 0.0, 0.6, 0.8), "sphere": (1.0, 1.0, 1.0, 0.8), }, "KikiBomb": { "base": (0.2, 0.2, 0.9, 0.8), }, "KikiGate": { "base": (0.0, 0.2, 1.0), "sphere": (1.0, 1.0, 1.0, 0.8), }, "KikiPlayer": { "base": (0.0, 0.0, 0.7), "tire": (0.0, 0.0, 0.3), }, "KikiBotFume": { "base": (0.5, 0.5, 1.0, 0.5), }, "KikiMutant": { "base": (0.0, 0.0, 0.3), "dead": (0.0, 0.0, 0.2, 0.5), "tire": (0.0, 0.0, 0.7), }, "KikiText": { "base": (0.2, 0.4, 0.8), "bright": (0.7, 0.8, 1.0), "dark": (0.0, 0.0, 0.6), }, "KikiGear": { "base": (0.1, 0.1, 0.9, 0.9), }, "KikiValve": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiMotorCylinder":{ "base": (0.0, 0.0, 0.6, 0.9), }, "KikiMotorGear": { "base": (0.0, 0.0, 0.6, 0.9), }, "KikiGenerator": { "base": (0.0, 0.0, 0.5, 0.9), }, "KikiWire": { "base": (0.1, 0.1, 0.9, 0.6), "light": (1.0, 0.5, 0.0), }, } # ........................................................ yellow color scheme yellow_scheme = { "KikiWorld": { "base": (0.34, 0.34, 0.0), "plate": (0.9, 0.9, 0.0), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (1.0, 0.5, 0.0), "specular": (1.0, 0.5, 0.0), "halo": (1.0, 1.0, 0.0), }, "KikiBomb": { "base": (0.75, 0.75, 0.0), }, "KikiStone": { "base": (0.8, 0.85, 0.0, 0.6), }, "KikiSpikes": { "base": (0.8, 0.8, 0.0), }, "KikiMovesAtom": { "base": (0.5, 0.5, 0.0, 0.8), "neutron": (1.0, 1.0, 0.0, 0.8), }, # "KikiHealthAtom": { "base": (1.0, 1.0, 0.0, 0.8), # "neutron": (0.6, 0.6, 0.0, 0.8), # }, "KikiSwitch": { "base": (0.8, 0.8, 0.0, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiGate": { "base": (1.0, 1.0, 0.0, 0.8), "sphere": (1.0, 1.0, 0.0, 0.8), }, "KikiPlayer": { "base": (0.7, 0.7, 0.0), "tire": (0.3, 0.3, 0.0), }, "KikiMutant": { "base": (0.3, 0.3, 0.0), "dead": (0.2, 0.2, 0.0, 0.5), "tire": (0.7, 0.7, 0.0), }, "KikiBotFume": { "base": (1.0, 1.0, 0.0, 0.5), }, "KikiValve": { "base": (0.5, 0.5, 0.0, 0.9), }, "KikiGear": { "base": (0.7, 0.5, 0.0, 0.8), }, "KikiWire": { "base": (1.0, 1.0, 0.0), "light": (0.0, 0.0, 1.0), }, "KikiGenerator": { "base": (0.5, 0.5, 0.0, 0.9), }, "KikiMotorCylinder":{ "base": (0.95, 0.95, 0.0), }, "KikiMotorGear": { "base": (0.95, 0.95, 0.0), }, "KikiText": { "base": (0.7, 0.7, 0.0), "bright": (1.0, 1.0, 0.0), "dark": (0.4, 0.4, 0.0), }, } # ........................................................ green color scheme green_scheme = { "KikiWorld": { "base": (0.0, 0.2, 0.0), "plate": (0.1, 0.6, 0.1), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (0.5, 1.0, 0.5), "specular": (0.7, 1.0, 0.7), "halo": (1.0, 1.0, 1.0), }, "KikiStone": { "base": (0.0, 0.5, 0.0, 0.6), }, "KikiSpikes": { "base": (0.0, 0.6, 0.0, 0.8), }, "KikiMovesAtom": { "base": (0.0, 0.6, 0.0, 0.6), "neutron": (0.0, 0.8, 0.0, 0.6), }, # "KikiHealthAtom": { "base": (0.0, 0.98, 0.0, 0.6), # "neutron": (0.0, 0.5, 0.0, 0.6), # }, "KikiSwitch": { "base": (0.0, 0.6, 0.0, 0.8), "sphere": (1.0, 1.0, 1.0, 0.8), }, "KikiBomb": { "base": (0.0, 0.2, 0.0, 0.8), }, "KikiGate": { "base": (0.0, 0.5, 0.0), "sphere": (1.0, 1.0, 1.0, 0.8), }, "KikiPlayer": { "base": (0.0, 0.7, 0.0), "tire": (0.0, 0.3, 0.0), }, "KikiBotFume": { "base": (0.5, 1.0, 0.5, 0.5), }, "KikiMutant": { "base": (0.0, 0.3, 0.0), "dead": (0.0, 0.2, 0.0, 0.5), "tire": (0.0, 0.7, 0.0), }, "KikiText": { "base": (0.0, 0.4, 0.0), "bright": (0.0, 0.6, 0.0), "dark": (0.0, 0.2, 0.0), }, "KikiGear": { "base": (0.0, 0.2, 0.0, 0.9), }, "KikiValve": { "base": (0.0, 0.5, 0.0, 0.9), }, "KikiMotorCylinder":{ "base": (0.0, 0.6, 0.0, 0.9), }, "KikiMotorGear": { "base": (0.0, 0.6, 0.0, 0.9), }, "KikiGenerator": { "base": (0.0, 0.5, 0.0, 0.9), }, "KikiWire": { "base": (0.1, 0.9, 0.0, 0.6), "light": (1.0, 1.0, 1.0), }, } # ........................................................ metal color scheme metal_scheme = { "KikiWorld": { "base": (0.2, 0.2, 0.2), "plate": (1.0, 1.0, 1.0), }, "KikiLight": { "base": (0.0, 0.0, 0.0), "diffuse": (0.2, 0.2, 0.4), "specular": (0.0, 0.0, 1.0), "halo": (0.0, 0.0, 1.0), }, "KikiStone": { "base": (1.0, 1.0, 1.0, 0.6), }, "KikiSpikes": { "base": (1.0, 1.0, 1.0, 0.8), }, # "KikiHealthAtom": { "base": (0.6, 0.6, 0.7, 0.8), # "neutron": (0.4, 0.4, 0.5, 0.8), # }, "KikiMovesAtom": { "base": (0.3, 0.3, 0.35, 0.8), "neutron": (0.7, 0.7, 0.75, 0.8), }, "KikiSwitch": { "base": (0.9, 1.0, 0.9, 0.8), "sphere": (0.5, 0.5, 1.0, 0.8), }, "KikiGate": { "base": (1.0, 1.0, 1.0, 0.8), "sphere": (0.5, 0.5, 1.0, 0.8), }, "KikiPlayer": { "base": (0.6, 0.6, 0.6), "tire": (0.3, 0.3, 0.3), }, "KikiMutant": { "base": (0.8, 0.8, 0.8), "tire": (0.7, 0.7, 0.7), "dead": (1.0, 1.0, 1.0, 0.3), }, "KikiBotFume": { "base": (0.8, 0.8, 0.8, 0.5), }, "KikiBomb": { "base": (0.4, 0.4, 0.5, 0.9), }, "KikiGear": { "base": (0.2, 0.4, 0.5, 1.0), }, "KikiValve": { "base": (0.4, 0.4, 0.5, 0.9), }, "KikiMotorCylinder":{ "base": (0.5, 0.5, 0.5, 0.9), }, "KikiMotorGear": { "base": (0.5, 0.5, 0.5, 0.9), }, "KikiGenerator": { "base": (1.0, 1.0, 1.0, 0.9), }, "KikiWire": { "base": (1.0, 1.0, 1.0, 0.9), "light": (0.0, 0.0, 1.0), }, "KikiText": { "base": (0.2, 0.4, 0.5), "bright": (0.3, 0.9, 1.0), "dark": (0.1, 0.3, 0.4), }, } applyColorScheme (default_scheme) kiki/py/config.py0000666000000000000000000000721510334734457012775 0ustar rootroot if Controller.isDebugVersion(): print "[config.py]" from ConfigParser import ConfigParser # ................................................................................................................. # KIKI CONFIG # ................................................................................................................. class KikiConfig (ConfigParser): """kiki configuration parser""" def __init__ (self): """initialization""" ConfigParser.__init__ (self) self.readfp (open(kikipy_path + "kiki.cfg")) try: if os.uname()[0] == "Darwin": self.config_file_path = os.path.expanduser ("~/Library/Preferences/kiki.cfg") else: self.config_file_path = os.path.expanduser ("~/.kiki.cfg") except: console.out("--- writing config to %s" % (os.path.expanduser ("~/.kiki.cfg"),)) self.config_file_path = os.path.expanduser ("~/.kiki.cfg") self.read (self.config_file_path) for section in self.sections(): for option in self.options (section): self.apply (section, option, self.get (section, option)) def apply (self, section, option, value): """sets and applies value for option in section""" self.set (section, option, value) if section == "sound": if option == "volume": volume = int(int(value)*(128/9)) sound.setSoundVolume (volume) elif option == "mute": sound.setMute (self.getboolean(section, option)) elif section == "display": if option == "fov": Controller.getPlayer().getProjection().setFov (int(value)) elif option == "gamma": Controller.setGamma(int(value)) elif option == "fullscreen": fullscreen = self.getboolean(section, option) if fullscreen <> Controller.getFullscreen(): screen_size = self.get (section, fullscreen and "fullscreen size" or "window size") screen_size = tuple (map (int, screen_size.split("x"))) Controller.changeScreenSize (screen_size[0], screen_size[1], self.getboolean(section, option)) self.set (section, "fullscreen size", "%dx%d" % Controller.getScreenSize()) elif section == "keyboard": player = Controller.getPlayer() player.setKeyForAction (value, option.replace("_", " ")) elif section == "game": if option == "speed": Controller.setSpeed (int(value)) elif option == "language": Controller.language = value def set (self, section, option, value): """overwritten to allow spaces in option names""" ConfigParser.set (self, section, str(option).replace(" ", "_"), str(value)) def get (self, section, option): """overwritten to allow spaces in option names""" return ConfigParser.get (self, section, str(option).replace(" ", "_")) def save (self): """save the configuration""" try: cfg_file = file (self.config_file_path, "w+") self.write (cfg_file) cfg_file.close() except: console.printError ("unable to write configuration to " + self.config_file_path) # ................................................................................................................. config = KikiConfig () kiki/py/edit.py0000666000000000000000000003773507644705763012477 0ustar rootroot if Controller.isDebugVersion(): print "[edit.py]" execfile (kikipy_path + "buffer.py") execfile (kikipy_path + "interpreter.py") execfile (kikipy_path + "file.py") # ................................................................................................................. # PythonConsole # ................................................................................................................. class PythonConsole: """ kiki python console """ # ............................................................................................................. # INIT # ............................................................................................................. def __init__(self, widget): """initializes the console with a widget""" self.widget = widget self.view_rows = widget.getTextRows() # number of visible rows self.view_cols = widget.getTextCols() # number of visible columns self.offset = 0 # horizontal text offset self.line_offset = 0 # vertical text offset self.inputMode = "" # mode for user input requests self.buffer = KikiPyInterpreter(self) # currently displayed buffer self.buffers = [self.buffer] # list of loaded buffers self.viewBuffer(0) # ............................................................................................................. def setSize (self, cols, rows): """callback from widget, if it's size changed""" self.view_rows = rows self.view_cols = cols # ............................................................................................................. def viewBuffer (self, index): """displays the file with index""" index = minmax(0, len(self.buffers)-1, index) self.buffer = self.buffers[index] self.buffer.activate() # ............................................................................................................. def clearBuffer (self): """clears the buffer, if interpreter, resets cursor pos otherwise""" self.buffer.clear() # ............................................................................................................. def closeBuffer (self): """closes the current buffer""" if self.buffer == self.buffers[0]: # current buffer is interpreter self.viewBuffer(1) # view next buffer return if not self.buffer.unchanged: # current buffer contains changes self.setStatus("!unsaved!") # warn return buffer_index = self.buffers.index(self.buffer) del self.buffers[buffer_index] # delete current buffer self.viewBuffer(buffer_index) # view next buffer # ............................................................................................................. def openFile (self, file_path): """loads and displays a python file""" for buffer in self.buffers: if isinstance(buffer, KikiPyFile) and buffer.sameFile(file_path): self.viewBuffer(self.buffers.index(buffer)) return file_buffer = KikiPyFile(self) if file_buffer.openFile(file_path): self.buffers.append(file_buffer) self.buffer = file_buffer self.viewBuffer(len(self.buffers)-1) else: del file_buffer # ............................................................................................................. # DISPLAY # ............................................................................................................. def displayText (self): """display the text of current file or interpreter""" self.updateCursor () pos = KikiPos() display_pos = KikiPos(-self.offset, 0) self.buffer.text_color.glColor() for lineIndex in range(self.line_offset, min(self.line_offset + self.view_rows, len(self.buffer.lines))): line = self.buffer.lines[lineIndex] if self.buffer.color_syntax: if lineIndex in self.buffer.color_line_cache: matches = self.buffer.color_line_cache[lineIndex] else: matches = [] for patternIndex in range(len(self.buffer.syntax_colors)): matches.extend([(mo.span(), patternIndex) for mo in \ self.buffer.syntax_colors[patternIndex][0].finditer(line)]) matches.sort(lambda a, b: a[0][0]-b[0][0] or b[0][1]-a[0][1]) self.buffer.color_line_cache[lineIndex] = matches for match in matches: if match[0][0] > pos.x: # match start > pos self.buffer.text_color.glColor() # display default text self.widget.displayStringAtPos(line[pos.x:match[0][0]], display_pos) pos.x = match[0][0] display_pos.x = pos.x-self.offset if match[0][0] == pos.x: # match start == pos self.buffer.syntax_colors[match[1]][1].glColor() # display match self.widget.displayStringAtPos(line[pos.x:match[0][1]], display_pos) pos.x = match[0][1] display_pos.x = pos.x-self.offset if pos.x < len(line): self.buffer.text_color.glColor() self.widget.displayStringAtPos(line[pos.x:], display_pos) else: self.widget.displayStringAtPos(line[self.offset:], pos) pos.x = 0 display_pos.x = -self.offset pos.y += 1 display_pos.y += 1 # ............................................................................................................. def updateCursor (self): """maps and sets the cursor and selection positions to window coordinates""" offsetPos = KikiPos(self.offset, self.line_offset) self.widget.cursorPos = self.buffer.cursor - offsetPos self.widget.selectionPos = self.buffer.selection - offsetPos # ............................................................................................................. def updateScrollBar (self): """notifies the python window about text changes for scrollbar updates""" kiki.Controller.python.setScrollBarUnits(self.line_offset, len(self.buffer.lines)) # ............................................................................................................. def setStatus (self, text): """displays text in the status line""" self.widget.getPythonWindow().setStatus(text) def setTitle (self, text): """displays text in the title line""" self.widget.getPythonWindow().setTitle(str(text)) def setInput (self, text): """displays text in the input line""" self.widget.getPythonWindow().setInput(text) def hide (self): self.widget.getPythonWindow().setVisibility(0) # ............................................................................................................. # SCROLLING # ............................................................................................................. # ............................................................................................................. def scrollToCursor (self): """scrolls to the cursor position""" if self.buffer.cursor.y < self.line_offset: # cursor is above top line self.line_offset = max(0, self.buffer.cursor.y) self.updateScrollBar() elif self.buffer.cursor.y > self.line_offset + self.view_rows - 1: # cursor is below bottom line self.line_offset = min(len(self.buffer.lines) - self.view_rows + 1, \ self.buffer.cursor.y - self.view_rows + 1) self.updateScrollBar() if self.buffer.cursor.x < self.offset: # cursor is to the left self.offset = max(0, self.buffer.cursor.x) elif self.buffer.cursor.x > self.offset + self.view_cols - 1: # cursor is to the right self.offset = min(len(self.buffer.lines[self.buffer.cursor.y]) - self.view_cols + 1, \ self.buffer.cursor.x - self.view_cols + 1) def scrollRelative (self, value): """scrolls to relative text position value (should be in range [0,1])""" self.line_offset = int(max(0, value * (len(self.buffer.lines) - self.view_rows))) # ............................................................................................................. def scrollRelY (self, y): self.line_offset = minmax(0, max(len(self.buffer.lines) - self.view_rows, 0), self.line_offset+y) self.buffer.setCursor(self.buffer.cursor.x, \ minmax(self.line_offset, self.line_offset+self.view_rows, self.buffer.cursor.y)) # ............................................................................................................. def scrollLineDown (self): self.scrollRelY(+1) # ............................................................................................................. def scrollLineUp (self): self.scrollRelY(-1) # ............................................................................................................. def scrollPageUp (self): self.scrollRelY(-self.view_rows); # ............................................................................................................. def scrollPageDown (self): self.scrollRelY(self.view_rows); # ............................................................................................................. def scrollToTop (self): self.scrollRelY(-self.line_offset); # ............................................................................................................. def scrollToBottom (self): self.scrollRelY(len(self.buffer.lines)); # ............................................................................................................. # MOUSE INPUT # ............................................................................................................. def picked (self, pos): """starts editing and sets the cursor at picked position""" newPos = self.convertFromWindowPos(pos) self.buffer.setCursor(newPos.x, newPos.y) # ............................................................................................................. def doubleClicked (self): """selects to word boundaries to the left and the right of the cursor position""" self.buffer.handleDoubleClick() # ............................................................................................................. def mouseMoved (self, pos): """updates the selection (and scrolls the widget, if neccessary (not implemented yet))""" self.buffer.selection = self.convertFromWindowPos(pos) # ............................................................................................................. def convertFromWindowPos (self, wpos): """returns the position wpos in window coordinates as a KikiPos in text coordiates""" return KikiPos(wpos[0] + self.offset, wpos[1] + self.line_offset) # ............................................................................................................. # USER INPUT # ............................................................................................................. def requestUserInput (self, mode): """paste selected characters""" self.input_mode = mode kiki.Controller.python.requestUserInput(mode) # ............................................................................................................. def userInput (self, input): """handles the user input in from the input line""" if self.input_mode == "find": self.buffer.findAndGotoText (input) elif self.input_mode == "open": self.openFile(input) elif self.input_mode == "goto": self.buffer.setCursor(0, int(input)-1) # ............................................................................................................. # KEYBOARD INPUT # ............................................................................................................. def handleKey (self, key, character): """handles a key press""" # ................................................... extract mod- and key name modName = "" keyName = key if key.find("_") <> -1: modName = key.split("_")[0] keyName = key.split("_")[1] # ................................................... ignore modifier keys if key == "SHIFT" or key == "CTRL" or key == "META" or key == "ALT": return 1 # ................................................... forward key to buffer if self.buffer.handleKeyModChar(keyName, modName, character): return 1 # ................................................... control sequences if modName: # .................................................................. META if modName == "META": if keyName == "i": # META_i self.viewBuffer(0) # go to interpreter return 1 elif keyName == "o": # META_o self.requestUserInput("open") # open file return 1 elif keyName == "SPACE": # META_SPACE prev_index = self.buffers.index(self.buffer)-1 if prev_index < 0: prev_index = len(self.buffers)-1 self.viewBuffer(prev_index) # previous buffer return 1 elif modName == "SHIFT+META": if keyName == "w": self.closeBuffer() return 1 # ................................................................................. setup python console pythonConsole = PythonConsole(kiki.Controller.python.getPythonWidget()) kiki.Controller.python.setPosition((0,0)) kiki.Controller.python.setSize((1024,695)) kiki/py/env.py0000666000000000000000000000550710320276123012304 0ustar rootrootfrom __future__ import nested_scopes # ................................................................................................................. #................................ imports import sys import os import re import getpass # ................................................................................................................. #................................ redirect interpreter output to console sys.stdout = KConsole sys.stderr = KConsole # print '[env.py]' # ................................................................................................................. #................................ globals true = 1 false = 0 def minmax (minValue, maxValue, value): """returns the value if it lies in the range [minValue, maxValue], the range borders otherwise""" return max(minValue, min(maxValue, value)) # ................................................................................. disable interactive help def help (request): """overrided help function to prevent accidentally using the interactive help, which would hang kikipy""" pydoc.help(request) def dirn (arg): """prints the result of a dir(arg) call in seperate lines""" print "\n".join(dir(arg)) # ................................................................................................................. # ............................... shortcuts Controller = kiki.Controller world = Controller.world sound = Controller.sound gui = Controller.gui console = KConsole.getConsole() kikipy_path = Controller.getKikiHome() + "/py/" # ................................................................................................................. # ............................... position and size of console console.setSize ((0,0)) console.setPosition ((0,-325)) console.setSize ((1024,290)) # ................................................................................................................. # ............................... some standard rotations rot0 = KQuaternion() rotz180 = KQuaternion.rotationAroundVector(180, KVector(0,0,1)) rotz90 = KQuaternion.rotationAroundVector(90, KVector(0,0,1)) roty270 = KQuaternion.rotationAroundVector(270, KVector(0,1,0)) roty180 = KQuaternion.rotationAroundVector(180, KVector(0,1,0)) roty90 = KQuaternion.rotationAroundVector(90, KVector(0,1,0)) roty0 = KQuaternion.rotationAroundVector(0, KVector(0,1,0)) rotx180 = KQuaternion.rotationAroundVector(180, KVector(1,0,0)) rotx90 = KQuaternion.rotationAroundVector(90, KVector(1,0,0)) # ................................................................................................................. # ............................... load files execfile(kikipy_path + "world.py")kiki/py/file.py0000666000000000000000000002403207644705763012453 0ustar rootroot if Controller.isDebugVersion(): print "[file.py]" # ................................................................................................................. # KikiPyFile # ................................................................................................................. class KikiPyFile (KikiPyBuffer): """ kikipy file buffer """ # ............................................................................................................. # INIT # ............................................................................................................. def __init__(self, editor, filename =""): """create a new file object""" KikiPyBuffer.__init__(self, editor) self.file_path = filename # ............................................................................................................. # FILE HANDLING # ............................................................................................................. def openFile (self, file_path): """loads and displays a python file""" try: file = open (file_path, "r") self.file_path = file_path except: try: file = open (file_path + ".py", "r") self.file_path = file_path + ".py" except: print "[*** Error ***] unable to open file", file_path self.editor.setStatus("file error") return 0 self.lines = replaceTabs(file.read(), 8).splitlines() if not len(self.lines): self.lines.append("") # need at least an empty line file.close() self.title_text = self.file_path self.setChanged(0) self.setCursor(KikiPos()) self.color_line_cache = {} return 1 # ............................................................................................................. def sameFile (self, file_path): """returns true, if file_path is the same as buffer file (with or without .py suffix)""" if not os.path.exists(file_path): file_path = file_path + ".py" if not os.path.exists(file_path): return 0 return os.path.samefile(self.file_path, file_path) # ............................................................................................................. def saveFile (self): """saves the buffer content under the current file path""" return self.saveFileAs(self.file_path) # ............................................................................................................. def saveFileAs (self, file_path): """saves the python file as file_path""" # ................................................................. backup if os.path.exists(file_path): # if file exists ... dir, file = os.path.split(file_path) import tempfile backup = tempfile.mktemp(file) import shutil shutil.copyfile (file_path, backup) # ... copy it to the tmp directory try: file = open (file_path, "w") except: print "[*** Error ***] unable to open file for writing ", file_path self.editor.setStatus("file error") return 0 file.write("\n".join(self.lines)) file.close() dir, file = os.path.split(file_path) import shutil shutil.copyfile(file_path, os.path.expanduser("~/Projects/kiki/py/") + file) # copy to project self.file_path = file_path self.title_text = self.file_path self.setChanged(0) # ............................................................................................................. def executeFile (self): """execute the loaded file in the interpreter""" self.saveFile() try: self.editor.widget.getPythonWindow().executeFile(self.file_path) except: console.show() else: self.editor.hide() # hide python widget console.hide() # and console # ............................................................................................................. # REGION EDITING # ............................................................................................................. def indentRegion (self): """indents the selected lines""" start, start_line, end, end_line = self.selectionRect() # sort selection for lineIndex in range (start_line, end_line): # iterate over selected lines self.insertTextAtPos(" ", KikiPos(0,lineIndex)) # insert four spaces at the start of line # ............................................................................................................. def outdentRegion (self): """outdents the selected lines""" start, start_line, end, end_line = self.selectionRect() # sort selection minStart = 1000 noSpacePat = re.compile(r"\S") # compile pattern for non space search for lineIndex in range (start_line, end_line): # find minimum length of leading spaces match = noSpacePat.search(self.lines[lineIndex]) # get match for first non space character if match: minStart = min(match.start(), minStart) minStart = min(4, minStart) # delete maximum is four if minStart: # minimum leading spaces found for lineIndex in range (start_line, end_line): # iterate over selected lines self.eraseLine(lineIndex, 0, minStart) # delete leading characters # ............................................................................................................. def commentRegion (self): """comments the selected lines by inserting '###' at start""" start, start_line, end, end_line = self.selectionRect() # sort selection for lineIndex in range (start_line, end_line): # iterate over selected lines self.insertTextAtPos("###", KikiPos(0,lineIndex)) # insert '###' at the start of line # ............................................................................................................. def uncommentRegion (self): """uncomments the selected lines by deleting leading '###'""" start, start_line, end, end_line = self.selectionRect() # sort selection for lineIndex in range(start_line, end_line): # iterate over selected lines if self.lines[lineIndex][:3] == "###": # if line starts with '###' self.eraseLine(lineIndex, 0, 3) # remove first three characters # ............................................................................................................. # KEYBOARD INPUT # ............................................................................................................. def handleKeyModChar (self, keyName, modName, character): """handles a key press""" # ................................................... buffer handles key first if KikiPyBuffer.handleKeyModChar(self, keyName, modName, character): return 1 # ................................................... return if keyName == "RETURN" or keyName == "KPENTER": self.splitLineAndIndent() # split line and indent return 1 # ................................................... control sequences if modName: # .................................................................. META if modName == "META": if keyName == "h": # META_h self.commentRegion() # comment region return 1 elif keyName == "RIGHTBRACKET": # META_] self.indentRegion() # indent region return 1 elif keyName == "LEFTBRACKET": # META_[ self.outdentRegion() # outdent region return 1 elif keyName == "r": # META_r self.executeFile() # save and execute file return 1 elif keyName == "s": # META_s self.saveFile() # save file return 1 elif keyName == "u": # META_u self.openFile(self.file_path) # revert to saved file return 1 elif modName == "SHIFT+META": if keyName == "h": # SHIFT+META_h self.uncommentRegion() # uncomment region return 1 return 0 kiki/py/highscore.py0000666000000000000000000001105710335746526013503 0ustar rootroot if Controller.isDebugVersion(): print "[highscore.py]" # ................................................................................................................. # KIKI HIGHSCORE # ................................................................................................................. class KikiHighscore (ConfigParser): """kiki highscore""" # ................................................................ init def __init__ (self): """initialization""" ConfigParser.__init__ (self) self.readfp (open(kikipy_path + "kiki.hsc")) try: if os.uname()[0] == "Darwin": self.highscore_file_path = os.path.expanduser ("~/Library/Preferences/kiki.hsc") else: self.highscore_file_path = os.path.expanduser ("~/.kiki.hsc") except: self.highscore_file_path = os.path.expanduser ("~/.kiki.hsc") try: self.read (self.highscore_file_path) except: print ("creating " + self.highscore_file_path) self.save () # ................................................................ minmoves for level def levelUserMoves (self, level_name): """reads users number of moves for level level_name from highscore file""" if not self.has_section (level_name): self.add_section (level_name) if self.has_option(level_name, getpass.getuser()): min_moves = int (self.get (level_name, getpass.getuser())) return min_moves else: return 0 # ................................................................ minmoves for level def levelParMoves (self, level_name): """reads par number of moves for level level_name from highscore file""" if not self.has_section (level_name): self.add_section (level_name) if self.has_option(level_name, "moves"): par_moves = int (self.get (level_name, "moves")) return par_moves else: self.set (level_name, "moves", "1000") return 1000 # ................................................................ finish level def levelFinished (self, level_name, moves): """writes data for finished level to highscore file""" level_num = level_list.index(level_name) if not self.has_section (level_name): self.add_section (level_name) if self.has_option(level_name, getpass.getuser()): # level already solved old_moves = int (self.get (level_name, getpass.getuser())) if moves < old_moves: self.set (level_name, getpass.getuser(), str (int (moves))) else: # first time solved self.set (level_name, getpass.getuser(), str (int (moves))) available_level_num = self.getLastAvailableLevel() self.set ("main", "last_level", level_list[min(available_level_num+2, len(level_list)-1)]) self.set ("main", "current_level", level_list[min(level_num+1, len(level_list)-1)]) self.save () # ................................................................ get last level def getLastAvailableLevel (self): """returns the index of last available level in level_list""" last_level = str(self.get("main", "last_level")) if last_level in level_list: return level_list.index(str(last_level)) else: return -1 # ................................................................ get last level def getLastLevel (self): """returns the index of last played level in level_list""" last_level = str(self.get("main", "current_level")) if last_level in level_list: return level_list.index(str(last_level)) else: return -1 # ................................................................ save def save (self): """save the highscore""" try: highscore_file = file (self.highscore_file_path, "w+") self.write (highscore_file) highscore_file.close() except: console.printError ("unable to write highscore to " + self.highscore_file_path) # ................................................................................................................. highscore = KikiHighscore () kiki/py/interpreter.py0000666000000000000000000001627707644705763014113 0ustar rootroot if Controller.isDebugVersion(): print "[interpreter.py]" import code # ................................................................................................................. # INTERPRETER BUFFER # ................................................................................................................. class KikiPyInterpreter (KikiPyBuffer, code.InteractiveConsole): """ kikipy interpreter buffer """ # ............................................................................................................. # INIT # ............................................................................................................. def __init__(self, editor): """initializes the interpreter with an editor""" KikiPyBuffer.__init__(self, editor) code.InteractiveConsole.__init__(self, globals()) self.title_text = "python" self.cmd_history = [['']] # history of interpreter commandos self.cmd_ptr = 0 # history index pointer self.buffer = [] # interpreter buffer self.filename = "kikipython" # interpreter filename # ............................................................................................................. def activate(self): """activates the buffer""" KikiPyBuffer.activate(self) sys.stdout = self # redirect in and output to self sys.stderr = self # ............................................................................................................. def clear(self): """clears the buffer""" self.lines = [""] KikiPyBuffer.clear(self) # ............................................................................................................. # INTERPRETE # ............................................................................................................. def splitLineAndInterprete(self): """pushes current line to the interpreter""" self.splitLine() # split line self.setCursor(0, self.lines[self.cursor.y+1]) # cursor to start of next line self.cmd_ptr = len(self.cmd_history)-1 buf = self.buffer # save the current interpreter buffer cmd = self.lines[self.cursor.y-1] retval = self.push(cmd) # push previous line to interpreter if retval: # interpreter says OK, but needs more input if not self.lines[self.cursor.y-1].isspace(): # if previous line not empty self.indentLine() # indent line else: # interpreter swallowed command if buf[0] and not self.buffer: self.cmd_history[self.cmd_ptr] = buf # insert interpreter buffer self.cmd_ptr += 1 self.cmd_history.append(['']) elif len(cmd) and not cmd.isspace(): # and it was not an empty line self.cmd_history[self.cmd_ptr] = cmd # insert line self.cmd_ptr += 1 self.cmd_history.append(['']) # ............................................................................................................. # HISTORY # ............................................................................................................. def executeHistory (self): for line in self.cmd_history[self.cmd_ptr]: self.push(line) # ............................................................................................................. def history (self, cmd_offset): """inserts or replaces a commando from the commando history""" numLines = len(self.cmd_history[self.cmd_ptr]) for i in range(numLines): self.eraseLine(self.cursor.y) # erase the previously displayed commando if self.lines: self.setCursor(self.cursor.x, self.cursor.y-1) self.cmd_ptr = minmax(0, len(self.cmd_history)-1, self.cmd_ptr+cmd_offset) # update the history index pointer self.lines.extend(self.cmd_history[self.cmd_ptr]) self.setCursor(len(self.lines[len(self.lines)-1]), len(self.lines)-1) # ............................................................................................................. def write (self, string): """writes the interpreter output""" if string == "\n": return if not len(self.lines[len(self.lines)-1]): del self.lines[len(self.lines)-1] # delete last line, if empty self.lines.extend(string.splitlines()) self.lines.append("") self.setCursor(len(self.lines[len(self.lines)-1]),len(self.lines)) # ............................................................................................................. # KEYBOARD INPUT # ............................................................................................................. def handleKeyModChar (self, keyName, modName, character): """handles a key press""" # ................................................... buffer handles key first if KikiPyBuffer.handleKeyModChar(self, keyName, modName, character): return 1 # ................................................... return if keyName == "RETURN" or keyName == "KPENTER": if modName == "CTRL": self.executeHistory() return 1 self.setCursor(len(self.lines[self.cursor.y]), self.cursor.y) # jump to end of line self.splitLineAndInterprete() # split line and execute return 1 # ................................................... control sequences if modName: # .................................................................. META if modName == "META": if keyName == "k": # META_k self.clear() # clear buffer return 1 # .................................................................. CTRL elif modName == "CTRL": if keyName == "UP" or keyName == "DOWN": # CTRL_UP and CTRL_DOWN dir = (keyName == "UP" and -1 or 1) self.history(dir) return 1 return 0 kiki/py/intro.py0000666000000000000000000001302310335754355012655 0ustar rootroot if Controller.isDebugVersion(): print "[intro.py]" # ................................................................................................................. # Intro Screen # ................................................................................................................. def display_story (index=0): story = [ Controller.getLocalizedString ("STORY_PAGE_1"), Controller.getLocalizedString ("STORY_PAGE_2"), Controller.getLocalizedString ("STORY_PAGE_3")] more_text = index < len(story)-1 less_text = index > 0 story_text = story[index] story_text += "\n\n$scale(0.5)(%d/%d)" % (index+1, len (story)) page = KikiPageText (story_text, more_text, less_text) page.getEventWithName ("hide").addAction (once (display_main_menu)) if more_text: page.getEventWithName ("next").addAction (once (lambda i=index+1: display_story (i))) if less_text: page.getEventWithName ("previous").addAction (once (lambda i=index-1: display_story (i))) # ................................................................................................................. def display_statistics (escape_action): score = 0 solved_levels = 0 all_levels = len(level_list) for level_name in level_list: user_moves = highscore.levelUserMoves (level_name) par_moves = highscore.levelParMoves (level_name) if user_moves: score += par_moves-user_moves solved_levels += 1 statistics = Controller.getLocalizedString ("STATISTICS_TEXT") % (solved_levels, all_levels, score) page = KikiScreenText () page.addText (statistics) page.getEventWithName ("hide").addAction (escape_action) Controller.getEventWithName ("escape").removeAllActions() page.show () # ................................................................................................................. def display_about (): about_menu = KikiMenu () about_menu.getEventWithName ("hide").addAction (once (display_main_menu)) about_menu.addItem ("$no_item" + Controller.getLocalizedString ("kiki the nano bot")) about_menu.addItem ("$no_item$scale(0.7)" + Controller.getLocalizedString ("version") + " 1.0.0") about_menu.addItem ("$no_item") about_menu.addItem ("$no_item" + "|" + Controller.getLocalizedString ("programmed by")) about_menu.addItem ("$no_item") about_menu.addItem ("$no_item kodi: |monsterkodi@users.sf.net") about_menu.addItem ("$no_item") about_menu.addItem ("$no_item" + "|" + Controller.getLocalizedString ("levels")) about_menu.addItem ("$no_item") about_menu.addItem ("$no_item" + "Michael Abel: |blocks, borg, circuit, conductor, cube, edge,") about_menu.addItem ("$no_item" + " |entropy, flower, gamma, machine, maze, mesh,") about_menu.addItem ("$no_item" + " |mini, neutron, nice, plate, pool, random,") about_menu.addItem ("$no_item" + " |sandbox, slick, throw, walls") about_menu.addItem ("$no_item" + "Niko Boehm: |captured") about_menu.addItem ("$no_item" + "Ben Griffin: |towers") about_menu.addItem ("$no_item") about_menu.addItem ("$no_item" + "|" + Controller.getLocalizedString ("translations")) about_menu.addItem ("$no_item") about_menu.addItem ("$no_item" + "Arthur Langereis: |dutch") about_menu.addItem ("$no_item" + "3ARRANO.com: |euskara") about_menu.addItem ("$no_item" + "F.C.Covett: |portuguese") about_menu.addItem ("$no_item" + "jay traveller: |spanish") about_menu.addItem ("$no_item" + "Ivan aka Fenris: |swedish") about_menu.addItem ("$no_item") about_menu.addItem (Controller.getLocalizedString ("main menu"), once (display_main_menu)) # ................................................................................................................. def display_main_menu (): m = KikiMenu (2) m.getProjection().setViewport (0.0, 0.0, 1.0, 0.4) m.setEscapeActive (Controller.isDebugVersion()) main_menu_action = once (display_main_menu) m.addItem ("$no_item$scale(2)" + Controller.getLocalizedString ("kiki the nano bot")) m.addItem ("$no_item") last_level = highscore.getLastLevel() if last_level >= 0: m.addItem (Controller.getLocalizedString ("continue"), once (lambda: KikiPyWorld().create (level_list[last_level]))) m.addItem (Controller.getLocalizedString ("load level"), once (lambda a=main_menu_action: levelSelection (last_level, a))) m.addItem (Controller.getLocalizedString ("statistics"), once (lambda a=main_menu_action: display_statistics (main_menu_action))) else: last_level = 0 m.addItem (Controller.getLocalizedString ("new game"), once (lambda: KikiPyWorld().create (level_list[0]))) m.addItem (Controller.getLocalizedString ("setup"), once (lambda: quickSetup (0, display_main_menu))) m.addItem (Controller.getLocalizedString ("story"), once (display_story)) m.addItem (Controller.getLocalizedString ("about"), once (display_about)) m.addItem (Controller.getLocalizedString ("quit"), once (Controller.quit)) w = KikiPyWorld () w.preview = true world.setCameraMode (world.CAMERA_FOLLOW) world.getProjection().setPosition (KVector (0,0,0)) w.create (level_list[min(last_level, len(level_list)-1)]) display_main_menu () kiki/py/kiki.cfg0000666000000000000000000000056110334517232012551 0ustar rootroot[sound] volume = 7 mute = no [game] speed = 7 [display] fov = 90 window_size = 800x600 fullscreen_size = 1600x1280 fullscreen = off language = english gamma = 5 [keyboard] shoot = SPACE change_view = PAGEDOWN move_backward = DOWN turn_right = RIGHT jump = CTRL turn_left = LEFT look_up = HOME move_forward = UP push = SHIFT look_down = END kiki/py/kiki.hsc0000666000000000000000000000434110340401671012563 0ustar rootroot[main] last_level = current_level = [blocks] moves = 13 micha-4d = 13 [bombs] moves = 21 monsterkodi = 21 [borg] moves = 8 micha-4d = 8 [bridge] moves = 54 monsterkodi = 54 [bronze] moves = 56 monsterkodi = 56 [captured] moves = 152 monsterkodi = 152 [church] moves = 94 monsterkodi = 94 [circuit] moves = 145 micha-4d = 145 [columns] moves = 30 monsterkodi = 30 [conductor] moves = 476 micha-4d = 476 [core] moves = 21 monsterkodi = 21 [cube] moves = 8 micha-4d = 8 monsterkodi = 13 [edge] moves = 40 micha-4d = 51 monsterkodi = 40 [electro] moves = 22 monsterkodi = 22 [elevate] moves = 36 monsterkodi = 36 [energy] moves = 12 monsterkodi = 12 [entropy] moves = 15 micha-4d = 15 [escape] moves = 22 monsterkodi = 22 [evil] moves = 388 monsterkodi = 388 [flower] moves = 14 monsterkodi = 14 micha-4d = 59 [gamma] moves = 20 micha-4d = 20 monsterkodi = 31 [gears] moves = 44 monsterkodi = 44 [gold] moves = 14 monsterkodi = 14 [grid] moves = 24 monsterkodi = 24 [hidden] moves = 88 monsterkodi = 88 [jump] moves = 22 monsterkodi = 22 [love] moves = 66 monsterkodi = 15 [machine] moves = 62 micha-4d = 62 [maze] moves = 18 micha-4d = 20 monsterkodi = 18 [mesh] moves = 101 micha-4d = 101 [mini] moves = 23 micha-4d = 23 monsterkodi = 31 [move] moves = 11 monsterkodi = 11 [mutants] moves = 24 monsterkodi = 24 [neutron] moves = 213 micha-4d = 379 monsterkodi = 213 [nice] moves = 13 micha-4d = 13 monsterkodi = 20 [plate] moves = 5 micha-4d = 5 [pool] moves = 70 micha-4d = 210 monsterkodi = 70 [random] moves = 11 micha-4d = 11 monsterkodi = 15 [regal] moves = 280 monsterkodi = 280 [rings] moves = 25 monsterkodi = 25 [sandbox] moves = 89 micha-4d = 119 monsterkodi = 89 [slick] moves = 24 micha-4d = 24 [start] moves = 13 monsterkodi = 13 [steps] moves = 5 monsterkodi = 5 [strange] moves = 120 monsterkodi = 120 [stones] moves = 38 monsterkodi = 38 [switch] moves = 9 monsterkodi = 9 [throw] moves = 31 micha-4d = 31 [towers] moves = 18 monsterkodi = 18 [walls] moves = 22 micha-4d = 22 monsterkodi = 30 kiki/py/kiki.py0000666000000000000000000024564410334735415012464 0ustar rootroot# This file was created automatically by SWIG. # Don't modify this file, modify the SWIG interface instead. # This file is compatible with both classic and new-style classes. import _kiki def _swig_setattr_nondynamic(self,class_type,name,value,static=1): if (name == "this"): if isinstance(value, class_type): self.__dict__[name] = value.this if hasattr(value,"thisown"): self.__dict__["thisown"] = value.thisown del value.thisown return method = class_type.__swig_setmethods__.get(name,None) if method: return method(self,value) if (not static) or hasattr(self,name) or (name == "thisown"): self.__dict__[name] = value else: raise AttributeError("You cannot add attributes to %s" % self) def _swig_setattr(self,class_type,name,value): return _swig_setattr_nondynamic(self,class_type,name,value,0) def _swig_getattr(self,class_type,name): method = class_type.__swig_getmethods__.get(name,None) if method: return method(self) raise AttributeError,name import types try: _object = types.ObjectType _newclass = 1 except AttributeError: class _object : pass _newclass = 0 del types class KikiPos(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPos, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPos, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiPos instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["x"] = _kiki.KikiPos_x_set __swig_getmethods__["x"] = _kiki.KikiPos_x_get if _newclass:x = property(_kiki.KikiPos_x_get, _kiki.KikiPos_x_set) __swig_setmethods__["y"] = _kiki.KikiPos_y_set __swig_getmethods__["y"] = _kiki.KikiPos_y_get if _newclass:y = property(_kiki.KikiPos_y_get, _kiki.KikiPos_y_set) __swig_setmethods__["z"] = _kiki.KikiPos_z_set __swig_getmethods__["z"] = _kiki.KikiPos_z_get if _newclass:z = property(_kiki.KikiPos_z_get, _kiki.KikiPos_z_set) def __init__(self, *args): _swig_setattr(self, KikiPos, 'this', _kiki.new_KikiPos(*args)) _swig_setattr(self, KikiPos, 'thisown', 1) def __sub__(*args): return _kiki.KikiPos___sub__(*args) def __add__(*args): return _kiki.KikiPos___add__(*args) def __iadd__(*args): return _kiki.KikiPos___iadd__(*args) def __isub__(*args): return _kiki.KikiPos___isub__(*args) def getString(*args): return _kiki.KikiPos_getString(*args) def __eq__(*args): return _kiki.KikiPos___eq__(*args) def __ne__(*args): return _kiki.KikiPos___ne__(*args) def __str__(*args): return _kiki.KikiPos___str__(*args) def __del__(self, destroy=_kiki.delete_KikiPos): try: if self.thisown: destroy(self) except: pass class KikiPosPtr(KikiPos): def __init__(self, this): _swig_setattr(self, KikiPos, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPos, 'thisown', 0) _swig_setattr(self, KikiPos,self.__class__,KikiPos) _kiki.KikiPos_swigregister(KikiPosPtr) class KVector(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KVector, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KVector, name) def __repr__(self): return "<%s.%s; proxy of C++ KVector instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KVector, 'this', _kiki.new_KVector(*args)) _swig_setattr(self, KVector, 'thisown', 1) def reset(*args): return _kiki.KVector_reset(*args) def normalize(*args): return _kiki.KVector_normalize(*args) def __iadd__(*args): return _kiki.KVector___iadd__(*args) def __isub__(*args): return _kiki.KVector___isub__(*args) def __imul__(*args): return _kiki.KVector___imul__(*args) def __idiv__(*args): return _kiki.KVector___idiv__(*args) def cross(*args): return _kiki.KVector_cross(*args) def __sub__(*args): return _kiki.KVector___sub__(*args) def __add__(*args): return _kiki.KVector___add__(*args) def __mul__(*args): return _kiki.KVector___mul__(*args) def __div__(*args): return _kiki.KVector___div__(*args) def perpendicular(*args): return _kiki.KVector_perpendicular(*args) def parallel(*args): return _kiki.KVector_parallel(*args) def reflect(*args): return _kiki.KVector_reflect(*args) def normal(*args): return _kiki.KVector_normal(*args) def length(*args): return _kiki.KVector_length(*args) def angle(*args): return _kiki.KVector_angle(*args) def xyangle(*args): return _kiki.KVector_xyangle(*args) def xyperp(*args): return _kiki.KVector_xyperp(*args) def round(*args): return _kiki.KVector_round(*args) def glVertex(*args): return _kiki.KVector_glVertex(*args) def __getitem__(*args): return _kiki.KVector___getitem__(*args) def __str__(*args): return _kiki.KVector___str__(*args) def __del__(self, destroy=_kiki.delete_KVector): try: if self.thisown: destroy(self) except: pass class KVectorPtr(KVector): def __init__(self, this): _swig_setattr(self, KVector, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KVector, 'thisown', 0) _swig_setattr(self, KVector,self.__class__,KVector) _kiki.KVector_swigregister(KVectorPtr) class KQuaternion(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KQuaternion, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KQuaternion, name) def __repr__(self): return "<%s.%s; proxy of C++ KQuaternion instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["w"] = _kiki.KQuaternion_w_set __swig_getmethods__["w"] = _kiki.KQuaternion_w_get if _newclass:w = property(_kiki.KQuaternion_w_get, _kiki.KQuaternion_w_set) __swig_setmethods__["x"] = _kiki.KQuaternion_x_set __swig_getmethods__["x"] = _kiki.KQuaternion_x_get if _newclass:x = property(_kiki.KQuaternion_x_get, _kiki.KQuaternion_x_set) __swig_setmethods__["y"] = _kiki.KQuaternion_y_set __swig_getmethods__["y"] = _kiki.KQuaternion_y_get if _newclass:y = property(_kiki.KQuaternion_y_get, _kiki.KQuaternion_y_set) __swig_setmethods__["z"] = _kiki.KQuaternion_z_set __swig_getmethods__["z"] = _kiki.KQuaternion_z_get if _newclass:z = property(_kiki.KQuaternion_z_get, _kiki.KQuaternion_z_set) def __init__(self, *args): _swig_setattr(self, KQuaternion, 'this', _kiki.new_KQuaternion(*args)) _swig_setattr(self, KQuaternion, 'thisown', 1) __swig_getmethods__["rotationAroundVector"] = lambda x: _kiki.KQuaternion_rotationAroundVector if _newclass:rotationAroundVector = staticmethod(_kiki.KQuaternion_rotationAroundVector) def rotate(*args): return _kiki.KQuaternion_rotate(*args) def normalize(*args): return _kiki.KQuaternion_normalize(*args) def invert(*args): return _kiki.KQuaternion_invert(*args) def conjugate(*args): return _kiki.KQuaternion_conjugate(*args) def getNormal(*args): return _kiki.KQuaternion_getNormal(*args) def getConjugate(*args): return _kiki.KQuaternion_getConjugate(*args) def getInverse(*args): return _kiki.KQuaternion_getInverse(*args) def length(*args): return _kiki.KQuaternion_length(*args) def glRotate(*args): return _kiki.KQuaternion_glRotate(*args) def slerp(*args): return _kiki.KQuaternion_slerp(*args) def __mul__(*args): return _kiki.KQuaternion___mul__(*args) def __str__(*args): return _kiki.KQuaternion___str__(*args) def __del__(self, destroy=_kiki.delete_KQuaternion): try: if self.thisown: destroy(self) except: pass class KQuaternionPtr(KQuaternion): def __init__(self, this): _swig_setattr(self, KQuaternion, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KQuaternion, 'thisown', 0) _swig_setattr(self, KQuaternion,self.__class__,KQuaternion) _kiki.KQuaternion_swigregister(KQuaternionPtr) KQuaternion_rotationAroundVector = _kiki.KQuaternion_rotationAroundVector class KColor(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KColor, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KColor, name) def __repr__(self): return "<%s.%s; proxy of C++ KColor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KColor, 'this', _kiki.new_KColor(*args)) _swig_setattr(self, KColor, 'thisown', 1) def setValues(*args): return _kiki.KColor_setValues(*args) def setRed(*args): return _kiki.KColor_setRed(*args) def setGreen(*args): return _kiki.KColor_setGreen(*args) def setBlue(*args): return _kiki.KColor_setBlue(*args) def setAlpha(*args): return _kiki.KColor_setAlpha(*args) def getRed(*args): return _kiki.KColor_getRed(*args) def getGreen(*args): return _kiki.KColor_getGreen(*args) def getBlue(*args): return _kiki.KColor_getBlue(*args) def getAlpha(*args): return _kiki.KColor_getAlpha(*args) def glColor(*args): return _kiki.KColor_glColor(*args) def __str__(*args): return _kiki.KColor___str__(*args) def __del__(self, destroy=_kiki.delete_KColor): try: if self.thisown: destroy(self) except: pass class KColorPtr(KColor): def __init__(self, this): _swig_setattr(self, KColor, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KColor, 'thisown', 0) _swig_setattr(self, KColor,self.__class__,KColor) _kiki.KColor_swigregister(KColorPtr) class KProjection(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KProjection, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KProjection, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KProjection instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def focusOn(*args): return _kiki.KProjection_focusOn(*args) def setFov(*args): return _kiki.KProjection_setFov(*args) def getFov(*args): return _kiki.KProjection_getFov(*args) def setViewport(*args): return _kiki.KProjection_setViewport(*args) def setPosition(*args): return _kiki.KProjection_setPosition(*args) class KProjectionPtr(KProjection): def __init__(self, this): _swig_setattr(self, KProjection, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KProjection, 'thisown', 0) _swig_setattr(self, KProjection,self.__class__,KProjection) _kiki.KProjection_swigregister(KProjectionPtr) class KKey(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KKey, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KKey, name) def __repr__(self): return "<%s.%s; proxy of C++ KKey instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KKey, 'this', _kiki.new_KKey(*args)) _swig_setattr(self, KKey, 'thisown', 1) __swig_setmethods__["name"] = _kiki.KKey_name_set __swig_getmethods__["name"] = _kiki.KKey_name_get if _newclass:name = property(_kiki.KKey_name_get, _kiki.KKey_name_set) def getUnmodifiedName(*args): return _kiki.KKey_getUnmodifiedName(*args) def getModifierName(*args): return _kiki.KKey_getModifierName(*args) class KKeyPtr(KKey): def __init__(self, this): _swig_setattr(self, KKey, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KKey, 'thisown', 0) _swig_setattr(self, KKey,self.__class__,KKey) _kiki.KKey_swigregister(KKeyPtr) class KikiAction(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiAction, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiAction, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiAction instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) ONCE = _kiki.KikiAction_ONCE CONTINUOUS = _kiki.KikiAction_CONTINUOUS REPEAT = _kiki.KikiAction_REPEAT def __init__(self, *args): _swig_setattr(self, KikiAction, 'this', _kiki.new_KikiAction(*args)) _swig_setattr(self, KikiAction, 'thisown', 1) def getId(*args): return _kiki.KikiAction_getId(*args) def getName(*args): return _kiki.KikiAction_getName(*args) def getRelativeTime(*args): return _kiki.KikiAction_getRelativeTime(*args) def getRelativeDelta(*args): return _kiki.KikiAction_getRelativeDelta(*args) def getDuration(*args): return _kiki.KikiAction_getDuration(*args) def setDuration(*args): return _kiki.KikiAction_setDuration(*args) class KikiActionPtr(KikiAction): def __init__(self, this): _swig_setattr(self, KikiAction, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiAction, 'thisown', 0) _swig_setattr(self, KikiAction,self.__class__,KikiAction) _kiki.KikiAction_swigregister(KikiActionPtr) class KikiPyAction(KikiAction): __swig_setmethods__ = {} for _s in [KikiAction]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPyAction, name, value) __swig_getmethods__ = {} for _s in [KikiAction]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPyAction, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiPyAction instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiPyAction, 'this', _kiki.new_KikiPyAction(*args)) _swig_setattr(self, KikiPyAction, 'thisown', 1) def __del__(self, destroy=_kiki.delete_KikiPyAction): try: if self.thisown: destroy(self) except: pass def __init__(self,*args): self.this = apply (_kiki.new_KikiPyAction, (self,) + args) self.thisown = 1 class KikiPyActionPtr(KikiPyAction): def __init__(self, this): _swig_setattr(self, KikiPyAction, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPyAction, 'thisown', 0) _swig_setattr(self, KikiPyAction,self.__class__,KikiPyAction) _kiki.KikiPyAction_swigregister(KikiPyActionPtr) class KikiEvent(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiEvent, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiEvent, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiEvent, 'this', _kiki.new_KikiEvent(*args)) _swig_setattr(self, KikiEvent, 'thisown', 1) def addAction(*args): return _kiki.KikiEvent_addAction(*args) def removeAction(*args): return _kiki.KikiEvent_removeAction(*args) def removeAllActions(*args): return _kiki.KikiEvent_removeAllActions(*args) def removeActionsOfObject(*args): return _kiki.KikiEvent_removeActionsOfObject(*args) def removeActionWithName(*args): return _kiki.KikiEvent_removeActionWithName(*args) def triggerActions(*args): return _kiki.KikiEvent_triggerActions(*args) def getTime(*args): return _kiki.KikiEvent_getTime(*args) class KikiEventPtr(KikiEvent): def __init__(self, this): _swig_setattr(self, KikiEvent, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiEvent, 'thisown', 0) _swig_setattr(self, KikiEvent,self.__class__,KikiEvent) _kiki.KikiEvent_swigregister(KikiEventPtr) class KikiActionObject(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiActionObject, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiActionObject, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiActionObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def addAction(*args): return _kiki.KikiActionObject_addAction(*args) def removeAction(*args): return _kiki.KikiActionObject_removeAction(*args) def startTimedAction(*args): return _kiki.KikiActionObject_startTimedAction(*args) def startTimer(*args): return _kiki.KikiActionObject_startTimer(*args) def getActionWithName(*args): return _kiki.KikiActionObject_getActionWithName(*args) def getActionWithId(*args): return _kiki.KikiActionObject_getActionWithId(*args) def addEventWithName(*args): return _kiki.KikiActionObject_addEventWithName(*args) def getEventWithName(*args): return _kiki.KikiActionObject_getEventWithName(*args) def getEventWithId(*args): return _kiki.KikiActionObject_getEventWithId(*args) def getClassName(*args): return _kiki.KikiActionObject_getClassName(*args) class KikiActionObjectPtr(KikiActionObject): def __init__(self, this): _swig_setattr(self, KikiActionObject, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiActionObject, 'thisown', 0) _swig_setattr(self, KikiActionObject,self.__class__,KikiActionObject) _kiki.KikiActionObject_swigregister(KikiActionObjectPtr) class KikiObject(KikiActionObject): __swig_setmethods__ = {} for _s in [KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiObject, name, value) __swig_getmethods__ = {} for _s in [KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiObject, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def setName(*args): return _kiki.KikiObject_setName(*args) def getName(*args): return _kiki.KikiObject_getName(*args) def getPos(*args): return _kiki.KikiObject_getPos(*args) def setPosition(*args): return _kiki.KikiObject_setPosition(*args) def getPosition(*args): return _kiki.KikiObject_getPosition(*args) def setOrientation(*args): return _kiki.KikiObject_setOrientation(*args) def getOrientation(*args): return _kiki.KikiObject_getOrientation(*args) def setCurrentOrientation(*args): return _kiki.KikiObject_setCurrentOrientation(*args) def getCurrentOrientation(*args): return _kiki.KikiObject_getCurrentOrientation(*args) def isSpaceEgoistic(*args): return _kiki.KikiObject_isSpaceEgoistic(*args) def getClassName(*args): return _kiki.KikiObject_getClassName(*args) class KikiObjectPtr(KikiObject): def __init__(self, this): _swig_setattr(self, KikiObject, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiObject, 'thisown', 0) _swig_setattr(self, KikiObject,self.__class__,KikiObject) _kiki.KikiObject_swigregister(KikiObjectPtr) class KikiBotStatus(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBotStatus, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiBotStatus, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBotStatus instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def getMoves(*args): return _kiki.KikiBotStatus_getMoves(*args) def setMoves(*args): return _kiki.KikiBotStatus_setMoves(*args) def addMoves(*args): return _kiki.KikiBotStatus_addMoves(*args) def getMinMoves(*args): return _kiki.KikiBotStatus_getMinMoves(*args) def setMinMoves(*args): return _kiki.KikiBotStatus_setMinMoves(*args) class KikiBotStatusPtr(KikiBotStatus): def __init__(self, this): _swig_setattr(self, KikiBotStatus, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBotStatus, 'thisown', 0) _swig_setattr(self, KikiBotStatus,self.__class__,KikiBotStatus) _kiki.KikiBotStatus_swigregister(KikiBotStatusPtr) class KikiBotFume(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBotFume, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBotFume, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBotFume instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBotFume_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBotFume_setObjectColor) class KikiBotFumePtr(KikiBotFume): def __init__(self, this): _swig_setattr(self, KikiBotFume, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBotFume, 'thisown', 0) _swig_setattr(self, KikiBotFume,self.__class__,KikiBotFume) _kiki.KikiBotFume_swigregister(KikiBotFumePtr) KikiBotFume_setObjectColor = _kiki.KikiBotFume_setObjectColor class KikiBot(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBot, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBot, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBot instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def isDead(*args): return _kiki.KikiBot_isDead(*args) def getDown(*args): return _kiki.KikiBot_getDown(*args) def getUp(*args): return _kiki.KikiBot_getUp(*args) def getDir(*args): return _kiki.KikiBot_getDir(*args) def setMove(*args): return _kiki.KikiBot_setMove(*args) def getStatus(*args): return _kiki.KikiBot_getStatus(*args) class KikiBotPtr(KikiBot): def __init__(self, this): _swig_setattr(self, KikiBot, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBot, 'thisown', 0) _swig_setattr(self, KikiBot,self.__class__,KikiBot) _kiki.KikiBot_swigregister(KikiBotPtr) class KikiStatusDisplay(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiStatusDisplay, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiStatusDisplay, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiStatusDisplay instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def show(*args): return _kiki.KikiStatusDisplay_show(*args) def hide(*args): return _kiki.KikiStatusDisplay_hide(*args) class KikiStatusDisplayPtr(KikiStatusDisplay): def __init__(self, this): _swig_setattr(self, KikiStatusDisplay, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiStatusDisplay, 'thisown', 0) _swig_setattr(self, KikiStatusDisplay,self.__class__,KikiStatusDisplay) _kiki.KikiStatusDisplay_swigregister(KikiStatusDisplayPtr) class KikiPlayback(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPlayback, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPlayback, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPlayback instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["start"] = lambda x: _kiki.KikiPlayback_start if _newclass:start = staticmethod(_kiki.KikiPlayback_start) __swig_getmethods__["stop"] = lambda x: _kiki.KikiPlayback_stop if _newclass:stop = staticmethod(_kiki.KikiPlayback_stop) class KikiPlaybackPtr(KikiPlayback): def __init__(self, this): _swig_setattr(self, KikiPlayback, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPlayback, 'thisown', 0) _swig_setattr(self, KikiPlayback,self.__class__,KikiPlayback) _kiki.KikiPlayback_swigregister(KikiPlaybackPtr) KikiPlayback_start = _kiki.KikiPlayback_start KikiPlayback_stop = _kiki.KikiPlayback_stop class KikiPlayer(KikiBot): __swig_setmethods__ = {} for _s in [KikiBot]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPlayer, name, value) __swig_getmethods__ = {} for _s in [KikiBot]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPlayer, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPlayer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def die(*args): return _kiki.KikiPlayer_die(*args) def reborn(*args): return _kiki.KikiPlayer_reborn(*args) def reset(*args): return _kiki.KikiPlayer_reset(*args) def startRecorder(*args): return _kiki.KikiPlayer_startRecorder(*args) def saveRecorder(*args): return _kiki.KikiPlayer_saveRecorder(*args) def getProjection(*args): return _kiki.KikiPlayer_getProjection(*args) def handleKey(*args): return _kiki.KikiPlayer_handleKey(*args) def handleKeyRelease(*args): return _kiki.KikiPlayer_handleKeyRelease(*args) def recordKeyForAction(*args): return _kiki.KikiPlayer_recordKeyForAction(*args) __swig_getmethods__["getActionForKey"] = lambda x: _kiki.KikiPlayer_getActionForKey if _newclass:getActionForKey = staticmethod(_kiki.KikiPlayer_getActionForKey) __swig_getmethods__["getKeyForAction"] = lambda x: _kiki.KikiPlayer_getKeyForAction if _newclass:getKeyForAction = staticmethod(_kiki.KikiPlayer_getKeyForAction) __swig_getmethods__["setKeyForAction"] = lambda x: _kiki.KikiPlayer_setKeyForAction if _newclass:setKeyForAction = staticmethod(_kiki.KikiPlayer_setKeyForAction) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiPlayer_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiPlayer_setObjectColor) class KikiPlayerPtr(KikiPlayer): def __init__(self, this): _swig_setattr(self, KikiPlayer, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPlayer, 'thisown', 0) _swig_setattr(self, KikiPlayer,self.__class__,KikiPlayer) _kiki.KikiPlayer_swigregister(KikiPlayerPtr) KikiPlayer_getActionForKey = _kiki.KikiPlayer_getActionForKey KikiPlayer_getKeyForAction = _kiki.KikiPlayer_getKeyForAction KikiPlayer_setKeyForAction = _kiki.KikiPlayer_setKeyForAction KikiPlayer_setObjectColor = _kiki.KikiPlayer_setObjectColor class KikiMutant(KikiBot): __swig_setmethods__ = {} for _s in [KikiBot]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMutant, name, value) __swig_getmethods__ = {} for _s in [KikiBot]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMutant, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMutant instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMutant, 'this', _kiki.new_KikiMutant(*args)) _swig_setattr(self, KikiMutant, 'thisown', 1) def die(*args): return _kiki.KikiMutant_die(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMutant_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMutant_setObjectColor) class KikiMutantPtr(KikiMutant): def __init__(self, this): _swig_setattr(self, KikiMutant, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMutant, 'thisown', 0) _swig_setattr(self, KikiMutant,self.__class__,KikiMutant) _kiki.KikiMutant_swigregister(KikiMutantPtr) KikiMutant_setObjectColor = _kiki.KikiMutant_setObjectColor class KikiSound(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSound, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiSound, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiSound instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def toggleMute(*args): return _kiki.KikiSound_toggleMute(*args) def setMute(*args): return _kiki.KikiSound_setMute(*args) def isMute(*args): return _kiki.KikiSound_isMute(*args) def setSoundVolume(*args): return _kiki.KikiSound_setSoundVolume(*args) def getSoundVolume(*args): return _kiki.KikiSound_getSoundVolume(*args) def playSound(*args): return _kiki.KikiSound_playSound(*args) def playSoundAtPos(*args): return _kiki.KikiSound_playSoundAtPos(*args) class KikiSoundPtr(KikiSound): def __init__(self, this): _swig_setattr(self, KikiSound, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSound, 'thisown', 0) _swig_setattr(self, KikiSound,self.__class__,KikiSound) _kiki.KikiSound_swigregister(KikiSoundPtr) class KikiWorld(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWorld, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiWorld, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiWorld instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) CAMERA_INSIDE = _kiki.KikiWorld_CAMERA_INSIDE CAMERA_BEHIND = _kiki.KikiWorld_CAMERA_BEHIND CAMERA_FOLLOW = _kiki.KikiWorld_CAMERA_FOLLOW def setSize(*args): return _kiki.KikiWorld_setSize(*args) def getSize(*args): return _kiki.KikiWorld_getSize(*args) def setName(*args): return _kiki.KikiWorld_setName(*args) def getName(*args): return _kiki.KikiWorld_getName(*args) def init(*args): return _kiki.KikiWorld_init(*args) def setDisplayShadows(*args): return _kiki.KikiWorld_setDisplayShadows(*args) def setDisplayRaster(*args): return _kiki.KikiWorld_setDisplayRaster(*args) def setDisplayBorder(*args): return _kiki.KikiWorld_setDisplayBorder(*args) def setRasterSize(*args): return _kiki.KikiWorld_setRasterSize(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWorld_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWorld_setObjectColor) def changeCameraMode(*args): return _kiki.KikiWorld_changeCameraMode(*args) def getCameraMode(*args): return _kiki.KikiWorld_getCameraMode(*args) def setCameraMode(*args): return _kiki.KikiWorld_setCameraMode(*args) def getProjection(*args): return _kiki.KikiWorld_getProjection(*args) def addObjectAtPos(*args): return _kiki.KikiWorld_addObjectAtPos(*args) def setObjectAtPos(*args): return _kiki.KikiWorld_setObjectAtPos(*args) def unsetObject(*args): return _kiki.KikiWorld_unsetObject(*args) def removeObject(*args): return _kiki.KikiWorld_removeObject(*args) def deleteObject(*args): return _kiki.KikiWorld_deleteObject(*args) def deleteAllObjects(*args): return _kiki.KikiWorld_deleteAllObjects(*args) def deleteObjectsWithClassName(*args): return _kiki.KikiWorld_deleteObjectsWithClassName(*args) def getObjectWithName(*args): return _kiki.KikiWorld_getObjectWithName(*args) def moveObjectToPos(*args): return _kiki.KikiWorld_moveObjectToPos(*args) def objectWillMoveToPos(*args): return _kiki.KikiWorld_objectWillMoveToPos(*args) def objectMovedFromPos(*args): return _kiki.KikiWorld_objectMovedFromPos(*args) def getBotAtPos(*args): return _kiki.KikiWorld_getBotAtPos(*args) def getOccupantAtPos(*args): return _kiki.KikiWorld_getOccupantAtPos(*args) def getRealOccupantAtPos(*args): return _kiki.KikiWorld_getRealOccupantAtPos(*args) def getNearestValidPos(*args): return _kiki.KikiWorld_getNearestValidPos(*args) def isInvalidPos(*args): return _kiki.KikiWorld_isInvalidPos(*args) def isValidPos(*args): return _kiki.KikiWorld_isValidPos(*args) def isUnoccupiedPos(*args): return _kiki.KikiWorld_isUnoccupiedPos(*args) def isOccupiedPos(*args): return _kiki.KikiWorld_isOccupiedPos(*args) def posToIndex(*args): return _kiki.KikiWorld_posToIndex(*args) def indexToPos(*args): return _kiki.KikiWorld_indexToPos(*args) def getPickedPos(*args): return _kiki.KikiWorld_getPickedPos(*args) class KikiWorldPtr(KikiWorld): def __init__(self, this): _swig_setattr(self, KikiWorld, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWorld, 'thisown', 0) _swig_setattr(self, KikiWorld,self.__class__,KikiWorld) _kiki.KikiWorld_swigregister(KikiWorldPtr) KikiWorld_setObjectColor = _kiki.KikiWorld_setObjectColor class KEventHandler(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KEventHandler, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KEventHandler, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KEventHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def quit(*args): return _kiki.KEventHandler_quit(*args) __swig_getmethods__["getMouseState"] = lambda x: _kiki.KEventHandler_getMouseState if _newclass:getMouseState = staticmethod(_kiki.KEventHandler_getMouseState) __swig_getmethods__["getMousePos"] = lambda x: _kiki.KEventHandler_getMousePos if _newclass:getMousePos = staticmethod(_kiki.KEventHandler_getMousePos) __swig_getmethods__["getMouseDelta"] = lambda x: _kiki.KEventHandler_getMouseDelta if _newclass:getMouseDelta = staticmethod(_kiki.KEventHandler_getMouseDelta) __swig_getmethods__["getScreenSize"] = lambda x: _kiki.KEventHandler_getScreenSize if _newclass:getScreenSize = staticmethod(_kiki.KEventHandler_getScreenSize) __swig_getmethods__["setScreenSize"] = lambda x: _kiki.KEventHandler_setScreenSize if _newclass:setScreenSize = staticmethod(_kiki.KEventHandler_setScreenSize) __swig_getmethods__["getFullscreen"] = lambda x: _kiki.KEventHandler_getFullscreen if _newclass:getFullscreen = staticmethod(_kiki.KEventHandler_getFullscreen) __swig_getmethods__["setFullscreen"] = lambda x: _kiki.KEventHandler_setFullscreen if _newclass:setFullscreen = staticmethod(_kiki.KEventHandler_setFullscreen) __swig_getmethods__["getTime"] = lambda x: _kiki.KEventHandler_getTime if _newclass:getTime = staticmethod(_kiki.KEventHandler_getTime) def setWireframeMode(*args): return _kiki.KEventHandler_setWireframeMode(*args) def setDisplayFps(*args): return _kiki.KEventHandler_setDisplayFps(*args) def getDisplayFps(*args): return _kiki.KEventHandler_getDisplayFps(*args) class KEventHandlerPtr(KEventHandler): def __init__(self, this): _swig_setattr(self, KEventHandler, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KEventHandler, 'thisown', 0) _swig_setattr(self, KEventHandler,self.__class__,KEventHandler) _kiki.KEventHandler_swigregister(KEventHandlerPtr) KEventHandler_getMouseState = _kiki.KEventHandler_getMouseState KEventHandler_getMousePos = _kiki.KEventHandler_getMousePos KEventHandler_getMouseDelta = _kiki.KEventHandler_getMouseDelta KEventHandler_getScreenSize = _kiki.KEventHandler_getScreenSize KEventHandler_setScreenSize = _kiki.KEventHandler_setScreenSize KEventHandler_getFullscreen = _kiki.KEventHandler_getFullscreen KEventHandler_setFullscreen = _kiki.KEventHandler_setFullscreen KEventHandler_getTime = _kiki.KEventHandler_getTime class KikiController(KEventHandler,KikiActionObject): __swig_setmethods__ = {} for _s in [KEventHandler,KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiController, name, value) __swig_getmethods__ = {} for _s in [KEventHandler,KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiController, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiController instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["gui"] = _kiki.KikiController_gui_set __swig_getmethods__["gui"] = _kiki.KikiController_gui_get if _newclass:gui = property(_kiki.KikiController_gui_get, _kiki.KikiController_gui_set) __swig_setmethods__["sound"] = _kiki.KikiController_sound_set __swig_getmethods__["sound"] = _kiki.KikiController_sound_get if _newclass:sound = property(_kiki.KikiController_sound_get, _kiki.KikiController_sound_set) __swig_setmethods__["world"] = _kiki.KikiController_world_set __swig_getmethods__["world"] = _kiki.KikiController_world_get if _newclass:world = property(_kiki.KikiController_world_get, _kiki.KikiController_world_set) __swig_setmethods__["player"] = _kiki.KikiController_player_set __swig_getmethods__["player"] = _kiki.KikiController_player_get if _newclass:player = property(_kiki.KikiController_player_get, _kiki.KikiController_player_set) __swig_setmethods__["python"] = _kiki.KikiController_python_set __swig_getmethods__["python"] = _kiki.KikiController_python_get if _newclass:python = property(_kiki.KikiController_python_get, _kiki.KikiController_python_set) __swig_setmethods__["player_status"] = _kiki.KikiController_player_status_set __swig_getmethods__["player_status"] = _kiki.KikiController_player_status_get if _newclass:player_status = property(_kiki.KikiController_player_status_get, _kiki.KikiController_player_status_set) __swig_setmethods__["timer_event"] = _kiki.KikiController_timer_event_set __swig_getmethods__["timer_event"] = _kiki.KikiController_timer_event_get if _newclass:timer_event = property(_kiki.KikiController_timer_event_get, _kiki.KikiController_timer_event_set) def getPlayer(*args): return _kiki.KikiController_getPlayer(*args) def unmapMsTime(*args): return _kiki.KikiController_unmapMsTime(*args) def mapMsTime(*args): return _kiki.KikiController_mapMsTime(*args) def setSpeed(*args): return _kiki.KikiController_setSpeed(*args) def getSpeed(*args): return _kiki.KikiController_getSpeed(*args) def getKikiHome(*args): return _kiki.KikiController_getKikiHome(*args) def setGamma(*args): return _kiki.KikiController_setGamma(*args) def getGamma(*args): return _kiki.KikiController_getGamma(*args) def changeScreenSize(*args): return _kiki.KikiController_changeScreenSize(*args) def displayText(*args): return _kiki.KikiController_displayText(*args) def getLocalizedString(*args): return _kiki.KikiController_getLocalizedString(*args) def isDebugVersion(*args): return _kiki.KikiController_isDebugVersion(*args) class KikiControllerPtr(KikiController): def __init__(self, this): _swig_setattr(self, KikiController, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiController, 'thisown', 0) _swig_setattr(self, KikiController,self.__class__,KikiController) _kiki.KikiController_swigregister(KikiControllerPtr) replaceTabs = _kiki.replaceTabs class KWindow(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KWindow, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KWindow, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def isVisible(*args): return _kiki.KWindow_isVisible(*args) def setVisibility(*args): return _kiki.KWindow_setVisibility(*args) def toggleVisibility(*args): return _kiki.KWindow_toggleVisibility(*args) def maximize(*args): return _kiki.KWindow_maximize(*args) def show(*args): return _kiki.KWindow_show(*args) def hide(*args): return _kiki.KWindow_hide(*args) def close(*args): return _kiki.KWindow_close(*args) def setSize(*args): return _kiki.KWindow_setSize(*args) def setPosition(*args): return _kiki.KWindow_setPosition(*args) class KWindowPtr(KWindow): def __init__(self, this): _swig_setattr(self, KWindow, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KWindow, 'thisown', 0) _swig_setattr(self, KWindow,self.__class__,KWindow) _kiki.KWindow_swigregister(KWindowPtr) kiki = _kiki.kiki class KikiText(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiText, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) base_color = _kiki.KikiText_base_color bright_color = _kiki.KikiText_bright_color dark_color = _kiki.KikiText_dark_color def __init__(self, *args): _swig_setattr(self, KikiText, 'this', _kiki.new_KikiText(*args)) _swig_setattr(self, KikiText, 'thisown', 1) def setText(*args): return _kiki.KikiText_setText(*args) def getText(*args): return _kiki.KikiText_getText(*args) def clear(*args): return _kiki.KikiText_clear(*args) def isEmpty(*args): return _kiki.KikiText_isEmpty(*args) def addText(*args): return _kiki.KikiText_addText(*args) def getColor(*args): return _kiki.KikiText_getColor(*args) def setColor(*args): return _kiki.KikiText_setColor(*args) def setAlpha(*args): return _kiki.KikiText_setAlpha(*args) def isAnimated(*args): return _kiki.KikiText_isAnimated(*args) def setAnimated(*args): return _kiki.KikiText_setAnimated(*args) def isCentered(*args): return _kiki.KikiText_isCentered(*args) def setCentered(*args): return _kiki.KikiText_setCentered(*args) def getWidth(*args): return _kiki.KikiText_getWidth(*args) def getHeight(*args): return _kiki.KikiText_getHeight(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiText_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiText_setObjectColor) class KikiTextPtr(KikiText): def __init__(self, this): _swig_setattr(self, KikiText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiText, 'thisown', 0) _swig_setattr(self, KikiText,self.__class__,KikiText) _kiki.KikiText_swigregister(KikiTextPtr) KikiText_setObjectColor = _kiki.KikiText_setObjectColor class KikiGUI(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGUI, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGUI, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiGUI instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) class KikiGUIPtr(KikiGUI): def __init__(self, this): _swig_setattr(self, KikiGUI, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGUI, 'thisown', 0) _swig_setattr(self, KikiGUI,self.__class__,KikiGUI) _kiki.KikiGUI_swigregister(KikiGUIPtr) class KikiScreenText(KikiText,KikiActionObject): __swig_setmethods__ = {} for _s in [KikiText,KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiScreenText, name, value) __swig_getmethods__ = {} for _s in [KikiText,KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiScreenText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiScreenText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiScreenText, 'this', _kiki.new_KikiScreenText(*args)) _swig_setattr(self, KikiScreenText, 'thisown', 1) def addText(*args): return _kiki.KikiScreenText_addText(*args) def setText(*args): return _kiki.KikiScreenText_setText(*args) def show(*args): return _kiki.KikiScreenText_show(*args) def getProjection(*args): return _kiki.KikiScreenText_getProjection(*args) class KikiScreenTextPtr(KikiScreenText): def __init__(self, this): _swig_setattr(self, KikiScreenText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiScreenText, 'thisown', 0) _swig_setattr(self, KikiScreenText,self.__class__,KikiScreenText) _kiki.KikiScreenText_swigregister(KikiScreenTextPtr) class KikiMenu(KikiScreenText): __swig_setmethods__ = {} for _s in [KikiScreenText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMenu, name, value) __swig_getmethods__ = {} for _s in [KikiScreenText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMenu, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMenu, 'this', _kiki.new_KikiMenu(*args)) _swig_setattr(self, KikiMenu, 'thisown', 1) def addItem(*args): return _kiki.KikiMenu_addItem(*args) def setCurrentIndex(*args): return _kiki.KikiMenu_setCurrentIndex(*args) def setEscapeActive(*args): return _kiki.KikiMenu_setEscapeActive(*args) __swig_setmethods__["circular"] = _kiki.KikiMenu_circular_set __swig_getmethods__["circular"] = _kiki.KikiMenu_circular_get if _newclass:circular = property(_kiki.KikiMenu_circular_get, _kiki.KikiMenu_circular_set) class KikiMenuPtr(KikiMenu): def __init__(self, this): _swig_setattr(self, KikiMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMenu, 'thisown', 0) _swig_setattr(self, KikiMenu,self.__class__,KikiMenu) _kiki.KikiMenu_swigregister(KikiMenuPtr) class KikiColumnMenu(KikiMenu): __swig_setmethods__ = {} for _s in [KikiMenu]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiColumnMenu, name, value) __swig_getmethods__ = {} for _s in [KikiMenu]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiColumnMenu, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiColumnMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiColumnMenu, 'this', _kiki.new_KikiColumnMenu(*args)) _swig_setattr(self, KikiColumnMenu, 'thisown', 1) class KikiColumnMenuPtr(KikiColumnMenu): def __init__(self, this): _swig_setattr(self, KikiColumnMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiColumnMenu, 'thisown', 0) _swig_setattr(self, KikiColumnMenu,self.__class__,KikiColumnMenu) _kiki.KikiColumnMenu_swigregister(KikiColumnMenuPtr) class KikiScrollMenu(KikiColumnMenu): __swig_setmethods__ = {} for _s in [KikiColumnMenu]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiScrollMenu, name, value) __swig_getmethods__ = {} for _s in [KikiColumnMenu]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiScrollMenu, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiScrollMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiScrollMenu, 'this', _kiki.new_KikiScrollMenu(*args)) _swig_setattr(self, KikiScrollMenu, 'thisown', 1) def getCurrentIndex(*args): return _kiki.KikiScrollMenu_getCurrentIndex(*args) def addItem(*args): return _kiki.KikiScrollMenu_addItem(*args) class KikiScrollMenuPtr(KikiScrollMenu): def __init__(self, this): _swig_setattr(self, KikiScrollMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiScrollMenu, 'thisown', 0) _swig_setattr(self, KikiScrollMenu,self.__class__,KikiScrollMenu) _kiki.KikiScrollMenu_swigregister(KikiScrollMenuPtr) class KikiPageText(KikiScreenText): __swig_setmethods__ = {} for _s in [KikiScreenText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPageText, name, value) __swig_getmethods__ = {} for _s in [KikiScreenText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPageText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiPageText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiPageText, 'this', _kiki.new_KikiPageText(*args)) _swig_setattr(self, KikiPageText, 'thisown', 1) class KikiPageTextPtr(KikiPageText): def __init__(self, this): _swig_setattr(self, KikiPageText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPageText, 'thisown', 0) _swig_setattr(self, KikiPageText,self.__class__,KikiPageText) _kiki.KikiPageText_swigregister(KikiPageTextPtr) class KikiFace(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiFace, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiFace, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiFace instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) PX = _kiki.KikiFace_PX X = _kiki.KikiFace_X PY = _kiki.KikiFace_PY Y = _kiki.KikiFace_Y PZ = _kiki.KikiFace_PZ Z = _kiki.KikiFace_Z NX = _kiki.KikiFace_NX NY = _kiki.KikiFace_NY NZ = _kiki.KikiFace_NZ class KikiFacePtr(KikiFace): def __init__(self, this): _swig_setattr(self, KikiFace, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiFace, 'thisown', 0) _swig_setattr(self, KikiFace,self.__class__,KikiFace) _kiki.KikiFace_swigregister(KikiFacePtr) class KikiWire(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWire, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWire, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiWire instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) UP = _kiki.KikiWire_UP RIGHT = _kiki.KikiWire_RIGHT DOWN = _kiki.KikiWire_DOWN VERTICAL = _kiki.KikiWire_VERTICAL LEFT = _kiki.KikiWire_LEFT HORIZONTAL = _kiki.KikiWire_HORIZONTAL ALL = _kiki.KikiWire_ALL def __init__(self, *args): _swig_setattr(self, KikiWire, 'this', _kiki.new_KikiWire(*args)) _swig_setattr(self, KikiWire, 'thisown', 1) def setActive(*args): return _kiki.KikiWire_setActive(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWire_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWire_setObjectColor) class KikiWirePtr(KikiWire): def __init__(self, this): _swig_setattr(self, KikiWire, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWire, 'thisown', 0) _swig_setattr(self, KikiWire,self.__class__,KikiWire) _kiki.KikiWire_swigregister(KikiWirePtr) KikiWire_setObjectColor = _kiki.KikiWire_setObjectColor kikiObjectToWire = _kiki.kikiObjectToWire class KikiGear(KikiObject,KikiFace): __swig_setmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGear, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGear, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiGear instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiGear, 'this', _kiki.new_KikiGear(*args)) _swig_setattr(self, KikiGear, 'thisown', 1) def setActive(*args): return _kiki.KikiGear_setActive(*args) def updateActive(*args): return _kiki.KikiGear_updateActive(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGear_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGear_setObjectColor) class KikiGearPtr(KikiGear): def __init__(self, this): _swig_setattr(self, KikiGear, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGear, 'thisown', 0) _swig_setattr(self, KikiGear,self.__class__,KikiGear) _kiki.KikiGear_swigregister(KikiGearPtr) KikiGear_setObjectColor = _kiki.KikiGear_setObjectColor kikiObjectToGear = _kiki.kikiObjectToGear class KikiValve(KikiObject,KikiFace): __swig_setmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiValve, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiValve, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiValve instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiValve, 'this', _kiki.new_KikiValve(*args)) _swig_setattr(self, KikiValve, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiValve_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiValve_setObjectColor) class KikiValvePtr(KikiValve): def __init__(self, this): _swig_setattr(self, KikiValve, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiValve, 'thisown', 0) _swig_setattr(self, KikiValve,self.__class__,KikiValve) _kiki.KikiValve_swigregister(KikiValvePtr) KikiValve_setObjectColor = _kiki.KikiValve_setObjectColor kikiObjectToValve = _kiki.kikiObjectToValve class KikiMotorCylinder(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMotorCylinder, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMotorCylinder, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMotorCylinder instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMotorCylinder, 'this', _kiki.new_KikiMotorCylinder(*args)) _swig_setattr(self, KikiMotorCylinder, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMotorCylinder_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMotorCylinder_setObjectColor) class KikiMotorCylinderPtr(KikiMotorCylinder): def __init__(self, this): _swig_setattr(self, KikiMotorCylinder, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMotorCylinder, 'thisown', 0) _swig_setattr(self, KikiMotorCylinder,self.__class__,KikiMotorCylinder) _kiki.KikiMotorCylinder_swigregister(KikiMotorCylinderPtr) KikiMotorCylinder_setObjectColor = _kiki.KikiMotorCylinder_setObjectColor class KikiMotorGear(KikiGear): __swig_setmethods__ = {} for _s in [KikiGear]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMotorGear, name, value) __swig_getmethods__ = {} for _s in [KikiGear]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMotorGear, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiMotorGear instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiMotorGear, 'this', _kiki.new_KikiMotorGear(*args)) _swig_setattr(self, KikiMotorGear, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMotorGear_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMotorGear_setObjectColor) class KikiMotorGearPtr(KikiMotorGear): def __init__(self, this): _swig_setattr(self, KikiMotorGear, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMotorGear, 'thisown', 0) _swig_setattr(self, KikiMotorGear,self.__class__,KikiMotorGear) _kiki.KikiMotorGear_swigregister(KikiMotorGearPtr) KikiMotorGear_setObjectColor = _kiki.KikiMotorGear_setObjectColor class KikiGenerator(KikiGear): __swig_setmethods__ = {} for _s in [KikiGear]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGenerator, name, value) __swig_getmethods__ = {} for _s in [KikiGear]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGenerator, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiGenerator instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiGenerator, 'this', _kiki.new_KikiGenerator(*args)) _swig_setattr(self, KikiGenerator, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGenerator_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGenerator_setObjectColor) class KikiGeneratorPtr(KikiGenerator): def __init__(self, this): _swig_setattr(self, KikiGenerator, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGenerator, 'thisown', 0) _swig_setattr(self, KikiGenerator,self.__class__,KikiGenerator) _kiki.KikiGenerator_swigregister(KikiGeneratorPtr) KikiGenerator_setObjectColor = _kiki.KikiGenerator_setObjectColor class KikiLight(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiLight, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiLight, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiLight instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiLight, 'this', _kiki.new_KikiLight(*args)) _swig_setattr(self, KikiLight, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiLight_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiLight_setObjectColor) class KikiLightPtr(KikiLight): def __init__(self, this): _swig_setattr(self, KikiLight, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiLight, 'thisown', 0) _swig_setattr(self, KikiLight,self.__class__,KikiLight) _kiki.KikiLight_swigregister(KikiLightPtr) KikiLight_setObjectColor = _kiki.KikiLight_setObjectColor kikiObjectToLight = _kiki.kikiObjectToLight class KikiCellText(KikiObject,KikiText): __swig_setmethods__ = {} for _s in [KikiObject,KikiText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiCellText, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiCellText, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiCellText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiCellText, 'this', _kiki.new_KikiCellText(*args)) _swig_setattr(self, KikiCellText, 'thisown', 1) def setOffset(*args): return _kiki.KikiCellText_setOffset(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiCellText_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiCellText_setObjectColor) class KikiCellTextPtr(KikiCellText): def __init__(self, this): _swig_setattr(self, KikiCellText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiCellText, 'thisown', 0) _swig_setattr(self, KikiCellText,self.__class__,KikiCellText) _kiki.KikiCellText_swigregister(KikiCellTextPtr) KikiCellText_setObjectColor = _kiki.KikiCellText_setObjectColor kikiObjectToCellText = _kiki.kikiObjectToCellText class KikiStone(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiStone, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiStone, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiStone instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiStone, 'this', _kiki.new_KikiStone(*args)) _swig_setattr(self, KikiStone, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiStone_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiStone_setObjectColor) class KikiStonePtr(KikiStone): def __init__(self, this): _swig_setattr(self, KikiStone, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiStone, 'thisown', 0) _swig_setattr(self, KikiStone,self.__class__,KikiStone) _kiki.KikiStone_swigregister(KikiStonePtr) KikiStone_setObjectColor = _kiki.KikiStone_setObjectColor kikiObjectToStone = _kiki.kikiObjectToStone class KikiWireStone(KikiStone): __swig_setmethods__ = {} for _s in [KikiStone]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWireStone, name, value) __swig_getmethods__ = {} for _s in [KikiStone]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWireStone, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiWireStone instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiWireStone, 'this', _kiki.new_KikiWireStone(*args)) _swig_setattr(self, KikiWireStone, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWireStone_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWireStone_setObjectColor) class KikiWireStonePtr(KikiWireStone): def __init__(self, this): _swig_setattr(self, KikiWireStone, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWireStone, 'thisown', 0) _swig_setattr(self, KikiWireStone,self.__class__,KikiWireStone) _kiki.KikiWireStone_swigregister(KikiWireStonePtr) KikiWireStone_setObjectColor = _kiki.KikiWireStone_setObjectColor kikiObjectToWireStone = _kiki.kikiObjectToWireStone class KikiWall(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWall, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWall, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiWall instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiWall, 'this', _kiki.new_KikiWall(*args)) _swig_setattr(self, KikiWall, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWall_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWall_setObjectColor) class KikiWallPtr(KikiWall): def __init__(self, this): _swig_setattr(self, KikiWall, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWall, 'thisown', 0) _swig_setattr(self, KikiWall,self.__class__,KikiWall) _kiki.KikiWall_swigregister(KikiWallPtr) KikiWall_setObjectColor = _kiki.KikiWall_setObjectColor kikiObjectToWall = _kiki.kikiObjectToWall class KikiBomb(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBomb, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBomb, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiBomb instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiBomb, 'this', _kiki.new_KikiBomb(*args)) _swig_setattr(self, KikiBomb, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBomb_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBomb_setObjectColor) class KikiBombPtr(KikiBomb): def __init__(self, this): _swig_setattr(self, KikiBomb, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBomb, 'thisown', 0) _swig_setattr(self, KikiBomb,self.__class__,KikiBomb) _kiki.KikiBomb_swigregister(KikiBombPtr) KikiBomb_setObjectColor = _kiki.KikiBomb_setObjectColor kikiObjectToBomb = _kiki.kikiObjectToBomb class KikiSwitch(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSwitch, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiSwitch, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiSwitch instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiSwitch, 'this', _kiki.new_KikiSwitch(*args)) _swig_setattr(self, KikiSwitch, 'thisown', 1) def toggle(*args): return _kiki.KikiSwitch_toggle(*args) def setActive(*args): return _kiki.KikiSwitch_setActive(*args) def isActive(*args): return _kiki.KikiSwitch_isActive(*args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiSwitch_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiSwitch_setObjectColor) class KikiSwitchPtr(KikiSwitch): def __init__(self, this): _swig_setattr(self, KikiSwitch, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSwitch, 'thisown', 0) _swig_setattr(self, KikiSwitch,self.__class__,KikiSwitch) _kiki.KikiSwitch_swigregister(KikiSwitchPtr) KikiSwitch_setObjectColor = _kiki.KikiSwitch_setObjectColor kikiObjectToSwitch = _kiki.kikiObjectToSwitch class KikiGate(KikiSwitch): __swig_setmethods__ = {} for _s in [KikiSwitch]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGate, name, value) __swig_getmethods__ = {} for _s in [KikiSwitch]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGate, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiGate instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiGate, 'this', _kiki.new_KikiGate(*args)) _swig_setattr(self, KikiGate, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGate_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGate_setObjectColor) class KikiGatePtr(KikiGate): def __init__(self, this): _swig_setattr(self, KikiGate, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGate, 'thisown', 0) _swig_setattr(self, KikiGate,self.__class__,KikiGate) _kiki.KikiGate_swigregister(KikiGatePtr) KikiGate_setObjectColor = _kiki.KikiGate_setObjectColor kikiObjectToGate = _kiki.kikiObjectToGate class KikiAtom(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiAtom, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiAtom, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiAtom instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def setValue(*args): return _kiki.KikiAtom_setValue(*args) def getValue(*args): return _kiki.KikiAtom_getValue(*args) class KikiAtomPtr(KikiAtom): def __init__(self, this): _swig_setattr(self, KikiAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiAtom, 'thisown', 0) _swig_setattr(self, KikiAtom,self.__class__,KikiAtom) _kiki.KikiAtom_swigregister(KikiAtomPtr) class KikiMovesAtom(KikiAtom): __swig_setmethods__ = {} for _s in [KikiAtom]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMovesAtom, name, value) __swig_getmethods__ = {} for _s in [KikiAtom]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMovesAtom, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiMovesAtom instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMovesAtom_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMovesAtom_setObjectColor) class KikiMovesAtomPtr(KikiMovesAtom): def __init__(self, this): _swig_setattr(self, KikiMovesAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMovesAtom, 'thisown', 0) _swig_setattr(self, KikiMovesAtom,self.__class__,KikiMovesAtom) _kiki.KikiMovesAtom_swigregister(KikiMovesAtomPtr) KikiMovesAtom_setObjectColor = _kiki.KikiMovesAtom_setObjectColor class KikiValueAtom(KikiAtom): __swig_setmethods__ = {} for _s in [KikiAtom]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiValueAtom, name, value) __swig_getmethods__ = {} for _s in [KikiAtom]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiValueAtom, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiValueAtom instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiValueAtom, 'this', _kiki.new_KikiValueAtom(*args)) _swig_setattr(self, KikiValueAtom, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiValueAtom_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiValueAtom_setObjectColor) class KikiValueAtomPtr(KikiValueAtom): def __init__(self, this): _swig_setattr(self, KikiValueAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiValueAtom, 'thisown', 0) _swig_setattr(self, KikiValueAtom,self.__class__,KikiValueAtom) _kiki.KikiValueAtom_swigregister(KikiValueAtomPtr) KikiValueAtom_setObjectColor = _kiki.KikiValueAtom_setObjectColor class KikiSpikes(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSpikes, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiSpikes, name) def __repr__(self): return "<%s.%s; proxy of C++ KikiSpikes instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def __init__(self, *args): _swig_setattr(self, KikiSpikes, 'this', _kiki.new_KikiSpikes(*args)) _swig_setattr(self, KikiSpikes, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiSpikes_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiSpikes_setObjectColor) class KikiSpikesPtr(KikiSpikes): def __init__(self, this): _swig_setattr(self, KikiSpikes, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSpikes, 'thisown', 0) _swig_setattr(self, KikiSpikes,self.__class__,KikiSpikes) _kiki.KikiSpikes_swigregister(KikiSpikesPtr) KikiSpikes_setObjectColor = _kiki.KikiSpikes_setObjectColor kikiObjectToSpikes = _kiki.kikiObjectToSpikes class KikiBullet(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBullet, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBullet, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiBullet instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBullet_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBullet_setObjectColor) class KikiBulletPtr(KikiBullet): def __init__(self, this): _swig_setattr(self, KikiBullet, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBullet, 'thisown', 0) _swig_setattr(self, KikiBullet,self.__class__,KikiBullet) _kiki.KikiBullet_swigregister(KikiBulletPtr) KikiBullet_setObjectColor = _kiki.KikiBullet_setObjectColor class KConsole(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KConsole, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KConsole, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KConsole instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_getmethods__["_print"] = lambda x: _kiki.KConsole__print if _newclass:_print = staticmethod(_kiki.KConsole__print) __swig_getmethods__["write"] = lambda x: _kiki.KConsole_write if _newclass:write = staticmethod(_kiki.KConsole_write) __swig_getmethods__["printError"] = lambda x: _kiki.KConsole_printError if _newclass:printError = staticmethod(_kiki.KConsole_printError) __swig_getmethods__["getConsole"] = lambda x: _kiki.KConsole_getConsole if _newclass:getConsole = staticmethod(_kiki.KConsole_getConsole) def clear(*args): return _kiki.KConsole_clear(*args) def out (self, *args): _kiki.KConsole__print(" ".join(map(str, args))) class KConsolePtr(KConsole): def __init__(self, this): _swig_setattr(self, KConsole, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KConsole, 'thisown', 0) _swig_setattr(self, KConsole,self.__class__,KConsole) _kiki.KConsole_swigregister(KConsolePtr) KConsole__print = _kiki.KConsole__print KConsole_write = _kiki.KConsole_write KConsole_printError = _kiki.KConsole_printError KConsole_getConsole = _kiki.KConsole_getConsole class KikiPythonWidget(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPythonWidget, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPythonWidget, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPythonWidget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) __swig_setmethods__["cursorPos"] = _kiki.KikiPythonWidget_cursorPos_set __swig_getmethods__["cursorPos"] = _kiki.KikiPythonWidget_cursorPos_get if _newclass:cursorPos = property(_kiki.KikiPythonWidget_cursorPos_get, _kiki.KikiPythonWidget_cursorPos_set) __swig_setmethods__["selectionPos"] = _kiki.KikiPythonWidget_selectionPos_set __swig_getmethods__["selectionPos"] = _kiki.KikiPythonWidget_selectionPos_get if _newclass:selectionPos = property(_kiki.KikiPythonWidget_selectionPos_get, _kiki.KikiPythonWidget_selectionPos_set) def getTextRows(*args): return _kiki.KikiPythonWidget_getTextRows(*args) def getTextCols(*args): return _kiki.KikiPythonWidget_getTextCols(*args) def getTextSize(*args): return _kiki.KikiPythonWidget_getTextSize(*args) def getColumnWidth(*args): return _kiki.KikiPythonWidget_getColumnWidth(*args) def getRowHeight(*args): return _kiki.KikiPythonWidget_getRowHeight(*args) def getPythonWindow(*args): return _kiki.KikiPythonWidget_getPythonWindow(*args) def displayStringAtPos(*args): return _kiki.KikiPythonWidget_displayStringAtPos(*args) class KikiPythonWidgetPtr(KikiPythonWidget): def __init__(self, this): _swig_setattr(self, KikiPythonWidget, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPythonWidget, 'thisown', 0) _swig_setattr(self, KikiPythonWidget,self.__class__,KikiPythonWidget) _kiki.KikiPythonWidget_swigregister(KikiPythonWidgetPtr) class KikiPython(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPython, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPython, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "<%s.%s; proxy of C++ KikiPython instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,) def getPythonWidget(*args): return _kiki.KikiPython_getPythonWidget(*args) def setScrollBarUnits(*args): return _kiki.KikiPython_setScrollBarUnits(*args) def requestUserInput(*args): return _kiki.KikiPython_requestUserInput(*args) def setTitle(*args): return _kiki.KikiPython_setTitle(*args) def setStatus(*args): return _kiki.KikiPython_setStatus(*args) def setInput(*args): return _kiki.KikiPython_setInput(*args) def executeFile(*args): return _kiki.KikiPython_executeFile(*args) class KikiPythonPtr(KikiPython): def __init__(self, this): _swig_setattr(self, KikiPython, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPython, 'thisown', 0) _swig_setattr(self, KikiPython,self.__class__,KikiPython) _kiki.KikiPython_swigregister(KikiPythonPtr) kiki/py/lang/0000777000000000000000000000000011005453236012057 5ustar rootrootkiki/py/lang/dutch.py0000666000000000000000000000426410335750354013554 0ustar rootroot# -*- encoding: utf-8 -*- # Dutch (Nederlands) versions of kiki texts # translation by Arthur Langereis lang['dutch'] = { # game title "kiki the nano bot": "kiki de nano bot", # menu "new game": "nieuw spel", "load level": "laad spel", "next level": "volgend niveau", "restart": "begin opnieuw", "setup": "configuratie", "story": "verhaal", "demo": "demo", "about": "over kiki", "help": "help", "quit": "stop", "back": "terug", # about "version": "versie", "programmed by": "geprogrammeerd door", "sounds from": "geluidseffecten van", "thanks": "met dank aan", "visit": "bezoek", "for more games": "voor meer spellen", "main menu": "hoofd menu", # story "STORY_PAGE_1": "Er leefden eens\nwat kleine robotjes\nin de nano wereld.\n\nze hadden een gelukkig\nkunstmatig leven en\nverzamelden druk materialen\nvoor de maker,\ndie meer en meer\nkleine robotjes maakte.", "STORY_PAGE_2": "maar op een dag,\nvernietigde een parasiet\nhet controle programma\nvan de maker.\n\nvanaf dat moment werkt\nde maker slecht en\nproduceert hij slechts\nluie domme kleine robotjes\ndie op elkaar schieten\nen de nano wereld stuk maken.", "STORY_PAGE_3": "het is jouw taak om kiki,\nde laatste gezonde bot,\nte helpen om de maker\nte repareren.\n\nveel geluk!", # statistics "STATISTICS_TEXT": "$scale(1.5)statistics\n\nyou solved %d of %d levels\n\nyour current score is %d\n\n$scale(2.0)%d", # setup "off": "uit", "on": "aan", "sound": "geluid", "volume": "volume", "fullscreen": "fullscreen", "fov": "perspectief", "speed": "snelheid", "keyboard setup": "configureer toetsenbord", "save": "opslaan", # keyboard setup "$no_itemkeyboard setup": "$no_itemconfigureer toetsenbord", # don't translate $no_item "$no_item": "$no_item", # don't change this "move forward": "naar voren bewegen", "move backward": "naar achter bewegen", "turn left": "naar links draaien", "turn right": "naar rechts draaien", "jump": "springen", "push": "duwen", "shoot": "schieten", "change view": "verander camera modus", "look up": "omhoog kijken", "look down": "omlaag kijken", "press the new key": "druk op de nieuwe toets", "action without key": "geen toets ingesteld", "back to setup": "terug naar configuratie" } kiki/py/lang/english.py0000666000000000000000000000373510335750236014077 0ustar rootroot# Localized versions of kiki texts lang['english'] = { # game title "kiki the nano bot": "kiki the nano bot", # menu "new game": "new game", "load level": "load level", "next level": "next level", "restart": "restart", "setup": "setup", "story": "story", "demo": "demo", "about": "about", "help": "help", "quit": "quit", "back": "back", # about "version": "version", "programmed by": "programmed by", "sounds from": "sounds from", "thanks": "thanks", "visit": "visit", "for more games": "for more games", "main menu": "main menu", # story "STORY_PAGE_1": "once upon a time,\nthere were some\ntiny little robots\nliving in the nano world.\n\nthey lived a happy artificial life\nbusily collecting resources\nfor the maker\nwho made more and more\ntiny little robots.", "STORY_PAGE_2": "but one day,\na parasitic capacity\ndestroyed the maker's\nmaster control program.\n\nsince then he is\nmalfunctioning\nand only producing\nlazy stupid little robots\nwhich shoot each other\nand destroy the nano world.", "STORY_PAGE_3": "your task is to help kiki,\nthe only sane bot left over,\nto repair the maker.\n\ngood luck!", # statistics "STATISTICS_TEXT": "$scale(1.5)statistics:\n\nyou solved %d of %d levels\n\nyour current score is\n\n$scale(2.0)%d", # setup "language": "language", "off": "off", "on": "on", "sound": "sound", "volume": "volume", "fullscreen": "fullscreen", "fov": "fov", "speed": "speed", "keyboard setup": "keyboard setup", "save": "save", # keyboard setup "$no_itemkeyboard setup": "$no_itemkeyboard setup", # don't translate $no_item "$no_item": "$no_item", # don't change this "move forward": "move forward", "move backward": "move backward", "turn left": "turn left", "turn right": "turn right", "jump": "jump", "push": "push", "shoot": "shoot", "change view": "change view", "look up": "look up", "look down": "look down", "press the new key": "press the new key", "action without key": "action without key", "back to setup": "back to setup", } kiki/py/lang/euskara.py0000666000000000000000000000455610345527727014113 0ustar rootroot# -*- encoding: utf-8 -*- # Euskara versions of kiki texts # translation by 3ARRANO.com lang['euskara'] = { # game title "kiki the nano bot": "kiki the nano bot", # menu "continue": "jarraitu", "new game": "joku berria", "load level": "maila eskuratu", "next level": "hurrengo maila", "restart": "berriz hasi", "statistics": "estatistikak", "setup": "ezarpenak", "story": "istorioa", "demo": "erakustaldia", "about": "honen gainean", "help": "laguntza", "quit": "irten", "back": "atzera", # about "version": "bertsioa:", "programmed by": "programatzailea", "levels": "mailak", "translations": "itzulpenak", "sounds from": "soinuak", "thanks": "eskerrak", "visit": "ikusi", "for more games": "joku gehiagotarako", "main menu": "hautesleihoa", # story "STORY_PAGE_1": "behin batean, nano\nmunduan errobot\ntxiki batzuk bizi\nziren.\n\nbizitza artifizial alai bat\nbizi zuten, egilearentzako baliabide\n bilketarekin lanpeturik,\nhark egin baitzituen errobot\ntxiki guztiak.", "STORY_PAGE_2": "baina halako batean,\nindar-parasito batek\negilearen kontrol gailu\nnagusia suntsitu zuen.\n\ngeroztik egileak gaizki\nfuntzionatzen du\neta errobot inozo eta alferrak\nsoilik sortzen ditu,\nzeintzuek elkar tirokatzen duten\nhonela nano mundua suntsituz.", "STORY_PAGE_3": "zure eginbeharra kiki, bizi\nden errobot on bakarra,\nlaguntzea da, egilea konpon dezan.\n\nzorte on!", # statistics "STATISTICS_TEXT": "$scale(1.5)estatistikak\n\n%d maila burutu dituzu %d(e)tik\n\nzure uneko emaitza:\n\n$scale(2.0)%d", # setup "language": "hizkuntza", "off": "ez", "on": "bai", "sound": "soinua", "volume": "ozentasuna", "fullscreen": "osoko ikuskera", "fov": "ikuskera", "speed": "abiadura", "keyboard setup": "teklak zehaztu", "save": "gorde", # keyboard setup "$no_itemkeyboard setup": "$no_itemteklak zehaztu", # don't translate $no_item "$no_item": "$no_item", # don't change this "move forward": "aurrera egin", "move backward": "atzera egin", "turn left": "ezkerrera biratu", "turn right": "eskumara biratu", "jump": "jauzi egin", "push": "bultzatu", "shoot": "tirokatu", "change view": "ikuskera aldatu", "look up": "gora begiratu", "look down": "behera begiratu", "press the new key": "sakatu tekla berria", "action without key": "tekla gabeko ekintza", "back to setup": "atzera ezarpenetara", } kiki/py/lang/german.py0000666000000000000000000000432010335750276013712 0ustar rootroot# -*- encoding: utf-8 -*- # Localized versions of kiki texts lang['german'] = { # game title "kiki the nano bot": "kiki der nano bot", # menu "new game": "neues spiel", "continue": "fortfahren", "statistics": "statistik", "load level": "level laden", "next level": "nächster level", "restart": "neustart", "setup": "einstellungen", "story": "geschichte", "about": "information", "help": "hilfe", "quit": "beenden", "back": "zurück", # about "version": "version", "programmed by": "programmiert von", "sounds from": "sounds von", "thanks": "dank an", "visit": "besuche", "for more games": "für mehr spiele", "main menu": "hauptmenü", # story "STORY_PAGE_1": "es war einmal\ndie nano-welt,\nin der lebte eine schar\nvon kleinen robotern.\n\nglücklich verbrachten sie\nihr künstliches leben damit,\nrohstoffe für den\nerschaffer zu sammeln,\ndamit er mehr und mehr\nkleine roboter herstelle.", "STORY_PAGE_2": "eines tages aber\nzerstörten\nparasitäre kapazitäten\ndas hauptprogramm\ndes erschaffers.\n\nseit dem funktioniert er\nnicht mehr richtig\nund produziert nur noch\nfaule, dumme roboter,\ndie aufeinander schiessen\nund die nano-welt zerstören.", "STORY_PAGE_3": "deine aufgabe ist es nun,\nkiki,\ndem einzigen gesunden bot,\nder überlebte,\nbei der reparatur des \nerschaffers zu helfen.\n\nviel glück!", # statistics "STATISTICS_TEXT": "$scale(1.5)statistik\n\ndu hast %d von %d leveln gelöst\n\ndeine momentane punktzahl ist\n\n$scale(2.0)%d", # setup "language": "sprache", "off": "aus", "on": "an", "sound": "sound", "volume": "lautstärke", "fullscreen": "vollbildschirm", "fov": "blickwinkel", "speed": "geschwindigkeit", "keyboard setup": "tastaturbelegung", "save": "speichern", # keyboard setup "$no_itemkeyboard setup": "$no_itemtastaturbelegung", "$no_item": "$no_item", "move forward": "vorwärts", "move backward": "rückwärts", "turn left": "links", "turn right": "rechts", "jump": "springen", "push": "schieben", "shoot": "schiessen", "change view": "kamera wechseln", "look up": "hochschauen", "look down": "runterschauen", "press the new key": "drücke die neue taste", "action without key": "aktion ohne taste", "back to setup": "zurück zu einstellungen", } kiki/py/lang/portuguese.py0000666000000000000000000000430110335750354014637 0ustar rootroot# -*- encoding: utf-8 -*- # Portuguese (Portugues do Brazil) versions of kiki texts # translation by F.C.Covett lang['portuguese'] = { # game title "kiki the nano bot": "kiki, o nano-robô", # menu "new game": "novo jogo", "load level": "carregar nível", "next level": "próximo nível", "restart": "recomeçar", "setup": "configurar", "story": "estória", "demo": "demo", "about": "créditos", "help": "ajuda", "quit": "sair", "back": "voltar", # about "version": "versão", "programmed by": "desenvolido por", "sounds from": "audio por", "thanks": "agradecimentos", "visit": "visite", "for more games": "para mais jogos", "main menu": "menu principal", # story "STORY_PAGE_1": "era uma vez,\nhavia\nestes minúsculos robôs\nvivendo em um mundo nanoscópico.\n\neles viviam felizes em sua vidinha articifial,\nsempre ocupados, coletando matéria-prima\npara seu criador,\nque então fazia mais e mais\nano-robôs.", "STORY_PAGE_2": "mas um dia,\num certo parasita\ndestruiu o programa central\nde controle do criador.\n\ndesde então, o criado não\nfunciona mais direito\ne só produz\nrobôs preguiçosos e malucos\nque atiram uns nos outros,\nassim destruindo o mundo nanoscópico.", "STORY_PAGE_3": "é sua missão ajudar kiki,\no único nano-robô são,\na reparar o criador.\n\nboa sorte!", # statistics "STATISTICS_TEXT": "$scale(1.5)statistics\n\nyou solved %d of %d levels\n\nyour current score is\n\n$scale(2.0)%d", # setup "off": "desligar", "on": "ligar", "sound": "som", "volume": "volume", "fullscreen": "tela cheia", "fov": "campo de visão", "speed": "velocidade", "keyboard setup": "configurar teclado", "save": "salvar", # keyboard setup "$no_itemkeyboard setup": "$no_itemconfigurar teclado", # don't translate $no_item "$no_item": "$no_item", # don't change this "move forward": "mover à frente", "move backward": "mover para trás", "turn left": "virar à esquerda", "turn right": "virar à direita", "jump": "pular", "push": "empurrar", "shoot": "atirar", "change view": "mudar a vista", "look up": "olhar para cima", "look down": "olhar para baixo", "press the new key": "digite a nova tecla", "action without key": "indefinido", "back to setup": "retornar", } kiki/py/lang/spanish.py0000666000000000000000000000415610335750354014112 0ustar rootroot# -*- encoding: utf-8 -*- # Spanish (Español) versions of kiki texts # translation by jay_traveller lang['spanish'] = { # game title "kiki the nano bot": "kiki el nanobot", # menu "new game": "juego nuevo", "load level": "cargar nivel", "next level": "siguiente nivel", "restart": "reiniciar", "setup": "configuracion", "story": "historia", "demo": "demo", "about": "informacion", "help": "ayda", "quit": "cerrar", "back": "atras", # about "version": "version", "programmed by": "programacion", "sounds from": "sonido", "thanks": "agradecimientos", "visit": "visita", "for more games": "mas juegos", "main menu": "menu principal", # story "STORY_PAGE_1": "habia una vez,\nunos\npequeños robots\nviviendo en el nanomundo.\n\nvivian una feliz vida artificial\nrecolectando recursos activamente\npara su creador\nquien hizo mas y mas\npequeños robots.", "STORY_PAGE_2": "pero un dia,\nun parasito\ndestruyo el programa principal\nde control del creador.\n\ndesde entonces\nel solo produce\ninservibles, flojos y pequeños\nrobots estupidos\nquienes se atacan entre si\ny destruyeron el nanomundo.", "STORY_PAGE_3": "tu tarea es ayudar a kiki,\nel ultimo robot,\na reparar a su creador.\n\nbuena suerte!", # statistics "STATISTICS_TEXT": "$scale(1.5)statistics\n\nyou solved %d of %d levels\n\nyour current score is\n\n$scale(2.0)%d", # setup "language": "idioma", "off": "desactivado", "on": "activado", "sound": "sonido", "volume": "volumen", "fullscreen": "pantalla completa", "fov": "fov", "speed": "velocidad", "keyboard setup": "configuracion de teclado", "save": "guardar", # keyboard setup "$no_itemkeyboard setup": "$no_itemconfiguracion de teclado", # don't translate $no_item "$no_item": "$no_item", # don't change this "move forward": "adelante", "move backward": "atras", "turn left": "izquierda", "turn right": "derecha", "jump": "salto", "push": "empujar", "shoot": "disparo", "change view": "cambiar vista", "look up": "mirar arriba", "look down": "mirar abajo", "press the new key": "presiona la nueva tecla", "action without key": "accion sin tecla", "back to setup": "regresar a configuracion", } kiki/py/lang/swedish.py0000666000000000000000000000412210335750354014104 0ustar rootroot# -*- encoding: utf-8 -*- # Swedish versions of kiki texts # translation by Ivan aka Fenris lang["swedish"] = { # game title "kiki the nano bot": "Nanoroboten Kiki", # menu "new game": "nytt spel", "load level": "ladda bana", "next level": "nästa bana", "restart": "börja om", "setup": "inställningar", "story": "bakgrundshistoria", "demo": "demo", "about": "om spelet", "help": "hjälp", "quit": "avsluta", "back": "tillbaka", # about "version": "version", "programmed by": "skrivet av", "sounds from": "ljud från", "thanks": "tack till", "visit": "besök", "for more games": "för fler spel", "main menu": "huvudmeny", # story "STORY_PAGE_1": "det var en gång\nsmå, små robotar\n\nsom levde i nano-världen.\n\nde levde ett lyckligt konstgjort liv,\noch samlade flitigt material\nåt skaparen\nsom byggde fler och fler\npyttesmå robotar.", "STORY_PAGE_2": "men en dag\nförstörde en parasitmakt\nskaparens kontrollprogram.\n\n\nSedan dess är han trasig\noch bygger bara\nkorkade och lata små robotar\nsom skjuter varandra och\nförstör nano-världen.", "STORY_PAGE_3": "din uppgift är att hjälpa kiki,\nden sista kloka roboten,\natt reparera skaparen.\n\nlycka till!", # statistics "STATISTICS_TEXT": "$scale(1.5)statistics\n\nyou solved %d of %d levels\n\nyour current score is\n\n$scale(2.0)%d", # setup "off": "av", "on": "på", "sound": "ljud", "volume": "volym", "fullscreen": "fullskärmsläge", "fov": "synfält", "speed": "hastighet", "keyboard setup": "tangentbordsinställningar", "save": "spara", # keyboard setup "$no_itemkeyboard setup": "$no_itemtangentbordsinställningar", # don't translate $no_item "$no_item": "$no_item", # don't change this "move forward": "gå framåt", "move backward": "gå bakåt", "turn left": "sväng vänster", "turn right": "sväng höger", "jump": "hoppa", "push": "knuffa", "shoot": "skjut", "change view": "ändra synvinkel", "look up": "titta uppåt", "look down": "titta nedåt", "press the new key": "tryck på den nya knappen", "action without key": "knapplös handling", "back to setup": "tillbaka till inställningar", } kiki/py/lang.py0000666000000000000000000000107010323675103012430 0ustar rootroot# -*- encoding: utf-8 -*- if Controller.isDebugVersion(): print "[lang.py]" Controller.language = "english" lang_list = [ "dutch", "english", "euskara", "german", "portuguese", "spanish", "swedish", ] lang = {} for langName in lang_list: execfile (kikipy_path + os.path.sep + "lang" + os.path.sep + langName + ".py") def getLocalizedString(text): if lang[Controller.language].has_key(text): return lang[Controller.language][text] else: return text Controller.getLocalizedString = getLocalizedString del getLocalizedString kiki/py/levels/0000777000000000000000000000000011005453236012430 5ustar rootrootkiki/py/levels/blocks.py0000666000000000000000000000425710327766472014306 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_blocks(): world.addObjectAtPos (KikiWall() , KikiPos (1,1,2)) world.addObjectAtPos (KikiWall() , KikiPos (4,2,2)) world.addObjectAtPos (KikiWall() , KikiPos (7,2,2)) world.addObjectAtPos (KikiStone() , KikiPos (10,2,2)) world.addObjectAtPos (KikiStone(None, True) , KikiPos (13,2,2)) world.addObjectAtPos (KikiStone(None, True) , KikiPos (15,4,2)) world.addObjectAtPos (KikiStone(KColor(0,1,0,0.8), True) , KikiPos (13,7,2)) world.addObjectAtPos (KikiStone(KColor(1,0,0,0.8), True) , KikiPos (10,7,2)) world.addObjectAtPos (KikiStone(KColor(0,0,1,0.8), True) , KikiPos (7,7,2)) world.addObjectAtPos (KikiStone(KColor(0.5,0.5,0,0.8)) , KikiPos (4,7,2)) world.addObjectLine (KikiWall, KikiPos (0,0,2), KikiPos(7,0,2) ) level_dict["blocks"] = { "scheme": "default_scheme", "size": (18,12,5), "intro": "blocks", "help": ( "As you might know: you can grab\n" "most stones by pressing forward\n" "while jumping or falling down\n" "next to them.", "The stone with the slits is a\n" "special stone, that means that\n" "you can't grab it while jumping\n" "or falling", "The color of a stone doesn't matter.", ), "player": { "coordinates": (1,6,2), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "coordinates": (7,9,2), }, ], "create": func_blocks, } # ................................................................................................................. kiki/py/levels/bombs.py0000666000000000000000000000240310334740532014105 0ustar rootroot# ................................................................................................................. level_dict["bombs"] = { "scheme": "red_scheme", "size": (9,9,9), "intro": "bombs", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nuse the bombs", ), "player": { "position": (0,-4,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,2,0), }, ], "create": """ world.addObjectAtPos (KikiBomb(), world.decenter (0,-4,2)) world.addObjectAtPos (KikiBomb(), world.decenter (0,-4,-2)) world.addObjectAtPos (KikiBomb(), world.decenter (-3,-2,0)) """, }kiki/py/levels/borg.py0000666000000000000000000000250410335667515013750 0ustar rootroot# level design by Michael Abel # ................................................................................................................. level_dict["borg"] = { "scheme": "default_scheme", "size": (9,9,9), "intro": "borg", "help": ( "Believe me,\n" + \ "they are\n" + \ "CRAZY!", ), "player": { "coordinates": (0,0,0), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ world.addObjectAtPos (KikiLight (), KikiPos (7,7,7)) for i in range(150): world.setObjectRandom (KikiMutant() ) """, }kiki/py/levels/bridge.py0000666000000000000000000000470210313637331014242 0ustar rootroot# ................................................................................................................. level_dict["bridge"] = { "scheme": "red_scheme", "size": (9,9,5), "intro": "bridge", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n\n" + \ "place a wire stone\nnext to the exit", ), "player": { "position": (0,-3,1), }, "exits": [ { "name": "exit", "active": 0, "position": (0,-1,0), }, ], "create": """ s = world.getSize() world.addObjectAtPos (KikiMotorGear (KikiFace.NY), KikiPos (s.x/2-1, s.y-1, s.z/2)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.NY), KikiPos (s.x/2-1, s.y-2, s.z/2)) world.addObjectAtPos (KikiGenerator (KikiFace.NY), KikiPos (s.x/2+1, s.y-1, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NY, KikiWire.VERTICAL)", KikiPos (s.x/2, s.y-1, 0), KikiPos (s.x/2, s.y-1, s.z)) world.addObjectLine ("KikiWire (KikiFace.PY, KikiWire.VERTICAL)", KikiPos (s.x/2, 0, 0), KikiPos (s.x/2, 0, s.z)) world.addObjectLine ("KikiWire (KikiFace.PZ, KikiWire.VERTICAL)", KikiPos (s.x/2, 0, 0), KikiPos (s.x/2, s.y, 0)) world.addObjectLine ("KikiWire (KikiFace.NZ, KikiWire.VERTICAL)", KikiPos (s.x/2, 0, s.z-1), KikiPos (s.x/2, s.y, s.z-1)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2+3, 0, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2-3, 0, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2+2, 1, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2-2, 1, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2+1, 2, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2-1, 2, s.z/2)) """, } kiki/py/levels/bronze.py0000666000000000000000000001203010313636770014304 0ustar rootroot# ................................................................................................................. level_dict["bronze"] = { "scheme": "bronze_scheme", "size": (9,6,9), "intro": "bronze", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n"+ \ "and close the circuit\nwith the wire stones", ), "player": { "position": (0,1,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), }, ], "create": """ s = world.getSize() d = 2 world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), KikiPos (s.x/2, 1, s.z/2)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), KikiPos (s.x/2, 0, s.z/2)) world.addObjectAtPos (KikiGear (KikiFace.PY), KikiPos (s.x/2-1, s.y-1, s.z/2-1)) world.addObjectAtPos (KikiGenerator (KikiFace.PY), KikiPos (s.x/2+1, s.y-1, s.z/2-1)) #world.addObjectAtPos (KikiHealthAtom (), KikiPos (s.x/2+1, s.y-1, s.z/2+1)) world.addObjectAtPos (KikiBomb (), KikiPos (s.x/2-1, s.y-1, s.z/2+1)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2, s.y-1, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2+1, s.y-2, s.z/2)) world.addObjectAtPos (KikiWireStone (), KikiPos (s.x/2-1, s.y-2, s.z/2)) # floor wire square world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2-d+1, 0, s.z/2-d), KikiPos (s.x/2+d, 0, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2-d+1, 0, s.z/2+d), KikiPos (s.x/2+d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 5), KikiPos (s.x/2-d, 0, s.z/2+1)) world.addObjectAtPos (KikiWire (KikiFace.PY, 5), KikiPos (s.x/2-d, 0, s.z/2-1)) world.addObjectAtPos (KikiWire (KikiFace.PY, 13), KikiPos (s.x/2-d, 0, s.z/2)) world.addObjectAtPos (KikiWire (KikiFace.PY, 5), KikiPos (s.x/2+d, 0, s.z/2+1)) world.addObjectAtPos (KikiWire (KikiFace.PY, 5), KikiPos (s.x/2+d, 0, s.z/2-1)) world.addObjectAtPos (KikiWire (KikiFace.PY, 7), KikiPos (s.x/2+d, 0, s.z/2)) # corners of wire square world.addObjectAtPos (KikiWire (KikiFace.PY, 6), KikiPos (s.x/2-d, 0, s.z/2-d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 3), KikiPos (s.x/2-d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 9), KikiPos (s.x/2+d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 12), KikiPos (s.x/2+d, 0, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (0, 0, s.z/2), KikiPos (s.x/2-d, 0, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2+d+1, 0, s.z/2), KikiPos (s.x, 0, s.z/2)) # ceiling wire square world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (s.x/2-d+1, s.y-1, s.z/2-d), KikiPos (s.x/2+d, s.y-1, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (s.x/2-d+1, s.y-1, s.z/2+d), KikiPos (s.x/2+d, s.y-1, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.NY, 5), KikiPos (s.x/2-d, s.y-1, s.z/2+1)) world.addObjectAtPos (KikiWire (KikiFace.NY, 5), KikiPos (s.x/2-d, s.y-1, s.z/2-1)) world.addObjectAtPos (KikiWire (KikiFace.NY, 13), KikiPos (s.x/2-d, s.y-1, s.z/2)) world.addObjectAtPos (KikiWire (KikiFace.NY, 5), KikiPos (s.x/2+d, s.y-1, s.z/2+1)) world.addObjectAtPos (KikiWire (KikiFace.NY, 5), KikiPos (s.x/2+d, s.y-1, s.z/2-1)) world.addObjectAtPos (KikiWire (KikiFace.NY, 7), KikiPos (s.x/2+d, s.y-1, s.z/2)) # corners of wire square world.addObjectAtPos (KikiWire (KikiFace.NY, 3), KikiPos (s.x/2-d, s.y-1, s.z/2-d)) world.addObjectAtPos (KikiWire (KikiFace.NY, 6), KikiPos (s.x/2-d, s.y-1, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.NY, 12), KikiPos (s.x/2+d, s.y-1, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.NY, 9), KikiPos (s.x/2+d, s.y-1, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (0, s.y-1, s.z/2), KikiPos (s.x/2-d, s.y-1, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (s.x/2+d+1, s.y-1, s.z/2), KikiPos (s.x, s.y-1, s.z/2)) # wall wire lines world.addObjectLine ("KikiWire (KikiFace.PX, 5)", KikiPos ( 0, 0, s.z/2), KikiPos ( 0, s.y, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NX, 5)", KikiPos (s.x-1, 0, s.z/2), KikiPos (s.x-1, s.y, s.z/2)) """, }kiki/py/levels/captured.py0000666000000000000000000000401510313637516014617 0ustar rootroot# ................................................................................................................. # Level design of 'captured' by Niko Boehm # ................................................................................................................. level_dict["captured"] = { "scheme": "default_scheme", "size": (9,9,9), "intro": "captured", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nmove the stones", ), "player": { "position": (0,-3,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ s = world.getSize() for i in [-2, 2]: world.addObjectPoly (KikiStone, [world.decenter (1, 1, i), world.decenter(1, -1, i), world.decenter (-1, -1, i), world.decenter(-1, 1, i)]) world.addObjectPoly (KikiStone, [world.decenter (1, i, 1), world.decenter(1, i, -1),\ world.decenter (-1, i, -1), world.decenter(-1, i, 1)]) world.addObjectPoly (KikiStone, [world.decenter (i, 1, 1), world.decenter(i, 1, -1),\ world.decenter (i, -1, -1), world.decenter(i, -1, 1)]) for i in [-4, -2, 2, 4]: world.addObjectAtPos (KikiStone(), world.decenter(i, 0, 0)) world.addObjectAtPos (KikiStone(), world.decenter(0, i, 0)) world.addObjectAtPos (KikiStone(), world.decenter(0, 0, i)) """, } kiki/py/levels/chain.py0000666000000000000000000000331010336064655014072 0ustar rootroot# ................................................................................................................. level_dict["chain"] = { "scheme": "candy_scheme", "size": (9,9,5), "intro": "chain", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n\n" + \ "place a wire stone\nnext to the exit", ), "player": { "position": (1,2,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,-1,0), }, ], "create": """ s = world.getSize() d = s.z/2 world.addObjectAtPos (KikiWall(), KikiPos (0, 0, d)) world.addObjectAtPos (KikiBomb(), KikiPos (0, 1, d)) world.addObjectAtPos (KikiBomb(), KikiPos (1, 0, d)) world.addObjectAtPos (KikiBomb(), KikiPos (0, 7, d)) world.addObjectAtPos (KikiBomb(), KikiPos (5, 7, d)) world.addObjectAtPos (KikiBomb(), KikiPos (1, 3, d)) world.addObjectAtPos (KikiBomb(), KikiPos (5, 3, d)) world.addObjectAtPos (KikiWireStone(), KikiPos (1,5,d)) """, }kiki/py/levels/church.py0000666000000000000000000000446610313637442014274 0ustar rootroot# ................................................................................................................. level_dict["church"] = { "scheme": "yellow_scheme", "size": (5,7,5), "intro": "church", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n\n" + \ "place a wire stone\nnext to the exit", ), "player": { "position": (1,0,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,-1,0), }, ], "create": """ s = world.getSize() world.addObjectLine ("KikiWireStone()", KikiPos (0, 0, 0), KikiPos (0, s.y-2, 0)) world.addObjectLine ("KikiWireStone()", KikiPos (s.x-1, 0, 0), KikiPos (s.x-1, s.y-2, 0)) world.addObjectLine ("KikiWireStone()", KikiPos (s.x-1, 0, s.z-1), KikiPos (s.x-1, s.y-2, s.z-1)) world.addObjectLine ("KikiWireStone()", KikiPos (0, 0, s.z-1), KikiPos (0, s.y-2, s.z-1)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x/2, s.y-2, s.z/2)) world.addObjectAtPos (KikiGenerator (KikiFace.PY), KikiPos (s.x/2, s.y/2, s.z/2)) world.addObjectAtPos (KikiWireStone(), KikiPos (1, s.y-2, 1)) world.addObjectAtPos (KikiWireStone(), KikiPos (s.x-2, s.y-2, 1)) world.addObjectAtPos (KikiWireStone(), KikiPos (1, s.y-2, s.z-2)) world.addObjectAtPos (KikiWireStone(), KikiPos (s.x-2, s.y-2, s.z-2)) world.addObjectAtPos (KikiWireStone(), KikiPos (s.x/2, s.y-1, s.z/2)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), KikiPos (s.x/2, 0, 0)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), KikiPos (s.x/2, 1, 0)) """, } kiki/py/levels/circuit.py0000666000000000000000000000656110335675601014463 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_circuit(): s=world.getSize() mx=s.x/2 my=s.y/2 mz=s.z/2 sx=s.x-1 sy=s.y-1 sz=s.z-1 p=[ [KikiPos( 0, 0, 0+1),KikiPos( 0, 0,mz),KikiPos( 0,my,mz), KikiFace.X, KikiFace.X], [KikiPos( 0,my,mz+1),KikiPos( 0,my,sz),KikiPos(mx,my,sz), KikiFace.X,KikiFace.NZ], [KikiPos(mx,my-1,sz),KikiPos(mx, 0,sz),KikiPos(my, 0,mz),KikiFace.NZ, KikiFace.Y], [KikiPos(mx+1, 0,mz),KikiPos(sx, 0,mz),KikiPos(sx,my,mz), KikiFace.Y,KikiFace.NX], [KikiPos(sx,my,mz-1),KikiPos(sx,my, 0),KikiPos(mx,my, 0),KikiFace.NX, KikiFace.Z], [KikiPos(mx,my+1, 0),KikiPos(mx,sy, 0),KikiPos(mx,sy,my), KikiFace.Z, KikiFace.NY], [KikiPos(mx+1,sy,my),KikiPos(sx,sy,mz),KikiPos(sx,sy,sz), KikiFace.NY, KikiFace.NY], ] for k in p: stone=lambda:KikiWire( k[3], 15) world.addObjectLine(stone,k[0],k[1]) world.addObjectAtPos(KikiWire( k[3], 15) , k[1]) #correct the last missing stone of the line stone=lambda:KikiWire( k[4], 15) world.addObjectLine(stone,k[1],k[2]) world.addObjectAtPos(KikiWireStone(), world.decenter(1,0,0)) world.addObjectAtPos(KikiWireStone(), world.decenter(-1,0,0)) world.addObjectAtPos(KikiWireStone(), world.decenter(0,1,0)) world.addObjectAtPos(KikiWireStone(), world.decenter(0,-1,0)) world.addObjectAtPos(KikiWireStone(), world.decenter(0,0,1)) world.addObjectAtPos(KikiWireStone(), world.decenter(0,0,-1)) world.addObjectAtPos(KikiWireStone(), world.decenter(0,0,2)) world.addObjectAtPos(KikiWireStone(), world.decenter(0,0,-2)) world.addObjectAtPos (KikiWire (KikiFace.X) , KikiPos (0,0,0)) world.addObjectAtPos (KikiWire (KikiFace.Z) , KikiPos (0,0,0)) world.addObjectAtPos (KikiWire (KikiFace.Z) , KikiPos (1,0,0)) world.addObjectAtPos (KikiWire (KikiFace.NY) , KikiPos (sx,sy,sz)) world.addObjectAtPos (KikiMotorGear (KikiFace.Z) , KikiPos (2,0,0)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.Z) , KikiPos (2,0,1)) g=KikiGenerator (KikiFace.Z) #world.addObjectAtPos (g, KikiPos (1,0,0)) world.addObjectAtPos (g, KikiPos (mx,my,mz)) #g.setActive(True) level_dict["circuit"] = { "scheme": "tron_scheme", "size": (9,9,9), "intro": "circuit", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit\nfeed it with electricity", ), "player": { "coordinates": (4,6,4), "nostatus": 0, "orientation" : rot0 }, "exits": [ { "name": "exit", "active": 0, #"position": (0,0,0), "coordinates": (8,8,8), }, ], "create": func_circuit, } # ................................................................................................................. kiki/py/levels/columns.py0000666000000000000000000000315310313637255014472 0ustar rootroot# ................................................................................................................. level_dict["columns"] = { "scheme": "green_scheme", "size": (7,9,7), "intro": "columns", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nuse the stones", ), "player": { "position": (0,-1,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ s = world.getSize() for y in range (-s.y/2+1, s.y/2+1): for x in range (-s.x/2+1, s.x/2+1, 2): for z in range (-s.z/2+1, s.z/2+1, 2): world.addObjectAtPos (KikiStone (), world.decenter (x, y, z)) world.deleteObject (world.getOccupantAtPos (world.decenter (-1, 0, 1))) world.deleteObject (world.getOccupantAtPos (world.decenter ( 1, 0,-1))) world.deleteObject (world.getOccupantAtPos (world.decenter ( 1, 0, 1))) world.deleteObject (world.getOccupantAtPos (world.decenter (-1, 0,-1))) """, } kiki/py/levels/conductor.py0000666000000000000000000000703310335667666015030 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def KikiWireWall( c , p): if world.isUnoccupiedPos(KikiPos (p.x,p.y,p.z)): world.addObjectAtPos (KikiWall() , KikiPos (p.x,p.y,p.z)) world.addObjectAtPos (KikiWire (KikiFace.X, c ), KikiPos (p.x+1,p.y ,p.z )) world.addObjectAtPos (KikiWire (KikiFace.NX, c ), KikiPos (p.x-1,p.y ,p.z )) world.addObjectAtPos (KikiWire (KikiFace.Y, c ), KikiPos (p.x ,p.y+1,p.z )) world.addObjectAtPos (KikiWire (KikiFace.NY, c ), KikiPos (p.x ,p.y-1,p.z )) world.addObjectAtPos (KikiWire (KikiFace.Z, c ), KikiPos (p.x ,p.y ,p.z+1)) world.addObjectAtPos (KikiWire (KikiFace.NZ, c ), KikiPos (p.x ,p.y ,p.z-1)) def func_conductor(): for h in [ 2,4,6]: world.addObjectLine (KikiWall, KikiPos (5,2,h), KikiPos(5,6,h) ) world.addObjectAtPos(KikiWireStone(), KikiPos (5,1,h)) world.addObjectAtPos(KikiWireStone(), KikiPos (5,6,h)) wire_u=lambda:KikiWire (KikiFace.Z, 4+1 ) wire_d=lambda:KikiWire (KikiFace.NZ, 4+1 ) world.addObjectLine (wire_d, KikiPos (5,2,1),KikiPos (5,6,1)) world.addObjectLine (wire_u, KikiPos (5,2,3),KikiPos (5,6,3)) world.addObjectAtPos( KikiWire (KikiFace.NY, 5 ), KikiPos(5,1,2)) world.addObjectAtPos( KikiWire (KikiFace.Y, 5 ), KikiPos(5,6,2)) world.addObjectAtPos (KikiMotorGear (KikiFace.Z) , KikiPos (5,0,0)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.Z) , KikiPos (5,0,1)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.NX) , KikiPos (4,0,0)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.X) , KikiPos (6,0,0)) g=KikiGenerator (KikiFace.Z) #set to Active as last command in LevelS world.addObjectAtPos (g , KikiPos (5,1,0)) world.addObjectAtPos (KikiWireStone() , KikiPos (5,2,0)) world.addObjectAtPos (KikiWireStone() , KikiPos (5,2,1)) world.addObjectAtPos (KikiWireStone() , KikiPos (5,5,3)) world.addObjectAtPos (KikiWireStone() , KikiPos (5,5,5)) KikiWireWall(15 ,KikiPos(5,4,8)) world.addObjectAtPos(KikiWall(), KikiPos(0,0,0)) world.addObjectAtPos(KikiWall(), KikiPos(10,0,0)) world.addObjectAtPos(KikiWall(), KikiPos(10,8,0)) world.addObjectAtPos(KikiWall(), KikiPos(0,8,0)) g.setActive(True) level_dict["conductor"] = { "scheme": "default_scheme", "size": (11,9,11), "intro": "conductor", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n\n" + \ "and place a powered wirestone\nnext to the exit" ), "player": { "coordinates": (3,0,3), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,4), }, ], "create": func_conductor, } # ................................................................................................................. kiki/py/levels/core.py0000666000000000000000000000361310314406214013731 0ustar rootroot# ................................................................................................................. level_dict["core"] = { "scheme": "yellow_scheme", "size": (9,9,9), "intro": "core", "help": ( "reach the exit\nto reach the exit, move the stones", ), "player": { "position": (1,1,1), "orientation": rotz90, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ s = world.getSize() for y in range (-s.y/2+1.5, s.y/2+0.5, 2): for x in range (-s.x/2+1.5, s.x/2+0.5): for z in range (-s.z/2+1.5, s.z/2+0.5): world.addObjectAtPos (KikiStone (), world.decenter (x, y, z)) for y in [-1, 1]: for x in range (-1, 2): for z in range (-1, 2): world.removeObject (world.getOccupantAtPos(world.decenter (x, y, z))) for z in [-2, 2]: world.removeObject (world.getOccupantAtPos(world.decenter (0, y, z))) for x in [-2, 2]: world.removeObject (world.getOccupantAtPos(world.decenter (x, y, 0))) for y in [-3, 3]: world.removeObject (world.getOccupantAtPos(world.decenter (0, y, 0))) for y in [-4, 4]: world.addObjectAtPos (KikiStone (), world.decenter (0, y, 0)) """, } kiki/py/levels/cube.py0000666000000000000000000000272610325257746013743 0ustar rootroot# level design by Michael Abel # ................................................................................................................. level_dict["cube"] = { "scheme": "default_scheme", "size": (5,5,5), "intro": "cube", "help": ( "reach the exit!" ), "player": { "coordinates": (2,0,0), "nostatus": 0, "orientation": rot0 }, "exits": [ { "name": "exit", "active": 1, "position": (0,2,2), }, ], "create": """ #startblock x=range(5) for (i,j,l) in [(i,j,l) for i in x for j in x for l in x]: if (-1)**(i+j+l) ==-1: #print 'world.addObjectAtPos (KikiStone(), KikiPos('+str(i)+','+str(j)+','+str(l)+'))' world.addObjectAtPos (KikiStone(), KikiPos(i,j,l)) """, } # ................................................................................................................. kiki/py/levels/edge.py0000666000000000000000000000337110340402001013673 0ustar rootroot# level design by Michael Abel # ........................................................................................ def func_edge(): s=world.getSize() for (i,j,l) in [ (m,n,o) for m in range(3) for n in range(3) for o in range(3)]: if (i==2 or j==2 or l==2) and i>=1 and j>=1 and l >=1 : c= 0.6 - (0.3)*(-1)**(i+j+l) d= 0.6 + (0.3)*(-1)**(i+j+l) world.addObjectAtPos (KikiStone(KColor(c ,0, d, 0.8) , False), KikiPos (i,j,l)) world.addObjectAtPos (KikiStone(KColor(c ,0, d, 0.8) , False), KikiPos(s.x-i-1,s.y-j-1,s.z-l-1)) world.addObjectAtPos (KikiStone(KColor(c ,0, d, 0.8) , False), KikiPos (s.x-i-1,j,l)) world.addObjectAtPos (KikiStone(KColor(c ,0, d, 0.8) , False), KikiPos (i,s.y-j-1,s.z-l-1)) level_dict["edge"] = { "scheme": "candy_scheme", "size": (7,7,7), "intro": "edge", "help": ( "$scale(1.5)mission:\nget to the exit!", ), "player": { "coordinates": (3,0,0), "nostatus": 0, "orientation" : rot0 }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_edge, } # ................................................................................................................. kiki/py/levels/electro.py0000666000000000000000000000723310320002372014432 0ustar rootroot# ................................................................................................................. level_dict["electro"] = { "scheme": "metal_scheme", "size": (9,7,9), "intro": "electro", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor", ), "player": { "coordinates": (2,0,4), "orientation": rotz180, "nostatus": 0, }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), }, ], "create": """ s = world.getSize () d = 2 world.addObjectLine ( KikiWireStone, world.decenter (-d, s.y/2, 0), world.decenter (-d, 0, 0)) world.addObjectLine ( KikiWireStone, world.decenter ( d, s.y/2, 0), world.decenter ( d, 0, 0)) world.addObjectLine ( KikiWireStone, world.decenter ( d, 0, 0), world.decenter ( 0, 0, 0)) world.addObjectLine ( KikiWireStone, world.decenter (-d, 0, 0), world.decenter ( 0, 0, 0)) world.addObjectAtPos ( KikiGear (KikiFace.PY), KikiPos (s.x/2-1, 0, s.z/2-1)) world.addObjectAtPos (KikiGenerator (KikiFace.PY), KikiPos (s.x/2+1, 0, s.z/2+1)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), KikiPos (s.x/2, 1, s.z/2)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), KikiPos (s.x/2, 0, s.z/2)) # floor wire square world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2-d+1, 0, s.z/2-d), KikiPos (s.x/2+d, 0, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2-d+1, 0, s.z/2+d), KikiPos (s.x/2+d, 0, s.z/2+d)) world.addObjectLine ("KikiWire (KikiFace.PY, 5)", KikiPos (s.x/2-d, 0, s.z/2-d+1), KikiPos (s.x/2-d, 0, s.z/2+d)) world.addObjectLine ("KikiWire (KikiFace.PY, 5)", KikiPos (s.x/2+d, 0, s.z/2-d+1), KikiPos (s.x/2+d, 0, s.z/2+d)) # corners of wire square world.addObjectAtPos (KikiWire (KikiFace.PY, 6), KikiPos (s.x/2-d, 0, s.z/2-d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 3), KikiPos (s.x/2-d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 9), KikiPos (s.x/2+d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 12), KikiPos (s.x/2+d, 0, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.PX, 5)", KikiPos ( 0, 0, s.z/2), KikiPos ( 0, s.y, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NX, 5)", KikiPos (s.x-1, 0, s.z/2), KikiPos (s.x-1, s.y, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (0, s.y-1, s.z/2), KikiPos (s.x/2-d, s.y-1, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (s.x-d, s.y-1, s.z/2), KikiPos (s.x, s.y-1, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (0, 0, s.z/2), KikiPos (s.x/2-d, 0, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x-d, 0, s.z/2), KikiPos (s.x, 0, s.z/2)) world.addObjectAtPos (KikiWire (KikiFace.PY, 13), KikiPos (s.x/2-d, 0, s.z/2)) world.addObjectAtPos (KikiWire (KikiFace.PY, 7), KikiPos (s.x/2+d, 0, s.z/2)) """, }kiki/py/levels/elevate.py0000666000000000000000000000536310335220300014423 0ustar rootroot# ................................................................................................................. level_dict["elevate"] = { "scheme": "bronze_scheme", "size": (9,5,7), "intro": "elevate", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nfeed it with electricity\n\n" + \ "use the bombs\nto elevate the gears\n" + \ "and the generator\n\n" + \ "the bombs will detonate\nif you shoot them", ), "player": { "position": (3,-2,0), }, "exits": [ { "name": "exit", "active": 0, "position": (2,-2,0), }, ], "create": """ s = world.getSize() world.addObjectAtPos (KikiMotorGear (KikiFace.NY), KikiPos (s.x/2-3, s.y-1, s.z/2)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.NY), KikiPos (s.x/2-3, s.y-2, s.z/2)) world.addObjectAtPos (KikiGenerator (KikiFace.NY), KikiPos (s.x/2+2, 1, s.z/2-1)) world.addObjectAtPos (KikiGear (KikiFace.NY), KikiPos (s.x/2+1, 1, s.z/2+1)) world.addObjectAtPos (KikiGear (KikiFace.NY), KikiPos (s.x/2, 1, s.z/2-1)) world.addObjectAtPos (KikiGear (KikiFace.NY), KikiPos (s.x/2-1, 1, s.z/2+1)) world.addObjectAtPos (KikiGear (KikiFace.NY), KikiPos (s.x/2-2, 1, s.z/2-1)) world.addObjectLine ("KikiWire (KikiFace.NY, KikiWire.VERTICAL)", KikiPos (s.x/2+2, s.y-1, 0), KikiPos (s.x/2+2, s.y-1, s.z)) world.addObjectLine ("KikiWire (KikiFace.PY, KikiWire.VERTICAL)", KikiPos (s.x/2+2, 0, 0), KikiPos (s.x/2+2, 0, s.z)) world.addObjectLine ("KikiWire (KikiFace.PZ, KikiWire.VERTICAL)", KikiPos (s.x/2+2, 0, 0), KikiPos (s.x/2+2, s.y, 0)) world.addObjectLine ("KikiWire (KikiFace.NZ, KikiWire.VERTICAL)", KikiPos (s.x/2+2, 0, s.z-1), KikiPos (s.x/2+2, s.y, s.z-1)) world.addObjectAtPos (KikiBomb (), KikiPos (s.x/2+2, 0, s.z/2-1)) world.addObjectAtPos (KikiBomb (), KikiPos (s.x/2+1, 0, s.z/2+1)) world.addObjectAtPos (KikiBomb (), KikiPos (s.x/2, 0, s.z/2-1)) world.addObjectAtPos (KikiBomb (), KikiPos (s.x/2-1, 0, s.z/2+1)) world.addObjectAtPos (KikiBomb (), KikiPos (s.x/2-2, 0, s.z/2-1)) """, } kiki/py/levels/energy.py0000666000000000000000000001052110313637102014267 0ustar rootroot# ................................................................................................................. level_dict["energy"] = { "scheme": "default_scheme", "size": (9,17,9), "intro": "energy", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nshoot the 4 switches", ), "player": { "position": (0,1,0), "orientation": roty90, }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), }, ], "create": """ s = world.getSize() world.addObjectLine (KikiWall, (0, s.y/2, s.z/2), (s.x, s.y/2, s.z/2)) world.addObjectLine (KikiWall, (s.x/2, s.y/2, 0), (s.x/2, s.y/2, s.z)) world.deleteObject (world.getOccupantAtPos (world.decenter (0,0,0))) world.addObjectAtPos (KikiWall(), world.decenter (0, 3, 0)) world.addObjectAtPos (KikiWall(), world.decenter (0, 6, 0)) world.addObjectAtPos (KikiWall(), world.decenter (0, -4, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 2,-5, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-1,-5, 2)) world.addObjectAtPos (KikiWall(), world.decenter (-2,-5,-1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1,-5,-2)) world.addObjectAtPos (KikiMutant(), world.decenter ( 2,-5, 2)) world.addObjectAtPos (KikiMutant(), world.decenter (-2,-5,-2)) world.addObjectAtPos (KikiMutant(), world.decenter ( 1,-5, 1)) world.addObjectAtPos (KikiMutant(), world.decenter (-1,-5,-1)) world.addObjectAtPos (KikiMutant(), world.decenter ( 2,-5,-2)) world.addObjectAtPos (KikiMutant(), world.decenter (-2,-5, 2)) world.addObjectAtPos (KikiMutant(), world.decenter ( 1,-5,-1)) world.addObjectAtPos (KikiMutant(), world.decenter (-1,-5, 1)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, 3, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, 5, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter ( 1, 4, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (-1, 4, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, 3, 0)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, 5, 0)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, 4, 1)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, 4, -1)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, 3, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, 5, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1, 4, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter (-1, 4, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, 3, 0)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, 5, 0)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, 4, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, 4, -1)) world.switch_counter = 0 def switched (switch): world.switch_counter += switch.isActive() and 1 or -1 exit = kikiObjectToGate (world.getObjectWithName("exit")) exit.setActive (world.switch_counter == 4) switch1 = KikiSwitch() switch1.getEventWithName("switched").addAction (continuous (lambda sw=switch1: switched(sw))) switch2 = KikiSwitch() switch2.getEventWithName("switched").addAction (continuous (lambda sw=switch2: switched(sw))) switch3 = KikiSwitch() switch3.getEventWithName("switched").addAction (continuous (lambda sw=switch3: switched(sw))) switch4 = KikiSwitch() switch4.getEventWithName("switched").addAction (continuous (lambda sw=switch4: switched(sw))) world.addObjectAtPos (switch1, world.decenter (-s.x/2+1, 4, 0)) world.addObjectAtPos (switch2, world.decenter ( s.x/2, 4, 0)) world.addObjectAtPos (switch3, world.decenter (0, 4, -s.z/2+1)) world.addObjectAtPos (switch4, world.decenter (0, 4, s.z/2)) """, } kiki/py/levels/entropy.py0000666000000000000000000000302110335667745014517 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_entropy(): s=world.getSize() d=2 for (i,j,l) in [ (m,n,o) for m in range(s.x) for n in range(s.y) for o in range(s.z)]: if (-1)**(i+j+l) ==1 and not ( d<=i<=s.x-d-1 and d<=j<=s.y-d-1 and d<=l<=s.z-d-1 ): world.addObjectAtPos (KikiStone(KColor(0,0.8,0.2,0.8) , True) , KikiPos (i,j,l)) level_dict["entropy"] = { "scheme": "green_scheme", "size": (9,9,9), "intro": "entropy", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "use the stones to reach it", ), "player": { "coordinates": (4,3,4), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_entropy, } # ................................................................................................................. kiki/py/levels/escape.py0000666000000000000000000000633410313637146014255 0ustar rootroot# ................................................................................................................. level_dict["escape"] = { "scheme": "metal_scheme", "size": (7,9,7), "intro": "escape", "help": ( "$scale(1.5)mission:\ntry to escape!\n\n" + \ "to escape,\nactivate the exit\n\n" + \ "to activate the exit,\nshoot the switch\n\n" + \ "to be able to\nshoot the switch,\nmove the stones", ), "player": { "position": (0,0,0), "orientation": rotx180, }, "exits": [ { "name": "exit", "active": 0, "position": (0,-3,0), }, ], "create": """ s = world.getSize() exit_switch = KikiSwitch() exit_switch.getEventWithName ("switched").addAction (continuous (lambda : world.toggle("exit"))) world.addObjectAtPos (exit_switch, world.decenter ( 0, -2, 0)) world.addObjectAtPos (KikiStone(), world.decenter ( 0, s.y/2, 0)) world.addObjectAtPos (KikiStone(), world.decenter ( 1, s.y/2, 0)) world.addObjectAtPos (KikiStone(), world.decenter ( 0, s.y/2, 1)) world.addObjectAtPos (KikiStone(), world.decenter ( 0, s.y/2,-1)) world.addObjectAtPos (KikiStone(), world.decenter (-1, s.y/2, 0)) world.addObjectLine (KikiStone, world.decenter (-2, s.y/2,-2), world.decenter ( 2, s.y/2,-2)) world.addObjectLine (KikiStone, world.decenter ( 2, s.y/2,-2), world.decenter ( 2, s.y/2, 2)) world.addObjectLine (KikiStone, world.decenter ( 2, s.y/2, 2), world.decenter (-2, s.y/2, 2)) world.addObjectLine (KikiStone, world.decenter (-2, s.y/2, 2), world.decenter (-2, s.y/2,-2)) world.addObjectAtPos (KikiWall(), world.decenter ( 1, 0, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, 0, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-1, 0, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, 0,-1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1,-1, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 0,-1, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-1,-1, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 0,-1,-1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1,-1, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-1,-1, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-1,-1,-1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1,-1,-1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1,-2, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 0,-2, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-1,-2, 0)) world.addObjectAtPos (KikiWall(), world.decenter ( 0,-2,-1)) """, } kiki/py/levels/evil.py0000666000000000000000000000624510335744633013761 0ustar rootroot# ................................................................................................................. level_dict["evil"] = { "scheme": "red_scheme", "size": (13,5,13), "intro": "evil", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "place a powered\n" \ "wire stone next to it.", "a wirestone is powered by\n" \ "a rotating generator\n" \ "or it shares at least\none edge with\n" \ "another powered wirestone.", "this one is hard,\nreally hard,\nbut it's possible.\n\n" \ "good luck!" ), "player": { "position": (1,1,1), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,4), }, ], "create": """ sx, sy, sz = 13,5,13 for z in range(-sz/2+2, sz/2): world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+2, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2-1, 0, z)) for z in range(-sz/2+4, sz/2-2): world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+4, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2-3, 0, z)) for x in range(-sx/2+3, sx/2-1): world.addObjectAtPos (KikiWall (), world.decenter(x, 0, -sz/2+2)) world.addObjectAtPos (KikiWall (), world.decenter(x, 0, sz/2-1)) for x in range(-sx/2+4, sx/2-2): world.addObjectAtPos (KikiWall (), world.decenter(x, 0, -sz/2+4)) world.addObjectAtPos (KikiWall (), world.decenter(x, 0, sz/2-3)) world.addObjectAtPos (KikiGenerator (KikiFace.PY), world.decenter(0,0,-4)) world.addObjectAtPos (KikiWireStone (), world.decenter(4,0,0)) world.addObjectAtPos (KikiWireStone (), world.decenter(-4,0,0)) world.addObjectAtPos (KikiWireStone (), world.decenter(0,-2,-2)) world.addObjectAtPos (KikiWireStone (), world.decenter(0,-1,-2)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), world.decenter(0,0,-2)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), world.decenter(0,1,-2)) world.addObjectAtPos (KikiBomb (), world.decenter(0, 2,-2)) world.addObjectAtPos (KikiBomb (), world.decenter( 1, 0,-2)) world.addObjectAtPos (KikiBomb (), world.decenter(-1, 0,-2)) world.removeObject(world.getOccupantAtPos(world.decenter (0, 0, 3))) world.addObjectAtPos (KikiWireStone (), world.decenter(0,0,3)) """, } kiki/py/levels/flower.py0000666000000000000000000000401710335667770014321 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_flower(): s=world.getSize(); for m in [ (1,KikiWall) , (2,KikiStone) ]: for (k,l) in [ (i,j) for i in [-1*m[0],1*m[0] ] for j in [-1*m[0],1*m[0]]]: world.addObjectLine(m[1], KikiPos(s.x/2+k, s.y/2+l ,0), KikiPos(s.x/2+k, s.y/2+l ,3)) world.addObjectLine(m[1], KikiPos(s.x/2+k, s.y/2+l ,8), KikiPos(s.x/2+k, s.y/2+l ,s.z)) world.addObjectAtPos (KikiStone(KColor(0,1,0,0.5), True), world.decenter(1,0,0)) world.addObjectAtPos (KikiStone(KColor(0,1,0,0.5), True), world.decenter(-1,0,0)) world.addObjectAtPos (KikiStone(KColor(0,1,0,0.5), True), world.decenter(0,1,0)) world.addObjectAtPos (KikiStone(KColor(0,1,0,0.5), True), world.decenter(0,-1,0)) level_dict["flower"] = { "scheme": "metal_scheme", "size": (7,7,11), "intro": "flower", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "the green stone is slicky" + \ "you can't grab it while falling", ), "player": { "coordinates": (3,0,1), "nostatus": 0, "orientation" : roty0 }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_flower, } # ................................................................................................................. kiki/py/levels/gamma.py0000666000000000000000000000704210336074117014072 0ustar rootroot# level design by Michael Abel schemes=[test_scheme, tron_scheme,candy_scheme, default_scheme, green_scheme, yellow_scheme, blue_scheme, red_scheme, metal_scheme, bronze_scheme] # ................................................................................................................. def func_gamma(): s = world.getSize() world.switch_countera = 0 world.switch_counter = 0 def aswitched (): applyColorScheme (schemes[world.switch_countera]) if world.switch_countera==len(schemes)-1 : world.switch_countera=0 else: world.switch_countera+=1 def switched (switch): world.switch_counter += switch.isActive() and 1 or -1 exit = kikiObjectToGate(world.getObjectWithName("exit")) exit.setActive(world.switch_counter == 4) aswitch = KikiSwitch() bswitch = KikiSwitch() cswitch = KikiSwitch() dswitch = KikiSwitch() eswitch = KikiSwitch() aswitch.getEventWithName("switched").addAction ( continuous ( aswitched )) bswitch.getEventWithName("switched").addAction ( continuous (lambda s= bswitch : switched(s) )) cswitch.getEventWithName("switched").addAction ( continuous (lambda s= cswitch : switched(s) )) dswitch.getEventWithName("switched").addAction ( continuous (lambda s= dswitch : switched(s) )) eswitch.getEventWithName("switched").addAction ( continuous (lambda s= eswitch : switched(s) )) world.addObjectAtPos (aswitch , KikiPos (s.x-1,0,0)) world.addObjectAtPos (bswitch , KikiPos (0,0,0)) world.addObjectAtPos (KikiMutant() , KikiPos (s.x/2,0,0)) world.addObjectLine(KikiWall, KikiPos(0,0,1), KikiPos(s.x,0,1)) world.addObjectLine(KikiWall, KikiPos(0,1,0), KikiPos(s.x,1,0)) world.addObjectLine(KikiWall, KikiPos(0,2,2), KikiPos(s.x-3,2,2)) # world.addObjectAtPos (KikiSwitch() , KikiPos (s.x-3,2,2)) world.addObjectLine(KikiWall, KikiPos(2,2,2), KikiPos(2,2,s.z-3)) # world.addObjectAtPos (KikiSwitch() , KikiPos (2,2,s.z-3)) world.addObjectLine(KikiWall, KikiPos(2,2,4), KikiPos(2,s.y-3,4)) #exit world.addObjectAtPos (KikiSwitch() , KikiPos (2,s.y-3,4)) world.addObjectLine(KikiWall, KikiPos(2,4,4), KikiPos(s.x-4,4,4)) world.addObjectAtPos (cswitch , KikiPos (s.x-3,4,4)) world.addObjectLine(KikiWall, KikiPos(4,4,4), KikiPos(4,4,s.z-4)) world.addObjectAtPos (dswitch , KikiPos (4,4,s.z-3)) world.addObjectLine(KikiWall, KikiPos(4,4,6), KikiPos(4,s.y-4,6)) world.addObjectAtPos (eswitch , KikiPos (4,s.y-3,6)) level_dict["gamma"] = { "scheme": "tron_scheme", "size": (10,10,10), "intro": "gamma", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "shoot at the 3 switches to activate the exit", ), "player": { "coordinates": (0,5,0), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 0, "coordinates": (2,7,4), #absolute coord }, ], "create": func_gamma, } # ................................................................................................................. kiki/py/levels/gears.py0000666000000000000000000000673710335666104014125 0ustar rootroot# ................................................................................................................. level_dict["gears"] = { "scheme": "blue_scheme", "size": (9,9,9), "intro": "gears", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n" + \ "and close the circuit\nwith the wire stones", ), "player": { "position": (0,0,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,4,0), }, ], "create": """ s = world.getSize() world.addObjectAtPos ( KikiWireStone (), world.decenter (-1, 0, 0)) world.addObjectAtPos ( KikiWireStone (), world.decenter ( 1, 0, 0)) world.addObjectAtPos ( KikiWireStone (), world.decenter ( 0,-1, 0)) world.addObjectAtPos ( KikiWireStone (), world.decenter ( 0, 1, 0)) world.addObjectAtPos ( KikiWireStone (), world.decenter ( 0, 0,-1)) world.addObjectAtPos ( KikiWireStone (), world.decenter ( 0, 0, 1)) world.addObjectAtPos ( KikiGear (KikiFace.PY), KikiPos (s.x/2-1, 0, s.z/2-1)) world.addObjectAtPos ( KikiGear (KikiFace.PY), KikiPos (s.x/2+1, 0, s.z/2-1)) world.addObjectAtPos ( KikiGear (KikiFace.PY), KikiPos (s.x/2-1, 0, s.z/2+1)) d = 3 world.addObjectAtPos (KikiGenerator (KikiFace.PY), KikiPos (s.x/2+1, 0, s.z/2+1)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), KikiPos (s.x/2, 1, s.z/2)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), KikiPos (s.x/2, 0, s.z/2)) # floor wire square world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2-d+1, 0, s.z/2-d), KikiPos (s.x/2+d, 0, s.z/2-d)) world.addObjectLine ("KikiWire (KikiFace.PY, 10)", KikiPos (s.x/2-d+1, 0, s.z/2+d), KikiPos (s.x/2+d, 0, s.z/2+d)) world.addObjectLine ("KikiWire (KikiFace.PY, 5)", KikiPos (s.x/2-d, 0, s.z/2-d+1), KikiPos (s.x/2-d, 0, s.z/2+d)) world.addObjectLine ("KikiWire (KikiFace.PY, 5)", KikiPos (s.x/2+d, 0, s.z/2-d+1), KikiPos (s.x/2+d, 0, s.z/2+d)) # corners of wire square world.addObjectAtPos (KikiWire (KikiFace.PY, 6), KikiPos (s.x/2-d, 0, s.z/2-d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 3), KikiPos (s.x/2-d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 9), KikiPos (s.x/2+d, 0, s.z/2+d)) world.addObjectAtPos (KikiWire (KikiFace.PY, 12), KikiPos (s.x/2+d, 0, s.z/2-d)) world.addObjectAtPos (KikiWire (KikiFace.PX, 1), KikiPos (0, 0, s.z/2)) world.addObjectAtPos (KikiWire (KikiFace.NX, 1), KikiPos (s.x-1, 0, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.PX, 5)", KikiPos ( 0, 1, s.z/2), KikiPos ( 0, s.y, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NX, 5)", KikiPos (s.x-1, 1, s.z/2), KikiPos (s.x-1, s.y, s.z/2)) world.addObjectLine ("KikiWire (KikiFace.NY, 10)", KikiPos (0, s.y-1, s.z/2), KikiPos (s.x, s.y-1, s.z/2)) """, } kiki/py/levels/gold.py0000666000000000000000000000251410335217066013735 0ustar rootroot# ................................................................................................................. level_dict["gold"] = { "scheme": "yellow_scheme", "size": (3,11,3), "intro": "gold", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "move the stones to reach it", ), "player": { "position": (0,-4,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,4,0), }, ], "create": """ s = world.getSize() for y in range (-s.y/2+3, s.y/2, 2): for x in range (-s.x/2+1, s.x/2+1): for z in range (-s.z/2+1, s.z/2+1): world.addObjectAtPos (KikiStone (), world.decenter (x, y, z)) """, } kiki/py/levels/green.py0000666000000000000000000000624210335670046014113 0ustar rootroot# ................................................................................................................. level_dict["green"] = { "scheme": "green_scheme", "size": (13,5,13), "intro": "green", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "place a powered\n" \ "wire stone next to it.", "a wirestone is powered by\n" \ "a rotating generator\n" \ "or it shares at least\none edge with\n" \ "another powered wirestone.", "this one is hard,\nreally hard,\nbut it's possible.\n\n" \ "good luck!" ), "player": { "position": (1,1,1), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,4), }, ], "create": """ sx, sy, sz = 13,5,13 for z in range(-sz/2+2, sz/2): world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+2, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2-1, 0, z)) for z in range(-sz/2+4, sz/2-2): world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+4, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2-3, 0, z)) for x in range(-sx/2+3, sx/2-1): world.addObjectAtPos (KikiWall (), world.decenter(x, 0, -sz/2+2)) world.addObjectAtPos (KikiWall (), world.decenter(x, 0, sz/2-1)) for x in range(-sx/2+4, sx/2-2): world.addObjectAtPos (KikiWall (), world.decenter(x, 0, -sz/2+4)) world.addObjectAtPos (KikiWall (), world.decenter(x, 0, sz/2-3)) world.addObjectAtPos (KikiWireStone (), world.decenter(0,-1,0)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), world.decenter(0,0,0)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), world.decenter(0,1,0)) world.addObjectAtPos (KikiGenerator (KikiFace.PY), world.decenter(0,0,-4)) world.addObjectAtPos (KikiWireStone (), world.decenter(4,0,0)) world.addObjectAtPos (KikiWireStone (), world.decenter(-4,0,0)) world.addObjectAtPos (KikiWireStone (), world.decenter(0,-2,0)) world.addObjectAtPos (KikiBomb (), world.decenter(0, 2,0)) world.addObjectAtPos (KikiBomb (), world.decenter( 1, 0,0)) world.addObjectAtPos (KikiBomb (), world.decenter(-1, 0,0)) world.removeObject(world.getOccupantAtPos(world.decenter (0, 0, 3))) world.addObjectAtPos (KikiWireStone (), world.decenter(0,0,3)) """, } kiki/py/levels/grenade.py0000666000000000000000000000244510320316314014406 0ustar rootroot# ................................................................................................................. level_dict["grenade"] = { "scheme": "blue_scheme", "size": (9,9,9), "intro": "grenade", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nuse the bombs\n\n" + \ "tip: use 1-9 keys to\nadjust the game speed", ), "player": { "position": (0,-4,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,2,0), }, ], "create": """ world.addObjectAtPos (KikiBomb(), world.decenter (0,-3,-4)) world.addObjectAtPos (KikiBomb(), world.decenter (0,-3,-3)) """, }kiki/py/levels/grid.py0000666000000000000000000000355210313637241013735 0ustar rootroot# ................................................................................................................. level_dict["grid"] = { "scheme": "candy_scheme", "size": (9,9,9), "intro": "grid", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nuse the stones", ), "player": { "position": (1,0,1), }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ s = world.getSize() for y in [-1, 1]: for x in range (-s.x/2+3, s.x/2-1, 2): for z in range (-s.z/2+3, s.z/2-1, 2): world.addObjectAtPos (KikiWall (), world.decenter (x, y, z)) for y in [-4, 4]: for x in range (-s.x/2+1, s.x/2+1, 2): for z in range (-s.z/2+1, s.z/2+1, 2): world.addObjectAtPos (KikiWall (), world.decenter (x, y, z)) world.addObjectAtPos (KikiStone (), world.decenter (3,-3,0)) world.addObjectAtPos (KikiStone (), world.decenter (-3,-3,0)) world.addObjectAtPos (KikiStone (), world.decenter (3,3,0)) world.addObjectAtPos (KikiStone (), world.decenter (-3,3,0)) world.addObjectAtPos (KikiStone (), world.decenter (0,-3,0)) world.addObjectAtPos (KikiStone (), world.decenter (0,3,0)) """, }kiki/py/levels/hidden.py0000666000000000000000000000731110313637352014243 0ustar rootroot# ................................................................................................................. level_dict["hidden"] = { "scheme": "metal_scheme", "size": (9,9,9), "intro": "hidden", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nactivate the 5 switches\n\n" + \ "use the stones to\nreach the exit", ), "player": { "position": (0,-3,1), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), }, ], "create": """ s = world.getSize() world.addObjectAtPos (KikiStone (), KikiPos (0,0,1)) world.addObjectAtPos (KikiStone (), KikiPos (0,1,0)) world.addObjectAtPos (KikiStone (), KikiPos (1,0,1)) world.addObjectAtPos (KikiStone (), KikiPos (1,1,0)) world.addObjectAtPos (KikiStone (), KikiPos (2,0,0)) switch1 = KikiSwitch () world.addObjectAtPos (switch1, KikiPos (1,0,0)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-1,0,1)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-1,1,0)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-2,0,1)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-2,1,0)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-3,0,0)) switch2 = KikiSwitch () world.addObjectAtPos (switch2, KikiPos (s.x-2,0,0)) world.addObjectAtPos (KikiStone (), KikiPos (0,0,s.z-2)) world.addObjectAtPos (KikiStone (), KikiPos (0,1,s.z-1)) world.addObjectAtPos (KikiStone (), KikiPos (1,0,s.z-2)) world.addObjectAtPos (KikiStone (), KikiPos (1,1,s.z-1)) world.addObjectAtPos (KikiStone (), KikiPos (2,0,s.z-1)) switch3 = KikiSwitch () world.addObjectAtPos (switch3, KikiPos (1,0,s.z-1)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-1,0,s.z-2)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-1,1,s.z-1)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-2,0,s.z-2)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-2,1,s.z-1)) world.addObjectAtPos (KikiStone (), KikiPos (s.x-3,0,s.z-1)) switch4 = KikiSwitch () world.addObjectAtPos (switch4, KikiPos (s.x-2,0,s.z-1)) world.addObjectPoly (KikiStone, [KikiPos (s.x/2-1,s.y-1,s.z/2-1), KikiPos (s.x/2-1,s.y-1,s.z/2+1), \ KikiPos (s.x/2+1,s.y-1,s.z/2+1), KikiPos (s.x/2+1,s.y-1,s.z/2-1)]) switch5 = KikiSwitch () world.addObjectAtPos (KikiStone (), KikiPos (s.x/2,s.y-2,s.z/2)) world.addObjectAtPos (switch5, KikiPos (s.x/2,s.y-1,s.z/2)) world.switch_counter = 0 def switched (switch): world.switch_counter += switch.isActive() and 1 or -1 exit = kikiObjectToGate (world.getObjectWithName("exit")) exit.setActive (world.switch_counter == 5) switch1.getEventWithName("switched").addAction (continuous (lambda s=switch1: switched(s))) switch2.getEventWithName("switched").addAction (continuous (lambda s=switch2: switched(s))) switch3.getEventWithName("switched").addAction (continuous (lambda s=switch3: switched(s))) switch4.getEventWithName("switched").addAction (continuous (lambda s=switch4: switched(s))) switch5.getEventWithName("switched").addAction (continuous (lambda s=switch5: switched(s))) """, } kiki/py/levels/jump.py0000666000000000000000000000327510335217405013765 0ustar rootroot# ................................................................................................................. level_dict["jump"] = { "scheme": "red_scheme", "size": (7,7,13), "intro": "jump", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "jump on the stones to reach it\n\n" + \ "you can attach to a stone when falling by\n" + \ "if you move into its direction", ), "player": { "position": (0,0,5), }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,4), }, ], "create": """ s = world.getSize() world.addObjectAtPos (KikiWall(), world.decenter (0,0,1 - s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (0,0,3 - s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (0,0,6 - s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (0,1,10 - s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (1,0,10 - s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (-1,0,10 - s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (0,-1,10 - s.z/2)) """, }kiki/py/levels/love.py0000666000000000000000000000266210335755344013767 0ustar rootroot# ................................................................................................................. level_dict["love"] = { "scheme": "red_scheme", "size": (13,13,13), "intro": "love", "help": ( "$scale(1.5)mission:\nget to the exit!", ), "player": { "position": (0,1,-4), "orientation": rot0, }, "exits": [ { "name": "peace", "active": 1, "position": (0,0,4), }, ], "create": """ heart = [[0,0], [ 1,1], [ 2,1], [ 3,0], [ 3,-1], [ 2,-2], [ 1,-3], [0,-4], [-1,1], [-2,1], [-3,0], [-3,-1], [-2,-2], [-1,-3]] for h in heart: world.addObjectAtPos (KikiBomb(), world.decenter(h[0],h[1]+1,4)) world.addObjectAtPos (KikiStone(), world.decenter(h[0],h[1]+1,-4)) world.addObjectAtPos (KikiMutant(), world.decenter(0,-4,0)) """, } kiki/py/levels/machine.py0000666000000000000000000000411510335670247014417 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_electro(): s = world.getSize() world.addObjectAtPos (KikiMotorGear (KikiFace.X) , KikiPos (0,2,4)) world.addObjectAtPos (KikiWall() , KikiPos (0,2,3)) world.addObjectAtPos (KikiWall() , KikiPos (0,2,5)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.X) , KikiPos (1,2,4)) world.addObjectAtPos (KikiWireStone() , KikiPos (0,2,6)) for i in range(1,9,2): world.addObjectAtPos (KikiWall() , KikiPos (4,0,i)) world.addObjectAtPos (KikiWall() , KikiPos (4,4,i)) world.addObjectAtPos (KikiWall() , KikiPos (0,0,i)) world.addObjectAtPos (KikiWall() , KikiPos (0,4,i)) for i in range(2,8,2): gear = KikiGear(KikiFace.X) world.addObjectAtPos (gear , KikiPos (0,1,i)) if i == 4: gear.setActive(True) gear = KikiGear(KikiFace.X) world.addObjectAtPos (gear , KikiPos (0,3,i)) if i == 4: gear.setActive(True) world.addObjectAtPos (KikiGenerator (KikiFace.X) , KikiPos (0,2,2)) level_dict["machine"] = { "scheme": "tron_scheme", "size": (5,5,9), "intro": "machine", "help": ( "$scale(1.5)mission:\nactivate the exit!", ), "player": { "position": (0,0,0), "orientation": roty270, }, "exits": [ { "name": "exit", "active": 0, "coordinates": (1,2,8), }, ], "create": func_electro, } # .................................................................................................................kiki/py/levels/maze.py0000666000000000000000000000616010335670241013743 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_glimmer(): #level 0| # | # | # | ^ y # | #| | # | ##k| -> x world.addObjectAtPos (KikiWall(), KikiPos(1,0,0)) world.addObjectAtPos (KikiWall(), KikiPos(2,0,0)) world.addObjectAtPos (KikiWall(), KikiPos(3,1,0)) world.addObjectAtPos (KikiWall(), KikiPos(1,2,0)) world.addObjectAtPos (KikiWall(), KikiPos(2,3,0)) #level 1|# # | # |# ##| # |## #| # | # | world.addObjectAtPos (KikiWall(), KikiPos(2,0,1)) world.addObjectAtPos (KikiWall(), KikiPos(0,1,1)) world.addObjectAtPos (KikiWall(), KikiPos(1,1,1)) world.addObjectAtPos (KikiWall(), KikiPos(3,1,1)) world.addObjectAtPos (KikiWall(), KikiPos(0,2,1)) world.addObjectAtPos (KikiWall(), KikiPos(2,2,1)) world.addObjectAtPos (KikiWall(), KikiPos(3,2,1)) world.addObjectAtPos (KikiWall(), KikiPos(0,3,1)) world.addObjectAtPos (KikiWall(), KikiPos(2,3,1)) #level 2| ###| # |# ##| # | #e#| # |### | world.addObjectAtPos (KikiWall(), KikiPos(0,0,2)) world.addObjectAtPos (KikiWall(), KikiPos(1,0,2)) world.addObjectAtPos (KikiWall(), KikiPos(2,0,2)) world.addObjectAtPos (KikiWall(), KikiPos(1,1,2)) world.addObjectAtPos (KikiWall(), KikiPos(3,1,2)) world.addObjectAtPos (KikiWall(), KikiPos(0,2,2)) world.addObjectAtPos (KikiWall(), KikiPos(2,2,2)) world.addObjectAtPos (KikiWall(), KikiPos(3,2,2)) world.addObjectAtPos (KikiWall(), KikiPos(1,3,2)) world.addObjectAtPos (KikiWall(), KikiPos(2,3,2)) world.addObjectAtPos (KikiWall(), KikiPos(3,3,2)) #level 3| # | # | # | # | ## | # | | world.addObjectAtPos (KikiWall(), KikiPos(1,1,3)) world.addObjectAtPos (KikiWall(), KikiPos(2,1,3)) world.addObjectAtPos (KikiWall(), KikiPos(2,2,3)) world.addObjectAtPos (KikiWall(), KikiPos(1,3,3)) world.addObjectAtPos (KikiLight (), KikiPos (3,0,0)) world.setCameraMode (world.CAMERA_INSIDE) level_dict["maze"] = { "scheme": "default_scheme", "size": (4,4,4), "intro": "maze", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "but don't get confused :) !", ), "player": { "coordinates": (3,0,0), "nostatus": 0, "orientation": rotz90, }, "exits": [ { "name": "exit", "active": 1, "coordinates": (3,3,1), #absolute coord }, ], "create": func_glimmer, } # ................................................................................................................. kiki/py/levels/mesh.py0000666000000000000000000000327710335670542013755 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_mesh(): s=world.getSize() def middlemax(u,v,w): s=world.getSize() d= 3.0/( (u-s.x/2.0)**2+ (v-s.y/2.0)**2 + (w-s.z/2.0)**2 + 1 ) return min(1.0 ,max(0.2,d)) def middlemin(u,v,w): s=world.getSize() d= ( (u-s.x/2.0)**2+ (v-s.y/2.0)**2 + (w-s.z/2.0)**2 )/25 return min(1.0 ,max(0.4,d)) for (i,j,l) in [ (m,n,o) for m in range(s.x) for n in range(s.y) for o in range(s.z)]: if (i+1)%2 and (j+1)%2 and (l+1)%2: world.addObjectAtPos (KikiStone(KColor(0.1*i,0.1*j,0.1*l,middlemin(i,j,l)) , True) , KikiPos (i,j,l)) level_dict["mesh"] = { "scheme": "default_scheme", "size": (11,11,11), "intro": "mesh", "help": ( "$scale(1.5)mission:\nget to the exit!", ), "player": { "coordinates": (0,0,5), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_mesh, } # ................................................................................................................. kiki/py/levels/mini.py0000666000000000000000000000353310335670330013743 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_mini(): world.addObjectAtPos( KikiWall(), KikiPos(1,1,0)) world.addObjectAtPos( KikiWall(), KikiPos(3,1,0)) world.addObjectAtPos( KikiWall(), KikiPos(1,3,0)) world.addObjectAtPos( KikiWall(), KikiPos(3,3,0)) world.addObjectAtPos( KikiWall(), KikiPos(1,1,6)) world.addObjectAtPos( KikiWall(), KikiPos(3,1,6)) world.addObjectAtPos( KikiWall(), KikiPos(1,3,6)) world.addObjectAtPos( KikiWall(), KikiPos(3,3,6)) world.addObjectAtPos( KikiStone(), KikiPos(1,1,1)) world.addObjectAtPos( KikiStone(), KikiPos(3,1,1)) world.addObjectAtPos( KikiStone(), KikiPos(1,3,1)) world.addObjectAtPos( KikiStone(), KikiPos(3,3,1)) world.addObjectAtPos( KikiStone(), KikiPos(2,4,0)) level_dict["mini"] = { "scheme": "tron_scheme", "size": (5,5,7), "intro": "mini", "help": ( "$scale(1.5)mission:\nget to the exit!", ), "player": { "coordinates": (2,4,4), "nostatus": 0, "orientation" : rotx90 }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,1), }, ], "create": func_mini, } # ................................................................................................................. kiki/py/levels/move.py0000666000000000000000000000457210320003116013743 0ustar rootroot# ................................................................................................................. level_dict["move"] = { "scheme": "red_scheme", "intro": "move", "size": (7,7,7), "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nactivate the switch\n\n" + \ "to activate the switch,\nshoot it\n\n" + \ "to be able to shoot the switch,\nmove the stone", "to move a stone, press \"$key(push)\" while moving\n\n" + \ "to shoot, press \"$key(shoot)\"", ), "player": { "coordinates": (3,5,5), "orientation": roty180, "nostatus": 0, }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), }, ], "create": """ s = world.getSize () world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2+1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2+1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2-1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2-1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2-1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2+1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2, 1)) exit_switch = KikiSwitch() exit_switch.getEventWithName ("switched").addAction (continuous (lambda : world.toggle("exit"))) world.addObjectAtPos (exit_switch, KikiPos (s.x/2, s.y/2, 0)) """, } kiki/py/levels/mutants.py0000666000000000000000000000412510313637207014502 0ustar rootroot# ................................................................................................................. level_dict["mutants"] = { "scheme": "blue_scheme", "size": (9,9,9), "intro": "mutants", "help": ( "$scale(1.5)mission:\ndeactivate the mutants!\n\n" + \ "to deactivate a mutant,\nshoot him until it get's transparent\n\n" + \ "the exit will open,\nwhen all mutant bots\nare deactivated", ), "player": { "position": (0,-1,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), "world": lambda: outro(), }, ], "create": """ s = world.getSize() world.addObjectLine (KikiWall, (2, 2, 2), (s.x - 3, 2, 2)) world.addObjectLine (KikiWall, (s.x - 3, 2, 2), (s.x - 3, s.y - 3, 2)) world.addObjectLine (KikiWall, (s.x - 3, s.y - 3, 2), (s.x - 3, s.y - 3, s.z - 3)) world.addObjectLine (KikiWall, (s.x - 3, s.y - 3, s.z - 3), (2, s.y - 3, s.z - 3)) world.addObjectLine (KikiWall, (2, s.y - 3, s.z - 3), (2, 2, s.z - 3)) world.addObjectLine (KikiWall, (2, 2, s.z - 3), (2, 2, 2)) world.num_mutants = 5 world.death_counter = 0 def botDied(): world.death_counter += 1 if world.death_counter >= world.num_mutants: world.activate("exit") for i in range (world.num_mutants): mutant = KikiMutant() mutant.getEventWithName ("died").addAction (once (botDied)) world.setObjectRandom (mutant) """, } kiki/py/levels/neutron.py0000666000000000000000000000330410335671201014473 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_neutron(): neutron_scheme["KikiStone"] = { "base": (0.0, 0.5, 0.5, 0.5), } world.addObjectAtPos (KikiStone(), world.decenter (0,0,-5)) world.addObjectAtPos (KikiStone(), world.decenter (0,0,+5)) world.addObjectAtPos (KikiStone(), world.decenter (+5,0,0)) world.addObjectAtPos (KikiStone(), world.decenter (-5,0,0)) world.addObjectAtPos (KikiStone(), world.decenter (0,+5,0)) world.addObjectAtPos (KikiStone(), world.decenter (0,-5,0)) level_dict["neutron"] = { "scheme": "neutron_scheme", "size": (11,11,11), "intro": "neutron", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "it looks simpler than it is", ), "player": { "position": (0,-1,0), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_neutron, } # ................................................................................................................. kiki/py/levels/new1.py0000666000000000000000000000431710320573604013662 0ustar rootroot# ................................................................................................................. level_dict["new1"] = { "scheme": "bronze_scheme", "size": (7,3,9), "intro": "new1", "help": ( "reach the exit", ), "player": { "position": (0,0,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,4), }, ], "create": """ sx, sy, sz = 7,3,9 for z in range(-sz/2+1, sz/2+1): world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+1, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2, 0, z)) if z: world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+2, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2-1, 0, z)) if z <> 4 and z <> -4: world.addObjectAtPos (KikiWall (), world.decenter(0, -sy/2+1, z)) if z <> 1 and z <> -1: world.addObjectAtPos (KikiWall (), world.decenter(0, sy/2, z)) for z in [-3, -1, 1, 3]: world.addObjectAtPos (KikiGear (KikiFace.PY), world.decenter(-sx/2+1, 1, z)) for z in [-3, 3]: world.addObjectAtPos (KikiGear (KikiFace.PY), world.decenter( sx/2, 1, z)) for z in [-1, 1]: world.addObjectAtPos (KikiGenerator (KikiFace.PY), world.decenter( sx/2, 1, z)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), world.decenter( 0, 0, z)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), world.decenter( 0, 1, z)) world.addObjectAtPos(KikiWireStone(), world.decenter(-sx/2+2, 1, 0)) world.addObjectAtPos(KikiWireStone(), world.decenter( sx/2-1, 1, 0)) """, } kiki/py/levels/nice.py0000666000000000000000000000412410335670550013726 0ustar rootroot# level design by Michael Abel def supercube(point=(5,5,5),size=2,obj=KikiWall): p=point s=size world.addObjectPoly (obj,[ KikiPos(p[0]+s,p[1]+s,p[2]), KikiPos(p[0]+s,p[1]-s,p[2]), KikiPos(p[0]-s,p[1]-s,p[2]), KikiPos(p[0]-s,p[1]+s,p[2]) ]) world.addObjectPoly (obj,[ KikiPos(p[0]+s,p[1],p[2]+s), KikiPos(p[0]+s,p[1],p[2]-s), KikiPos(p[0]-s,p[1],p[2]-s), KikiPos(p[0]-s,p[1],p[2]+s) ]) world.addObjectPoly (obj,[ KikiPos(p[0],p[1]+s,p[2]+s), KikiPos(p[0],p[1]+s,p[2]-s), KikiPos(p[0],p[1]-s,p[2]-s), KikiPos(p[0],p[1]-s,p[2]+s) ]) # ................................................................................................................. def func_nice(): s = world.getSize() world.addObjectLine(KikiWall, KikiPos(1,1,1) , KikiPos(9,9,9) ) world.addObjectLine(KikiWall, KikiPos(1,1,9) , KikiPos(9,9,1) ) world.addObjectLine(KikiWall, KikiPos(1,9,1) , KikiPos(9,1,9) ) world.addObjectLine(KikiWall, KikiPos(9,1,1) , KikiPos(1,9,9) ) world.deleteObject (world.getOccupantAtPos (world.decenter (0,0,0))) supercube(point=(5,5,5),size=5,obj=KikiWall) supercube(point=(5,5,5),size=3,obj=KikiStone) level_dict["nice"] = { "scheme": "tron_scheme", "size": (11,11,11), "intro": "nice", "help": ( "$scale(1.5)mission:\nget to the exit!", ), "player": { "position": (2,-1,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_nice, } # ................................................................................................................. kiki/py/levels/plate.py0000666000000000000000000000455210335670600014116 0ustar rootroot# level design by Michael Abel # ................................................................................................................. level_dict["plate"] = { "scheme": "blue_scheme", "size": (7,7,9), "intro": "plate", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "use the bombs : )", ), "player": { "coordinates": (3,2,1), "nostatus": 0, "orientation": KQuaternion.rotationAroundVector(270, KVector(1,0,0)) }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": #TODO: chance the old Walls (commendted) into slicky Walls """ stone=lambda:KikiStone(KColor(0.6,0.6,0.6),True) world.addObjectAtPos (KikiStone(KColor(0.8,0.8,0.3),True), world.decenter(0,0,0)) world.addObjectPoly(stone, [ world.decenter(1,1,0),world.decenter(1,-1,0), world.decenter(-1,-1,0),world.decenter(-1,1,0)], 1) #world.addObjectAtPos (KikiStone(), world.decenter(0,0,0)) #world.addObjectAtPos (KikiWall(), world.decenter(0,1,0)) #world.addObjectAtPos (KikiWall(), world.decenter(0,-1,0)) #world.addObjectAtPos (KikiWall(), world.decenter(1,0,0)) #world.addObjectAtPos (KikiWall(), world.decenter(-1,0,0)) #world.addObjectAtPos (KikiStone(), world.decenter(1,1,0)) #world.addObjectAtPos (KikiStone(), world.decenter(-1,-1,0)) #world.addObjectAtPos (KikiStone(), world.decenter(1,-1,0)) #world.addObjectAtPos (KikiStone(), world.decenter(-1,1,0)) world.addObjectAtPos (KikiBomb(), world.decenter(0,1,-4)) world.addObjectAtPos (KikiBomb(), world.decenter(0,-1,-4)) world.addObjectAtPos (KikiBomb(), world.decenter(1,0,-4)) world.addObjectAtPos (KikiBomb(), world.decenter(-1,0,-4)) world.addObjectAtPos (KikiBomb(), world.decenter(0,0,-2)) """, } kiki/py/levels/pool.py0000666000000000000000000000361610335671150013763 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_pool(): s=world.getSize() d=1 for (i,j,l) in [ (m,n,o) for m in range(s.x) for n in range(s.y) for o in range( s.z/2-1)]: if (-1)**(i+j+l) ==1 and not ( d<=i<=s.x-d-1 and d<=j<=s.y-d-1 and d<=l ): world.addObjectAtPos (KikiStone(KColor(0.3,0.3,1.0,0.9) , True) , KikiPos (i,j,l)) stone=KikiWall for h in [ s.z/2 -1, s.z-5]: world.addObjectPoly(stone,[ KikiPos(0,0,h),KikiPos(s.x-1,0,h),KikiPos(s.x-1,s.y-1,h),KikiPos(0,s.y-1,h) ],close=1) for (i,j) in [ (m,n) for m in range(s.x) for n in range(s.y) ]: if (-1)**(i+j) ==1 : world.addObjectAtPos (KikiWall(), KikiPos (i,j,s.z-1)) world.addObjectAtPos (KikiWall(), KikiPos (i,j,s.z-2)) world.addObjectAtPos (KikiWall(), KikiPos (i,j,s.z-3)) level_dict["pool"] = { "scheme": "green_scheme", "size": (11,11,11), "intro": "pool", "help": ( "$scale(1.5)mission:\nget to the exit!", ), "player": { "coordinates": (5,10,5), "nostatus": 0, "orientation": rotx90 }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,-1), }, ], "create": func_pool, } # ................................................................................................................. kiki/py/levels/random.py0000666000000000000000000003060510335670643014276 0ustar rootroot# level design by Michael Abel # ................................................................................................................. level_dict["random"] = { "scheme": "default_scheme", "size": (21,21,21), "intro": "random", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "jump and try", ), "player": { "coordinates": (1,3,2), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ #startblock world.addObjectAtPos (KikiWall(), KikiPos(1,2,2)) world.addObjectAtPos (KikiWall(), KikiPos(1,18,2)) world.addObjectAtPos (KikiWall(), KikiPos(1,2,18)) world.addObjectAtPos (KikiWall(), KikiPos(1,18,18)) world.addObjectAtPos (KikiWall(), KikiPos(19,2,2)) world.addObjectAtPos (KikiWall(), KikiPos(19,18,2)) world.addObjectAtPos (KikiWall(), KikiPos(19,2,18)) world.addObjectAtPos (KikiWall(), KikiPos(19,18,18)) #h=[0,19] #for (i,j,l) in [ (i,j,l) for i in h for j in h for l in h]: # world.addObjectAtPos (KikiLight (), KikiPos (i,j,l)) world.addObjectAtPos (KikiLight (), KikiPos (0,0,0)) world.addObjectAtPos (KikiLight (), KikiPos (20,20,20)) world.addObjectAtPos (KikiStone(), KikiPos(3,2,6)) world.addObjectAtPos (KikiStone(), KikiPos(5,2,6)) world.addObjectAtPos (KikiStone(), KikiPos(12,4,6)) world.addObjectAtPos (KikiStone(), KikiPos(14,16,6)) world.addObjectAtPos (KikiStone(), KikiPos(2,16,4)) world.addObjectAtPos (KikiStone(), KikiPos(2,14,15)) world.addObjectAtPos (KikiStone(), KikiPos(2,12,13)) world.addObjectAtPos (KikiStone(), KikiPos(4,4,13)) world.addObjectAtPos (KikiStone(), KikiPos(6,4,11)) world.addObjectAtPos (KikiStone(), KikiPos(8,4,13)) world.addObjectAtPos (KikiStone(), KikiPos(8,6,11)) world.addObjectAtPos (KikiStone(), KikiPos(6,6,4)) world.addObjectAtPos (KikiStone(), KikiPos(8,5,4)) world.addObjectAtPos (KikiStone(), KikiPos(10,6,4)) world.addObjectAtPos (KikiStone(), KikiPos(8,17,4)) world.addObjectAtPos (KikiStone(), KikiPos(10,15,4)) world.addObjectAtPos (KikiStone(), KikiPos(8,15,6)) world.addObjectAtPos (KikiStone(), KikiPos(8,13,10)) world.addObjectAtPos (KikiStone(), KikiPos(6,13,12)) world.addObjectAtPos (KikiStone(), KikiPos(5,15,12)) world.addObjectAtPos (KikiStone(), KikiPos(5,15,14)) world.addObjectAtPos (KikiStone(), KikiPos(3,17,14)) world.addObjectAtPos (KikiStone(), KikiPos(15,15,14)) world.addObjectAtPos (KikiStone(), KikiPos(9,13,14)) world.addObjectAtPos (KikiStone(), KikiPos(7,13,14)) world.addObjectAtPos (KikiStone(), KikiPos(7,15,12)) world.addObjectAtPos (KikiStone(), KikiPos(7,13,7)) world.addObjectAtPos (KikiStone(), KikiPos(7,12,5)) world.addObjectAtPos (KikiStone(), KikiPos(5,12,11)) world.addObjectAtPos (KikiStone(), KikiPos(7,7,11)) world.addObjectAtPos (KikiStone(), KikiPos(5,7,13)) world.addObjectAtPos (KikiStone(), KikiPos(3,17,13)) world.addObjectAtPos (KikiStone(), KikiPos(18,17,11)) world.addObjectAtPos (KikiStone(), KikiPos(18,7,9)) world.addObjectAtPos (KikiStone(), KikiPos(15,9,9)) world.addObjectAtPos (KikiStone(), KikiPos(17,11,9)) world.addObjectAtPos (KikiStone(), KikiPos(15,11,5)) world.addObjectAtPos (KikiStone(), KikiPos(13,11,3)) world.addObjectAtPos (KikiStone(), KikiPos(2,11,5)) world.addObjectAtPos (KikiStone(), KikiPos(2,13,18)) world.addObjectAtPos (KikiStone(), KikiPos(7,11,18)) world.addObjectAtPos (KikiStone(), KikiPos(7,9,18)) world.addObjectAtPos (KikiStone(), KikiPos(3,11,18)) world.addObjectAtPos (KikiStone(), KikiPos(3,9,10)) world.addObjectAtPos (KikiStone(), KikiPos(3,11,4)) world.addObjectAtPos (KikiStone(), KikiPos(3,13,10)) world.addObjectAtPos (KikiStone(), KikiPos(3,8,8)) world.addObjectAtPos (KikiStone(), KikiPos(3,6,16)) world.addObjectAtPos (KikiStone(), KikiPos(3,4,5)) world.addObjectAtPos (KikiStone(), KikiPos(18,6,5)) world.addObjectAtPos (KikiStone(), KikiPos(15,8,5)) world.addObjectAtPos (KikiStone(), KikiPos(15,6,8)) world.addObjectAtPos (KikiStone(), KikiPos(10,6,6)) world.addObjectAtPos (KikiStone(), KikiPos(8,6,10)) world.addObjectAtPos (KikiStone(), KikiPos(8,4,7)) world.addObjectAtPos (KikiStone(), KikiPos(10,4,12)) world.addObjectAtPos (KikiStone(), KikiPos(5,4,14)) world.addObjectAtPos (KikiStone(), KikiPos(8,6,14)) world.addObjectAtPos (KikiStone(), KikiPos(7,4,14)) world.addObjectAtPos (KikiStone(), KikiPos(7,6,16)) world.addObjectAtPos (KikiStone(), KikiPos(8,8,16)) world.addObjectAtPos (KikiStone(), KikiPos(8,10,7)) world.addObjectAtPos (KikiStone(), KikiPos(8,13,9)) world.addObjectAtPos (KikiStone(), KikiPos(8,15,4)) world.addObjectAtPos (KikiStone(), KikiPos(8,13,10)) world.addObjectAtPos (KikiStone(), KikiPos(8,7,8)) world.addObjectAtPos (KikiStone(), KikiPos(8,13,6)) world.addObjectAtPos (KikiStone(), KikiPos(4,13,8)) world.addObjectAtPos (KikiStone(), KikiPos(4,15,15)) world.addObjectAtPos (KikiStone(), KikiPos(4,18,17)) world.addObjectAtPos (KikiStone(), KikiPos(6,18,2)) world.addObjectAtPos (KikiStone(), KikiPos(10,18,4)) world.addObjectAtPos (KikiStone(), KikiPos(4,18,2)) world.addObjectAtPos (KikiStone(), KikiPos(18,16,2)) world.addObjectAtPos (KikiStone(), KikiPos(18,18,4)) world.addObjectAtPos (KikiStone(), KikiPos(16,5,4)) world.addObjectAtPos (KikiStone(), KikiPos(16,3,4)) world.addObjectAtPos (KikiStone(), KikiPos(3,5,4)) world.addObjectAtPos (KikiStone(), KikiPos(3,7,2)) world.addObjectAtPos (KikiStone(), KikiPos(13,9,2)) world.addObjectAtPos (KikiStone(), KikiPos(8,9,4)) world.addObjectAtPos (KikiStone(), KikiPos(2,9,2)) world.addObjectAtPos (KikiStone(), KikiPos(2,11,2)) world.addObjectAtPos (KikiStone(), KikiPos(4,11,12)) world.addObjectAtPos (KikiStone(), KikiPos(17,9,12)) world.addObjectAtPos (KikiStone(), KikiPos(17,7,14)) world.addObjectAtPos (KikiStone(), KikiPos(15,7,8)) world.addObjectAtPos (KikiStone(), KikiPos(17,15,8)) world.addObjectAtPos (KikiStone(), KikiPos(17,13,15)) world.addObjectAtPos (KikiStone(), KikiPos(6,11,15)) world.addObjectAtPos (KikiStone(), KikiPos(6,13,10)) world.addObjectAtPos (KikiStone(), KikiPos(6,2,12)) world.addObjectAtPos (KikiStone(), KikiPos(10,4,12)) world.addObjectAtPos (KikiStone(), KikiPos(12,4,10)) world.addObjectAtPos (KikiStone(), KikiPos(14,4,11)) world.addObjectAtPos (KikiStone(), KikiPos(14,2,12)) world.addObjectAtPos (KikiStone(), KikiPos(3,4,12)) world.addObjectAtPos (KikiStone(), KikiPos(5,14,12)) world.addObjectAtPos (KikiStone(), KikiPos(7,7,12)) world.addObjectAtPos (KikiStone(), KikiPos(7,5,2)) world.addObjectAtPos (KikiStone(), KikiPos(3,3,2)) world.addObjectAtPos (KikiStone(), KikiPos(3,5,9)) world.addObjectAtPos (KikiStone(), KikiPos(5,5,7)) world.addObjectAtPos (KikiStone(), KikiPos(7,6,7)) world.addObjectAtPos (KikiStone(), KikiPos(10,4,7)) world.addObjectAtPos (KikiStone(), KikiPos(12,10,7)) world.addObjectAtPos (KikiStone(), KikiPos(3,12,7)) world.addObjectAtPos (KikiStone(), KikiPos(5,12,7)) world.addObjectAtPos (KikiStone(), KikiPos(13,12,5)) world.addObjectAtPos (KikiStone(), KikiPos(8,12,3)) world.addObjectAtPos (KikiStone(), KikiPos(8,10,2)) world.addObjectAtPos (KikiStone(), KikiPos(8,8,13)) world.addObjectAtPos (KikiStone(), KikiPos(8,10,15)) world.addObjectAtPos (KikiStone(), KikiPos(8,12,17)) world.addObjectAtPos (KikiStone(), KikiPos(10,3,17)) world.addObjectAtPos (KikiStone(), KikiPos(11,3,15)) world.addObjectAtPos (KikiStone(), KikiPos(13,3,13)) world.addObjectAtPos (KikiStone(), KikiPos(13,5,12)) world.addObjectAtPos (KikiStone(), KikiPos(14,7,12)) world.addObjectAtPos (KikiStone(), KikiPos(16,18,12)) world.addObjectAtPos (KikiStone(), KikiPos(14,18,6)) world.addObjectAtPos (KikiStone(), KikiPos(12,18,14)) world.addObjectAtPos (KikiStone(), KikiPos(16,18,16)) world.addObjectAtPos (KikiStone(), KikiPos(2,18,14)) world.addObjectAtPos (KikiStone(), KikiPos(10,18,16)) world.addObjectAtPos (KikiStone(), KikiPos(7,18,14)) world.addObjectAtPos (KikiStone(), KikiPos(5,18,5)) world.addObjectAtPos (KikiStone(), KikiPos(3,18,12)) world.addObjectAtPos (KikiStone(), KikiPos(5,16,12)) world.addObjectAtPos (KikiStone(), KikiPos(5,16,14)) world.addObjectAtPos (KikiStone(), KikiPos(5,14,2)) world.addObjectAtPos (KikiStone(), KikiPos(8,12,2)) world.addObjectAtPos (KikiStone(), KikiPos(10,12,12)) world.addObjectAtPos (KikiStone(), KikiPos(12,6,12)) world.addObjectAtPos (KikiStone(), KikiPos(14,6,12)) world.addObjectAtPos (KikiStone(), KikiPos(14,9,14)) world.addObjectAtPos (KikiStone(), KikiPos(14,3,12)) world.addObjectAtPos (KikiStone(), KikiPos(11,3,10)) world.addObjectAtPos (KikiStone(), KikiPos(9,3,12)) world.addObjectAtPos (KikiStone(), KikiPos(7,3,12)) world.addObjectAtPos (KikiStone(), KikiPos(7,5,3)) world.addObjectAtPos (KikiStone(), KikiPos(7,7,14)) world.addObjectAtPos (KikiStone(), KikiPos(7,15,12)) world.addObjectAtPos (KikiStone(), KikiPos(18,17,12)) world.addObjectAtPos (KikiStone(), KikiPos(17,17,10)) world.addObjectAtPos (KikiStone(), KikiPos(17,15,15)) world.addObjectAtPos (KikiStone(), KikiPos(10,13,15)) world.addObjectAtPos (KikiStone(), KikiPos(8,11,15)) world.addObjectAtPos (KikiStone(), KikiPos(8,7,17)) world.addObjectAtPos (KikiStone(), KikiPos(18,9,17)) world.addObjectAtPos (KikiStone(), KikiPos(16,7,17)) world.addObjectAtPos (KikiStone(), KikiPos(14,3,17)) world.addObjectAtPos (KikiStone(), KikiPos(16,6,17)) world.addObjectAtPos (KikiStone(), KikiPos(14,6,14)) world.addObjectAtPos (KikiStone(), KikiPos(15,8,14)) world.addObjectAtPos (KikiStone(), KikiPos(17,8,12)) world.addObjectAtPos (KikiStone(), KikiPos(14,8,14)) world.addObjectAtPos (KikiStone(), KikiPos(16,2,14)) world.addObjectAtPos (KikiStone(), KikiPos(14,6,14)) world.addObjectAtPos (KikiStone(), KikiPos(16,6,14)) world.addObjectAtPos (KikiStone(), KikiPos(18,6,12)) world.addObjectAtPos (KikiStone(), KikiPos(18,4,12)) world.addObjectAtPos (KikiStone(), KikiPos(3,6,12)) world.addObjectAtPos (KikiStone(), KikiPos(3,6,14)) world.addObjectAtPos (KikiStone(), KikiPos(6,6,12)) world.addObjectAtPos (KikiStone(), KikiPos(10,4,12)) world.addObjectAtPos (KikiStone(), KikiPos(3,2,12)) world.addObjectAtPos (KikiStone(), KikiPos(3,2,10)) world.addObjectAtPos (KikiStone(), KikiPos(2,2,8)) world.addObjectAtPos (KikiStone(), KikiPos(2,4,13)) world.addObjectAtPos (KikiStone(), KikiPos(15,4,15)) world.addObjectAtPos (KikiStone(), KikiPos(13,4,15)) world.addObjectAtPos (KikiStone(), KikiPos(13,2,7)) world.addObjectAtPos (KikiStone(), KikiPos(11,15,7)) world.addObjectAtPos (KikiStone(), KikiPos(9,11,7)) world.addObjectAtPos (KikiStone(), KikiPos(7,2,7)) world.addObjectAtPos (KikiStone(), KikiPos(9,2,14)) world.addObjectAtPos (KikiStone(), KikiPos(9,4,18)) world.addObjectAtPos (KikiStone(), KikiPos(9,2,15)) world.addObjectAtPos (KikiStone(), KikiPos(7,2,4)) world.addObjectAtPos (KikiStone(), KikiPos(5,4,4)) world.addObjectAtPos (KikiStone(), KikiPos(5,6,2)) world.addObjectAtPos (KikiStone(), KikiPos(12,4,2)) world.addObjectAtPos (KikiStone(), KikiPos(3,4,4)) world.addObjectAtPos (KikiStone(), KikiPos(3,12,6)) world.addObjectAtPos (KikiStone(), KikiPos(2,12,4)) world.addObjectAtPos (KikiStone(), KikiPos(15,14,4)) world.addObjectAtPos (KikiStone(), KikiPos(7,12,4)) world.addObjectAtPos (KikiStone(), KikiPos(9,12,2)) world.addObjectAtPos (KikiStone(), KikiPos(14,12,4)) world.addObjectAtPos (KikiStone(), KikiPos(12,3,4)) world.addObjectAtPos (KikiStone(), KikiPos(14,10,4)) world.addObjectAtPos (KikiStone(), KikiPos(16,10,13)) world.addObjectAtPos (KikiStone(), KikiPos(15,8,13)) world.addObjectAtPos (KikiStone(), KikiPos(15,6,8)) world.addObjectAtPos (KikiStone(), KikiPos(17,15,8)) world.addObjectAtPos (KikiStone(), KikiPos(6,15,10)) world.addObjectAtPos (KikiStone(), KikiPos(3,13,10)) world.addObjectAtPos (KikiStone(), KikiPos(15,15,10)) world.addObjectAtPos (KikiStone(), KikiPos (19,4,4)) """, } # ................................................................................................................. kiki/py/levels/regal.py0000666000000000000000000000435210335670656014114 0ustar rootroot# ................................................................................................................. level_dict["regal"] = { "scheme": "bronze_scheme", "size": (7,3,9), "intro": "regal", "help": ( "$scale(1.5)mission:\nactivate the exit!", ), "player": { "position": (0,0,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,4), }, ], "create": """ sx, sy, sz = 7,3,9 for z in range(-sz/2+1, sz/2+1): world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+1, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2, 0, z)) if z: world.addObjectAtPos (KikiWall (), world.decenter(-sx/2+2, 0, z)) world.addObjectAtPos (KikiWall (), world.decenter( sx/2-1, 0, z)) if z <> 4 and z <> -4: world.addObjectAtPos (KikiWall (), world.decenter(0, -sy/2+1, z)) if z <> 1 and z <> -1: world.addObjectAtPos (KikiWall (), world.decenter(0, sy/2, z)) for z in [-3, -1, 1, 3]: world.addObjectAtPos (KikiGear (KikiFace.PY), world.decenter(-sx/2+1, 1, z)) for z in [-3, 3]: world.addObjectAtPos (KikiGear (KikiFace.PY), world.decenter( sx/2, 1, z)) for z in [-1, 1]: world.addObjectAtPos (KikiGenerator (KikiFace.PY), world.decenter( sx/2, 1, z)) world.addObjectAtPos (KikiMotorGear (KikiFace.PY), world.decenter( 0, 0, z)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.PY), world.decenter( 0, 1, z)) world.addObjectAtPos(KikiWireStone(), world.decenter(-sx/2+2, 1, 0)) world.addObjectAtPos(KikiWireStone(), world.decenter( sx/2-1, 1, 0)) """, } kiki/py/levels/rings.py0000666000000000000000000000310310313637310014117 0ustar rootroot# ................................................................................................................. level_dict["rings"] = { "scheme": "default_scheme", "size": (9,7,9), "intro": "rings", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nuse the stones", ), "player": { "position": (0,-1,0), }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": """ s = world.getSize() for y in [-1, 1]: x = 3 world.addObjectPoly (KikiStone, [world.decenter (-x, y, -x), world.decenter(-x, y, x), \ world.decenter (x, y, x), world.decenter(x, y, -x)]) for y in [-3, 3]: for x in [-3, -1, 1, 3]: world.addObjectPoly (KikiStone, [world.decenter (-x, y, -x), world.decenter(-x, y, x), \ world.decenter (x, y, x), world.decenter(x, y, -x)]) """, }kiki/py/levels/sandbox.py0000666000000000000000000000510310335670676014455 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_sand(): sys.stdout = KConsole sys.stderr = KConsole def switched(): unoccupied=False for (i,j) in [ (i,j) for i in range(3,6) for j in range(3,6) ]: if world.isUnoccupiedPos(KikiPos(i,j,0)): unoccupied=True if not unoccupied: world.toggle("exit") switch = KikiSwitch() switch.getEventWithName("switched").addAction ( continuous ( switched )) world.addObjectAtPos (switch , KikiPos (0,5,0)) world.addObjectPoly(KikiWall, [ KikiPos(2,2,0),KikiPos(2,6,0),KikiPos(6,6,0),KikiPos(6,2,0)], 1) #inside world.addObjectAtPos(KikiStone() , KikiPos(3,4,2)) world.addObjectAtPos(KikiStone() , KikiPos(3,5,1)) world.addObjectAtPos(KikiStone() , KikiPos(5,3,1)) world.addObjectAtPos(KikiStone() , KikiPos(5,4,2)) #border world.addObjectAtPos(KikiStone() , KikiPos(3,6,1)) world.addObjectAtPos(KikiStone() , KikiPos(4,6,1)) world.addObjectAtPos(KikiStone() , KikiPos(3,2,1)) world.addObjectAtPos(KikiStone() , KikiPos(5,2,1)) world.addObjectAtPos(KikiStone() , KikiPos(6,4,1)) world.addObjectAtPos(KikiStone() , KikiPos(6,3,1)) #outside world.addObjectAtPos(KikiStone() , KikiPos(5,1,0)) world.addObjectAtPos(KikiStone() , KikiPos(1,7,0)) level_dict["sandbox"] = { "scheme": "bronze_scheme", "size": (9,9,6), "intro": "sandbox", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "All you have to do\n" + \ "is to put nine stones\n" + \ "into the sandbox\n" + \ "and shoot at the switch", ), "player": { "coordinates": (4,6,2), "orientation": rotx90 }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,0), }, ], "create": func_sand, } # ................................................................................................................. kiki/py/levels/slick.py0000666000000000000000000000316410335670726014125 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_slick(): s=world.getSize() for b in range(1,4): for (k,l) in [ (i,j) for i in range(b+1,s.x-b-1) for j in range(b+1,s.y-b-1) ]: world.addObjectAtPos (KikiStone(KColor(0,1,0,0.5), True), KikiPos(k,l,b*3)) world.addObjectAtPos( KikiWall(), KikiPos(s.x/2,s.y/2,0)) world.addObjectAtPos (KikiStone(KColor(0,1,0,0.5), True), KikiPos(s.x/2,s.y/2,2)) level_dict["slick"] = { "scheme": "tron_scheme", "size": (9,11,15), "intro": "slick", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "The green stone is slicky\n" + \ "you can't grab it while falling", ), "player": { "coordinates": (4,10,0), "orientation" : rotx90 }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,4), }, ], "create": func_slick, } # ................................................................................................................. kiki/py/levels/start.py0000666000000000000000000000316710313636622014151 0ustar rootroot# ................................................................................................................. level_dict["start"] = { "scheme": "default_scheme", "size": (7,7,11), "intro": "start", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\njump on the stones", "to jump,\npress \"$key(jump)\"\nwhile moving", "to move, press \"$key(move forward)\" or \"$key(move backward)\",\n\n" + \ "to turn, press \"$key(turn left)\" or \"$key(turn right)\"" ), "player": { "coordinates": (3,0,3), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,3), }, ], "create": """ world.addObjectAtPos (KikiWall(), world.decenter (0,0,-2)) world.addObjectAtPos (KikiWall(), world.decenter (0,0,-4)) world.addObjectAtPos (KikiWall(), world.decenter (0,0,1)) """, }kiki/py/levels/steps.py0000666000000000000000000000326710335671135014155 0ustar rootroot# ................................................................................................................. level_dict["steps"] = { "scheme": "blue_scheme", "size": (7,7,13), "intro": "steps", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\njump on the stones", "to jump,\npress \"$key(jump)\"\nwhile moving", "to move, press \"$key(move forward)\" or \"$key(move backward)\",\n\n" + \ "to turn, press \"$key(turn left)\" or \"$key(turn right)\"", ), "player": { "coordinates": (3,0,6), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,1,3), }, ], "create": """ world.addObjectAtPos (KikiWall(), world.decenter (0,0,3)) world.addObjectAtPos (KikiWall(), world.decenter (0,-1,1)) world.addObjectAtPos (KikiWall(), world.decenter (0,-2,-1)) world.addObjectAtPos (KikiWall(), world.decenter (0,-3,-3)) """, }kiki/py/levels/stones.py0000666000000000000000000000411210320274203014305 0ustar rootroot# ................................................................................................................. level_dict["stones"] = { "scheme": "blue_scheme", "size": (11,11,12), "intro": "stones", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "to get to the exit,\nuse the stones", "to move a stone,\npress \"$key(push)\"\nwhile moving", ), "player": { "position": (0,-1,-1), "orientation": rotx90 * roty180, }, "exits": [ { "name": "exit", "active": 1, "coordinates": (5,5,6), }, ], "create": """ s = world.getSize() num = 4 for i in range(1,num+1): world.addObjectPoly (KikiWall, [(s.x/2-i, s.y/2-i, i-1), \ (s.x/2+i, s.y/2-i, i-1), \ (s.x/2+i, s.y/2+i, i-1), \ (s.x/2-i, s.y/2+i, i-1)]) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-2, s.y/2, 3)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+2, s.y/2, 3)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2+2, 3)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2-2, 3)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2, 2)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2, 2)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2+1, 2)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2-1, 2)) """, }kiki/py/levels/strange.py0000666000000000000000000000715710313637407014464 0ustar rootroot# ................................................................................................................. level_dict["strange"] = { "scheme": "default_scheme", "size": (9,9,9), "intro": "strange", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nfeed it with electricity:\n\n" + \ "connect the generator\nwith the motor\n\n" + \ "place a wire stone\nnext to the exit", ), "player": { "position": (1,2,0), }, "exits": [ { "name": "exit", "active": 0, "position": (0,0,-2), }, ], "create": """ s = world.getSize() d = 2 world.addObjectAtPos (KikiBomb(), world.decenter (0, 0, 0)) world.addObjectAtPos (KikiWireStone(), world.decenter ( 1, 0, 0)) world.addObjectAtPos (KikiWireStone(), world.decenter ( 0, 1, 0)) world.addObjectAtPos (KikiWireStone(), world.decenter (-1, 0, 0)) world.addObjectAtPos (KikiWireStone(), world.decenter ( 0, -1, 0)) world.addObjectAtPos (KikiBomb(), KikiPos (1, 1, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x-2, s.y-2, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x-2, 1, d)) world.addObjectAtPos (KikiBomb(), KikiPos (1, s.y-2, d)) d = s.z-2 world.addObjectAtPos (KikiBomb(), KikiPos (1, 1, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x-2, s.y-2, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x-2, 1, d)) world.addObjectAtPos (KikiBomb(), KikiPos (1, s.y-2, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x/2, s.y/2, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x/2, 1, d)) world.addObjectAtPos (KikiBomb(), KikiPos (1, s.y/2, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x/2, s.y-2, d)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x-2, s.y/2, d)) d = 2 world.addObjectAtPos (KikiStone(), KikiPos ( s.x/2-1, 1, d)) world.addObjectAtPos (KikiStone(), KikiPos ( s.x/2+1, 1, d)) world.addObjectAtPos (KikiStone(), KikiPos ( s.x/2-1, s.y-2, d)) world.addObjectAtPos (KikiStone(), KikiPos ( s.x/2+1, s.y-2, d)) world.addObjectAtPos (KikiStone(), KikiPos ( 1, s.y/2-1, d)) world.addObjectAtPos (KikiStone(), KikiPos ( 1, s.y/2+1, d)) world.addObjectAtPos (KikiStone(), KikiPos ( s.x-2, s.y/2-1, d)) world.addObjectAtPos (KikiStone(), KikiPos ( s.x-2, s.y/2+1, d)) world.addObjectAtPos (KikiMotorGear (KikiFace.NZ), KikiPos (s.x/2+1, s.y/2, s.z-1)) world.addObjectAtPos (KikiMotorCylinder (KikiFace.NZ), KikiPos (s.x/2+1, s.y/2, s.z-2)) world.addObjectAtPos (KikiGenerator (KikiFace.NZ), KikiPos (s.x/2, s.y/2, s.z/2+1)) world.addObjectLine ("KikiWire (KikiFace.NY, KikiWire.VERTICAL)", KikiPos (s.x/2, s.y-1, 0), KikiPos (s.x/2, s.y-1, s.z)) world.addObjectLine ("KikiWire (KikiFace.PY, KikiWire.VERTICAL)", KikiPos (s.x/2, 0, 0), KikiPos (s.x/2, 0, s.z)) world.addObjectLine ("KikiWire (KikiFace.PZ, KikiWire.VERTICAL)", KikiPos (s.x/2, 0, 0), KikiPos (s.x/2, s.y, 0)) world.addObjectLine ("KikiWire (KikiFace.NZ, KikiWire.VERTICAL)", KikiPos (s.x/2, 0, s.z-1), KikiPos (s.x/2, s.y, s.z-1)) """, } kiki/py/levels/switch.py0000666000000000000000000000750310313636706014316 0ustar rootroot# ................................................................................................................. level_dict["switch"] = { "scheme": "yellow_scheme", "size": (7,7,7), "intro": "switch", "help": ( "$scale(1.5)mission:\nactivate the exit!\n\n" + \ "to activate the exit,\nactivate the 4 switches\n\n" + \ "to activate the switches,\nshoot them\n\n" + \ "to be able to shoot the switches,\nmove the center stone", "to move the center stone,\n\nuse the bomb.\n\n" + \ "the bomb will detonate if you shoot it" ), "player": { "coordinates": (3,0,3), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 0, "position": (0,-1,0), }, ], "create": """ s = world.getSize () h = 0 # bomb and stones world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y/2, s.z/2)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2, s.y-2, s.z/2)) world.addObjectAtPos (KikiBomb(), KikiPos (s.x/2, 1, s.z/2)) # stone frames for switches world.addObjectAtPos (KikiWall(), world.decenter ( 0, h-1, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, h+1, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter ( 1, h, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (-1, h, s.z/2)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, h-1, 0)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, h+1, 0)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, h, 1)) world.addObjectAtPos (KikiWall(), world.decenter (s.x/2, h, -1)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, h-1, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter ( 0, h+1, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter ( 1, h, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter (-1, h, -s.z/2+1)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, h-1, 0)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, h+1, 0)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, h, 1)) world.addObjectAtPos (KikiWall(), world.decenter (-s.x/2+1, h, -1)) # switches world.switch_counter = 0 def switched (switch): world.switch_counter += switch.isActive() and 1 or -1 exit = kikiObjectToGate(world.getObjectWithName("exit")) exit.setActive(world.switch_counter == 4) switch1 = KikiSwitch() switch1.getEventWithName("switched").addAction (continuous (lambda s=switch1: switched(s))) switch2 = KikiSwitch() switch2.getEventWithName("switched").addAction (continuous (lambda s=switch2: switched(s))) switch3 = KikiSwitch() switch3.getEventWithName("switched").addAction (continuous (lambda s=switch3: switched(s))) switch4 = KikiSwitch() switch4.getEventWithName("switched").addAction (continuous (lambda s=switch4: switched(s))) world.addObjectAtPos (switch1, world.decenter (-s.x/2+1, 0, 0)) world.addObjectAtPos (switch2, world.decenter ( s.x/2, 0, 0)) world.addObjectAtPos (switch3, world.decenter (0, 0, -s.z/2+1)) world.addObjectAtPos (switch4, world.decenter (0, 0, s.z/2)) """, }kiki/py/levels/throw.py0000666000000000000000000000320110335752474014154 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_throw(): world.addObjectAtPos( KikiWall(), world.decenter(-2,0,2)) world.addObjectAtPos( KikiStone(), world.decenter(0,1,3)) world.addObjectAtPos( KikiStone(), world.decenter(0,-1,3)) level_dict["throw"] = { "scheme": "tron_scheme", "size": (5,7,7), "intro": "throw", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "use the stones to reach it\n\n" + \ "push a stone and it will fall down\n" + \ "if nothing is below it\n\n" + \ "but remember:\nyou decide where down and below is!", ), "player": { "position": (0,1,2), "orientation": rotx90 * rotx180 * roty270, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_throw, } # ................................................................................................................. kiki/py/levels/towers.py0000666000000000000000000000177610337322620014337 0ustar rootroot# level design by Ben "mrthoughtful" Griffin # Should take not more than 90 moves. #----------------------------------------------------- level_dict["towers"] = { "scheme": "metal_scheme", "size": (9,9,15), "intro": "towers", "help": ( "$scale(1.5)mission:\nget to the exit!\n\nto get to the exit,\nmove the stones", ), "player": { "coordinates": (4,5,0), "orientation": rotx90, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,-3), }, ], "create": """ s = world.getSize() world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2+1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2+1, 1)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2-1, s.y/2+1, 2)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2+1, 0)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2+1, 1)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2+1, 2)) world.addObjectAtPos (KikiStone(), KikiPos (s.x/2+1, s.y/2+1, 3)) """, } kiki/py/levels/walls.py0000666000000000000000000000353110335671113014127 0ustar rootroot# level design by Michael Abel # ................................................................................................................. def func_walls(): s=world.getSize() def middlemax(u,v,w): s=world.getSize() d= 3.0/( (u-s.x/2.0)**2+ (v-s.y/2.0)**2 + (w-s.z/2.0)**2 + 1 ) return min(1.0 ,max(0.2,d)) def middlemin(u,v,w): s=world.getSize() d= 2* ( (u-s.x/2.0)**2+ (v-s.y/2.0)**2 + (w-s.z/2.0)**2 )/25 return min(1.0 ,max(0.4,d)) for (i,j,l) in [ (m,n,o) for m in range(s.x) for n in range(s.y) for o in range(s.z)]: if i==s.x/2 or i==s.x/2-2 or i==s.x/2+2: world.addObjectAtPos (KikiStone(KColor(0.1*i,0.1*j,0.1*l,0.6) , False) , KikiPos (i,j,l)) level_dict["walls"] = { "scheme": "default_scheme", "size": (7,5,5), "intro": "walls", "help": ( "$scale(1.5)mission:\nget to the exit!\n\n" + \ "The exit is hidden\n" + \ "in the middle of\n" + \ "the central wall", ), "player": { "coordinates": (0,0,2), "nostatus": 0, }, "exits": [ { "name": "exit", "active": 1, "position": (0,0,0), }, ], "create": func_walls, } # ................................................................................................................. kiki/py/levels.py0000666000000000000000000000537310335751706013022 0ustar rootroot# -*- encoding: utf-8 -*- if Controller.isDebugVersion(): print "[levels.py]" # ................................................................................................................. level_list = ["start", "steps", "move", "electro", "elevate", "throw", # intro "gold", "jump", "escape", "gears", "gamma", "cube", "switch", "borg", # easy "mini", "blocks", "bombs", "sandbox", "energy", "maze", "love", "towers", "edge", "random", "plate", "nice", "entropy", # medium "slick", "bridge", "flower", "stones", "walls", "grid", # difficult "rings", "core", "bronze", "pool", # difficult "hidden", "church", "strange", "mesh", "columns", "machine", # tough "neutron", "captured", "circuit", "regal", "conductor", "evil", # very hard "mutants", # outro ] # ................................................................................................................. level_dict = {} # ................................................................................................................. def outro (index=0): """well hidden outro :-)""" outro_text = [ "$scale(1.5)congratulations!\n\n$scale(1)you rescued\nthe nano world!\n\n" + "the last dumb mutant bot\nhas been destroyed.\n\nthe maker is functioning again.\n" + "kiki will go now\nand see all his new friends.\n\nyou should maybe\ndo the same?", "the maker wants to thank you!\n\n(btw.: you thought\nyou didn't see\nkiki's maker in the game?\n" + "you are wrong!\nyou saw him\nall the time,\nbecause kiki\nlives inside him!)\n\n$scale(1.5)the end", "p.s.: the maker of the game\nwants to thank you as well!\n\ni definitely want your feedback:\n" + "please send me a mail (monsterkodi@users.sf.net)\nwith your experiences,\n" + "which levels you liked, etc.\n\nthanks in advance and have a nice day,\n\nyours kodi" ] more_text = index < len(outro_text)-1 less_text = index > 0 page_text = outro_text[index] page_text += "\n\n$scale(0.5)(%d/%d)" % (index+1, len (outro_text)) page = KikiPageText (page_text, more_text, less_text) page.getEventWithName ("hide").addAction (once (display_main_menu)) if more_text: page.getEventWithName ("next").addAction (once (lambda i=index+1: outro (i))) if less_text: page.getEventWithName ("previous").addAction (once (lambda i=index-1: outro (i))) # import the levels for levelName in level_list: execfile (kikipy_path + os.path.sep + "levels" + os.path.sep + levelName + ".py") kiki/py/levelselection.py0000666000000000000000000000371510334735460014541 0ustar rootroot if Controller.isDebugVersion(): print "[levelselection.py]" world.max_level_index = 0 # ................................................................................................................. # Level Selection # ................................................................................................................. def levelSelection (level_index=-1, escapeAction=0): def startLevel (): world.setCameraMode (world.CAMERA_BEHIND) KikiPyWorld ().create (level_list[menu.getCurrentIndex()]) def displayLevel (index): w = KikiPyWorld () w.preview = true world.setCameraMode (world.CAMERA_FOLLOW) w.create (level_list[index]) def levelChanged (): displayLevel (menu.getCurrentIndex()) # ............................................................................................................ last_level = highscore.getLastAvailableLevel() current_level = (level_index >= 0) and level_index or last_level world.max_level_index = last_level menu = KikiScrollMenu (5, 3, current_level) menu.circular = False if escapeAction: menu.getEventWithName ("hide").addAction (escapeAction) else: menu.setEscapeActive (false) menu.getEventWithName ("changed").addAction (continuous (levelChanged)) menu.getProjection().setViewport (0.0, 0.0, 1.0, 0.4) for index in range (last_level+1): level_name = level_dict[level_list[index]]["intro"] user_moves = highscore.levelUserMoves (level_name) par_moves = highscore.levelParMoves (level_name) result = user_moves and str(par_moves-user_moves) or "new" item_text = "%d |%s|%s " % (index+1, level_name, result) menu.addItem (item_text, once (startLevel)) displayLevel (current_level) menu.show() kiki/py/obj.py0000666000000000000000000005402007644705766012311 0ustar rootroot from math import * # ................................................................................................................. # ObjFileConverter # # creates header files from .obj models # ................................................................................................................. class ObjFileConverter: """loads a .obj file and writes a .h header file with arrays for triangles, quads, triangle fans and quad strips""" # ................................................................................................................ def __init__(self, file_path, object_name = ""): """initialization with path to .obj file and optional object name""" try: file = open (file_path, "r") self.file_path = file_path except: try: file = open (file_path + ".obj", "r") self.file_path = file_path + ".obj" except: print "[*** Error ***] unable to open file", file_path return if object_name: self.object_name = object_name else: self.object_name = self.file_path[:self.file_path.find(".")] self.dir_path = os.path.dirname (self.file_path) if self.dir_path: self.dir_path += "/" self.lines = file.readlines() self.line = 0 self.vertices = [] self.normals = [] self.quads = [] self.triangles = [] self.strips = [] self.fans = [] self.parseObjects() self.optimizeFaces() print "\nsummary:" print "vertices/normals:", len (self.vertices), len (self.normals) print "triangles: ", len (self.triangles) print "quads: ", len (self.quads) print "fans: ", len (self.fans) print "strips: ", len (self.strips) self.generateArrays() # ................................................................................................................ def parseObjects (self): """collects objects""" if self.line >= len(self.lines): return while self.lines[self.line][0:2] <> "o ": self.line += 1 if self.line >= len(self.lines): return print "\nobject", self.lines[self.line][2:] num_v = len (self.vertices) num_n = len (self.normals) num_t = len (self.triangles) num_q = len (self.quads) self.parseVertices() self.parseNormals() self.parseFaces() print "vertices/normals:", len (self.vertices) - num_v, len (self.normals) - num_n print "triangles: ", len (self.triangles) - num_t print "quads: ", len (self.quads) - num_q print "" self.parseObjects() # ................................................................................................................ def parseVertices (self): """collects vertices""" while self.lines[self.line][0:2] <> "v ": self.line += 1 while self.lines[self.line][0:2] == "v ": self.vertices.append (map(float, self.lines[self.line][2:].split())) self.line += 1 # ................................................................................................................ def parseNormals (self): """collects normals""" while self.lines[self.line][0:2] == "vn": normal_coords = map (float, self.lines[self.line][2:].split()) link = false for normal in self.normals: if normal == normal_coords: link = self.normals.index(normal) break if link: self.normals.append (link) else: self.normals.append (normal_coords) self.line += 1 # ................................................................................................................ def parseFaces (self): """collects faces into triangle and quad lists""" while self.lines[self.line][0:2] <> "f ": self.line += 1 while self.lines[self.line][0:2] == "f ": zipped_list = map (lambda s: (int(s.split("//")[0])-1, int(s.split("//")[1])-1), \ self.lines[self.line][2:].split()) vertex_list = map (lambda s: s[0], zipped_list) normal_list = map (lambda s: s[1], zipped_list) for normal_index in normal_list: if type (self.normals[normal_index]) == types.IntType: vertex_list.append (self.normals[normal_index]) else: vertex_list.append (normal_index) if len (vertex_list) == 6: self.triangles.append (vertex_list) else: self.quads.append (vertex_list) self.line += 1 if self.line >= len (self.lines): return # ................................................................................................................ def optimizeFaces (self): """creates triangle fans and quad strips from collected triangles and quads""" def shift_quad (quad, shift=-2): return quad[(4-shift)%4:4] + quad[:(4-shift)%4] + \ quad[4+(4-shift)%4:] + quad[4:4+(4-shift)%4] def shift_triangle (triangle, shift): return triangle[(3-shift)%3:3] + triangle[:(3-shift)%3] + \ triangle[3+(3-shift)%3:] + triangle[3:3+(3-shift)%3] def equal_quad (q, p): for i in range(1,5): s = shift_quad(p, i) if q == s: return i return 0 # ................................................................... quad strips strips = [] # seed strip search with pairs # of neighboring quads for quad in self.quads: # for each quad for q in self.quads[self.quads.index(quad)+1:]: # loop over remaining quads for i in range(4): # search for same edge for j in range(4): squad = shift_quad (quad, 2-i) sq = shift_quad (q, -((i+j)%4)) if squad[2] == sq[1] and squad[3] == sq[0] and \ squad[6] == sq[5] and squad[7] == sq[4]: # same edge found strips.append ([squad, sq]) # create new strip if len (strips): remove = 1 while remove: for strip in strips: # for each strip remove = [] s1 = strip for s2 in strips[strips.index(s1)+1:]: # loop over other strips if s1[-1][:4] == s2[0][:4]: # join, if matching s1 = s1 + s2[1:] # head or tail remove.append (s2) elif s2[-1][:4] == s1[0][:4]: s1 = s2 + s1[1:] remove.append (s2) elif s1[0][:4] == shift_quad (s2[0])[:4]: # eventually reverse reversed = map (shift_quad, s2) # other strip reversed.reverse() s1 = reversed + s1[1:] remove.append (s2) elif s1[-1][:4] == shift_quad (s2[-1])[:4]: reversed = map (shift_quad, s2) reversed.reverse() s1 = s1 + reversed[1:] remove.append (s2) if remove: # if strips have been joined strips.remove (strip) # remove joined strips for s in remove: if s in strips: strips.remove (s) strips.insert (0, s1) # insert join strips.sort (lambda a, b: len (b) - len (a)) # sort strips by length for strip in strips: # filter strips ... use_strip = 1 for quad in strip: # loop over quads in strip found = 0 # and search them in quadlist for q in self.quads: if equal_quad (quad, q): # quad found found = 1 # continue with next quad break if not found: # quad not found use_strip = 0 # don't use strip break if use_strip: # no used quad found self.strips.append (strip) # store strip for quad in strip: # remove its quads from quadlist index = 0 while index < len (self.quads): if equal_quad (quad, self.quads[index]): del self.quads[index] else: index += 1 # ................................................................... triangle fans fans = {} for triangle in self.triangles: for t in self.triangles: for i in range (3): for j in range (3): if triangle[i] == t[(i+j)%3] and triangle[(i+2)%3] == t[(i+j+1)%3] and \ triangle[i+3] == t[(i+j)%3+3] and triangle[(i+2)%3+3] == t[(i+j+1)%3+3]: if triangle[i] in fans: fan = fans[triangle[i]] if fan[-1] == triangle: fan.append (t) elif fan[0] == t: fan.insert (0, triangle) else: fans[triangle[i]] = [triangle, t] for fan in fans: if fans[fan][0] == fans[fan][-1]: fans[fan].pop() fans = fans.values() fans.sort (lambda a, b: len (b) - len (a)) for fan in fans: use_fan = 0 for triangle in fan: if triangle in self.triangles: use_fan = 1 self.triangles.remove (triangle) if use_fan: self.fans.append (fan) for fan in self.fans: for index in range (len(fan)-1): t1 = fan[index] t2 = fan[index+1] for i in range(3): for j in range(3): if t1[i] == t2[(i+j)%3] and t1[(i+2)%3] == t2[(i+j+1)%3]: fan[index] = shift_triangle (t1,-i) fan[index+1] = shift_triangle (t2,-(i+j)%3) # ................................................................................................................ def generateArrays (self): """writes the header file with arrays for the collected triangles, quads, fans and strips""" result = [] result.append ("#ifndef __obj_%s" % (self.object_name,)) result.append ("#define __obj_%s" % (self.object_name,)) # ................................................................... render macro result.append ("\n#define render_%s { \\" % (self.object_name,)) if self.triangles: result.append (" glInterleavedArrays (GL_N3F_V3F, 0, %sInterleavedTriangles); \\" % \ (self.object_name,)) result.append (" glDrawArrays (GL_TRIANGLES, 0, %sNumTriangles*3); \\" % \ (self.object_name,)) if self.quads: result.append (" glInterleavedArrays (GL_N3F_V3F, 0, %sInterleavedQuads); \\" % \ (self.object_name,)) result.append (" glDrawArrays (GL_QUADS, 0, %sNumQuads*4); \\" % (self.object_name,)) if self.strips: result.append (" glInterleavedArrays (GL_N3F_V3F, 0, %sInterleavedQuadStrips); \\" % \ (self.object_name,)) result.append (" for (int i = 0; i < %sNumQuadStrips; i++) { \\" % (self.object_name,)) result.append (" glDrawArrays (GL_QUAD_STRIP, %sQuadStripIndices[i]/6, \\" % (self.object_name,)) result.append (" (%sQuadStripIndices[i+1] - %sQuadStripIndices[i])/6); \\" % \ (self.object_name, self.object_name)) result.append (" } \\") if self.fans: result.append (" glInterleavedArrays (GL_N3F_V3F, 0, %sInterleavedTriangleFans); \\" % \ (self.object_name,)) result.append (" for (int i = 0; i < %sNumTriangleFans; i++) { \\" % (self.object_name,)) result.append (" glDrawArrays (GL_TRIANGLE_FAN, %sTriangleFanIndices[i]/6, \\" % \ (self.object_name,)) result.append (" (%sTriangleFanIndices[i+1] - %sTriangleFanIndices[i])/6); \\" % \ (self.object_name, self.object_name)) result.append (" } \\") result.append ("}\n") # ................................................................... triangles if self.triangles: result.append ("static int %sNumTriangles = %d;" % \ (self.object_name, len (self.triangles))) result.append ("static float %sInterleavedTriangles[%d] = {" % \ (self.object_name, len (self.triangles)*18)) for triangle in self.triangles: line = "" for i in range (3): line += "%6.3f, %6.3f, %6.3f," % tuple (self.normals[triangle[i+3]]) line += "%6.3f, %6.3f, %6.3f,\n" % tuple (self.vertices[triangle[i]]) result.append (line) result.append("};\n") # ................................................................... quads if self.quads: result.append("static int %sNumQuads = %d;" % (self.object_name, len (self.quads))) result.append("static float %sInterleavedQuads[%d] = {" % \ (self.object_name, len (self.quads)*24)) for quad in self.quads: line = "" for i in range (4): line += "%6.3f, %6.3f, %6.3f," % tuple (self.normals[quad[i+4]]) line += "%6.3f, %6.3f, %6.3f,\n" % tuple (self.vertices[quad[i]]) result.append (line) result.append("};\n") # ................................................................... quad strips if self.strips: result.append("static int %sNumQuadStrips = %d;\n" % (self.object_name, len (self.strips))) line = "static int %sQuadStripIndices[%d] = { " % (self.object_name, len (self.strips)+1) index = 0 for strip in self.strips: line += "%d, " % (index,) index += len (strip) * 12 + 12 line += "%d" % (index,) result.append(line + " };\n") result.append("static float %sInterleavedQuadStrips[%d] = {" % (self.object_name, index)) for strip in self.strips: line = "" line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[strip[0][4]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.vertices[strip[0][0]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[strip[0][5]]) line += "%6.3f, %6.3f, %6.3f," % tuple (self.vertices[strip[0][1]]) result.append(line) for quad in strip: line = "" line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[quad[7]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.vertices[quad[3]]) result.append (line) line = "" line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[quad[6]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.vertices[quad[2]]) result.append (line) result.append("};\n") # ................................................................... fans if self.fans: result.append("static int %sNumTriangleFans = %d;\n" % (self.object_name, len (self.fans))) line = "static int %sTriangleFanIndices[%d] = { " % (self.object_name, len (self.fans)+1) index = 0 for fan in self.fans: line += "%d, " % (index,) index += len (fan) * 6 + 12 line += "%d" % (index,) result.append(line + " };\n") result.append("static float %sInterleavedTriangleFans[%d] = {" % (self.object_name, index)) for fan in self.fans: line = "" line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[fan[0][0+3]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.vertices[fan[0][0]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[fan[0][1+3]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.vertices[fan[0][1]]) result.append(line) for triangle in fan: line = "" line += "%6.3f, %6.3f, %6.3f, " % tuple (self.normals[triangle[2+3]]) line += "%6.3f, %6.3f, %6.3f, " % tuple (self.vertices[triangle[2]]) result.append (line) result.append("};\n") result.append ("#endif // __obj_%s" % (self.object_name,)) # ................................................................... save header file file_path = self.dir_path + self.object_name + ".h" try: file = open (file_path, "w") except: print "[*** Error ***] unable to open file for writing ", file_path return 0 file.write("\n".join(result)) file.close() print "\noutput written to", file_path file_path = "/Users/kodi/Projects/kiki/src/items/" + self.object_name + ".h" try: file = open (file_path, "w") except: print "[*** Error ***] unable to open file for writing ", file_path return 0 file.write("\n".join(result)) file.close() print "\noutput written to", file_path #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/body.obj", "body") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/test.obj", "test") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/gear.obj", "gear") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/valve.obj", "valve") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/cylinder.obj", "cylinder") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/wire.obj", "wire") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/motor.obj", "motor") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/generator.obj", "generator") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/kolben.obj", "kolben") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/tire.obj", "tire") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/cross_tire.obj", "cross_tire") #ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/wirestone.obj", "wirestone") ObjFileConverter("/Users/kodi/Projects/kiki/misc/objects/mutant.obj", "mutant") kiki/py/runkiki0000666000000000000000000000017607644705766012567 0ustar rootroot#!/bin/sh #PYTHONHOME=`pwd`/ PYTHONPATH=${PYTHONHOME}:/usr/lib/python2.2/:/usr/lib/python2.2/lib-dynload/ ../linux/kiki kiki/py/setup.py0000666000000000000000000001617510320553763012667 0ustar rootroot if Controller.isDebugVersion(): print "[setup.py]" # ................................................................................................................. # KEY SETUP MENU # ................................................................................................................. def quickKeySetup (item_index = 0, escapeAction=0): menu = KikiMenu (item_index) action_names = ["$no_itemkeyboard setup", "$no_item", "move forward", "move backward", "turn left", "turn right", "$no_item", "jump", "push", "shoot", "$no_item", "change view", "look up", "look down"] player = Controller.player def changeKey (action_index): tmp_menu = KikiMenu (action_index) for item_index in range (len (action_names)): action_name = action_names[item_index] if action_name.find ("$no_item") >= 0: tmp_menu.addItem (Controller.getLocalizedString (action_name)) else: action_key = "" if action_index <> item_index: action_key = player.getKeyForAction (action_name) tmp_menu.addItem (Controller.getLocalizedString (action_name) + ": |" + action_key) tmp_menu.addItem ("$no_item") tmp_menu.addItem ("$no_item$scale(0.75)" + Controller.getLocalizedString ("press the new key")) hideTmpMenu = lambda m=tmp_menu: Controller.timer_event.addAction (m.getActionWithName("delete")) keyset_event = player.getEventWithName ("keyset") keyset_event.removeAllActions() keyset_event.addAction (once (lambda i=action_index, t=hideTmpMenu, a=escapeAction: \ (t() or 1) and quickKeySetup (i, a))) player.recordKeyForAction (action_names[action_index]) undefined_keys = false for action_index in range (len (action_names)): action_name = action_names[action_index] if action_name.find ("$no_item") >= 0: menu.addItem (Controller.getLocalizedString (action_name)) else: action_key = player.getKeyForAction (action_name) if not action_key: undefined_keys = true menu.addItem (Controller.getLocalizedString (action_name) + ": |" + action_key, once (lambda i=action_index: changeKey(i))) menu.addItem ("$no_item") if undefined_keys: menu.addItem ("$no_item$scale(0.75)" + Controller.getLocalizedString("action without key") + "!") menu.setEscapeActive (false) else: if escapeAction: menu.addItem ("$scale(0.75)" + Controller.getLocalizedString("back to setup"), once (escapeAction)) else: menu.addItem ("$scale(0.75)" + Controller.getLocalizedString("back to setup"), once (quickSetup)) if escapeAction: menu.getEventWithName ("hide").addAction (once (escapeAction)) # ................................................................................................................. # SETUP MENU # ................................................................................................................. def quickSetup (itemIndex = 0, escapeAction=0): menu = KikiMenu (itemIndex) def setupOption (option): if callable (option): option_func = option else: if option == "language": itemIndex = 2 langIndex = lang_list.index(Controller.language) + 1 if langIndex >= len(lang_list): langIndex = 0 option_func = lambda: config.apply ("game", "language", lang_list[langIndex]) elif option == "mute": itemIndex = 3 option_func = lambda: config.apply ("sound", "mute", not Controller.sound.isMute()) elif option == "volume": itemIndex = 4 volume = sound.getSoundVolume() / (128/9) + 1 if volume > 10: volume = 1 option_func = lambda: config.apply ("sound", "volume", volume) elif option == "fullscreen": itemIndex = 5 option_func = lambda: config.apply ("display", "fullscreen", not Controller.getFullscreen()) elif option == "fov": itemIndex = 6 fov = int (Controller.world.getProjection().getFov()) + 10 if fov > 120: fov = 60 option_func = lambda: config.apply ("display", "fov", fov) elif option == "gamma": itemIndex = 7 gamma = Controller.getGamma() + 1 if gamma > 10: gamma = 0 option_func = lambda: config.apply ("display", "gamma", gamma) elif option == "speed": itemIndex = 8 speed = Controller.getSpeed() + 1 if speed > 10: speed = 1 option_func = lambda: config.apply ("game", "speed", speed) menu_func = lambda i=itemIndex: quickSetup (i, escapeAction) return once (lambda f=option_func, m=menu_func: (f() or true) and m()) menu.addItem ("$no_item" + Controller.getLocalizedString ("setup")) menu.addItem ("$no_item") menu.addItem (Controller.getLocalizedString ("language") + ": |" + Controller.language, setupOption ("language"), True) menu.addItem (Controller.getLocalizedString ("sound") + ": |" + (sound.isMute() and Controller.getLocalizedString ("off") or Controller.getLocalizedString ("on")), setupOption ("mute"), True) menu.addItem (Controller.getLocalizedString ("volume") + ": |%d" % (int (sound.getSoundVolume()/(128/9)),), setupOption ("volume"), True) menu.addItem (Controller.getLocalizedString ("fullscreen") + ": |" + (Controller.getFullscreen() and Controller.getLocalizedString ("on") or Controller.getLocalizedString ("off")), setupOption ("fullscreen"), True) menu.addItem (Controller.getLocalizedString ("fov") + ": |%d" % (int (Controller.world.getProjection().getFov()),), setupOption ("fov"), True) menu.addItem ("gamma: |%d" % (int (Controller.getGamma()),), setupOption ("gamma"), True) menu.addItem (Controller.getLocalizedString ("speed") + ": |%d" % (Controller.getSpeed(),), setupOption ("speed"), True) if escapeAction: menu.getEventWithName ("hide").addAction (once (escapeAction)) saveAction = once (lambda: (config.save() or 1) and escapeAction()) else: saveAction = once (config.save) menu.addItem ("$no_item") menu.addItem (Controller.getLocalizedString ("keyboard setup"), once (lambda: quickKeySetup (0, lambda a=escapeAction: quickSetup (0, a)))) menu.addItem (Controller.getLocalizedString ("save"), saveAction) kiki/py/world.py0000666000000000000000000003461510326711066012653 0ustar rootroot if Controller.isDebugVersion(): print "[world.py]" import random import types execfile(kikipy_path + "colors.py") execfile(kikipy_path + "action.py") execfile(kikipy_path + "lang.py") # ................................................................................................................. # KikiWorld Extensions # ................................................................................................................. # ................................................................................................................. def toggle (self, objectName): """toggles object with name objectName""" Controller.startTimedAction(self.getObjectWithName(objectName).getActionWithName("toggle")) KikiWorld.toggle = toggle del toggle # ................................................................................................................. def activate (self, objectName): """activates object with name objectName""" object = self.getObjectWithName(objectName) if object.getClassName() == "KikiSwitch": kikiObjectToSwitch(object).setActive(1) elif object.getClassName() == "KikiGate": kikiObjectToGate(object).setActive(1) KikiWorld.activate = activate del activate # ................................................................................................................. def decenter (self, *args): s = self.getSize() if len(args) == 3: x, y, z = args[0], args[1], args[2] elif len(args) == 1: x, y, z = args[0] return KikiPos(x+s.x/2, y+s.y/2, z+s.z/2) KikiWorld.decenter = decenter del decenter # ................................................................................................................. def addObjectLine (self, object, start, end): """adds a line of objects of type to the world. start and end should be 3-tuples or KikiPos objects""" if isinstance (start, KikiPos): start = (start.x, start.y, start.z) sx, sy, sz = start if isinstance (end, KikiPos): end = (end.x, end.y, end.z) ex, ey, ez = end diff = map (lambda a,b: a-b, end, start) maxdiff = max(map (abs, diff)) deltas = map (lambda a, d = float (maxdiff): a/d, diff) for i in range (maxdiff): pos = apply (KikiPos, (map (lambda a, b: int(a+i*b), start, deltas))) if self.isUnoccupiedPos (pos): if type(object) == types.StringType: self.addObjectAtPos (eval(object), pos) else: self.addObjectAtPos (object(), pos) KikiWorld.addObjectLine = addObjectLine del addObjectLine # ................................................................................................................. def addObjectPoly (self, object, points, close=1): """adds a polygon of objects of type to the world. points should be 3-tuples or KikiPos objects""" if close: points.append (points[0]) for index in range(1, len(points)): self.addObjectLine (object, points[index-1], points[index]) KikiWorld.addObjectPoly = addObjectPoly del addObjectPoly # ................................................................................................................. def addObjectRandom (self, object, number): """adds number objects of type at random positions to the world""" for i in range (number): if type (object) == types.StringType: self.setObjectRandom (eval(object)) else: self.setObjectRandom (object()) KikiWorld.addObjectRandom = addObjectRandom del addObjectRandom # ................................................................................................................. def setObjectRandom (self, object): """adds number objects of type at random positions to the world""" size = self.getSize() object_set = 0 while not object_set: # hack alert! random_pos = KikiPos (random.randrange (size.x), \ random.randrange (size.y), \ random.randrange (size.z)) if not object.isSpaceEgoistic() or self.isUnoccupiedPos (random_pos): self.addObjectAtPos (object, random_pos) object_set = 1 KikiWorld.setObjectRandom = setObjectRandom del setObjectRandom # ................................................................................................................. # KikiPyWorld # ................................................................................................................. class KikiPyWorld (KikiPyActionObject): """class for creating worlds from dictionaries""" # ................................................................ init def __init__ (self): """initializes a KikiPyWorld object""" KikiPyActionObject.__init__(self) self.preview = false # ................................................................ world creation def create (self, world_dict = {}): """creates the world from a level name or a dictionary""" if world_dict: if type (world_dict) == types.StringType: world.level_index = level_list.index (world_dict) world.level_name = world_dict self.dict = level_dict[world_dict] else: self.dict = world_dict # ............................................................ appearance x, y, z = self.dict["size"] world.setSize (x, y, z) if "scheme" in self.dict: applyColorScheme (eval(self.dict["scheme"])) else: applyColorScheme (default_scheme) if "border" in self.dict: border = self.dict["border"] else: border = 1 world.setDisplayBorder (border) # ............................................................ intro text if "intro" in self.dict: if not self.preview: intro_text = KikiScreenText () intro_text.addText (self.dict["intro"]) intro_text.show () world.setName (self.dict["intro"]) else: world.setName ("noname") if self.preview: world.getProjection().setViewport (0.0, 0.4, 1.0, 0.6) else: world.getProjection().setViewport (0.0, 0.0, 1.0, 1.0) # ............................................................ escape escape_event = Controller.getEventWithName ("escape") escape_event.removeAllActions() escape_event.addAction (continuous (self.escape, "escape")) # ............................................................ exits if "exits" in self.dict: exit_id = 0 for entry in self.dict["exits"]: exit_gate = KikiGate (entry["active"]) if "name" in entry: name = entry["name"] else: name = "exit "+str(exit_id) exit_gate.setName(name) exit_action = once (self, "exit " + str(exit_id)) delay_action = once (lambda a = exit_action: Controller.timer_event.addAction (a)) exit_gate.getEventWithName ("enter").addAction (delay_action) if "position" in entry: pos = world.decenter (entry["position"]) elif "coordinates" in entry: pos = apply (KikiPos, entry["coordinates"]) world.addObjectAtPos (exit_gate, pos) exit_id += 1 # ............................................................ creation if "create" in self.dict: if callable(self.dict["create"]): self.dict["create"]() else: exec self.dict["create"] in globals() # ............................................................ player player = Controller.player player_dict = self.dict["player"] if "orientation" in player_dict: player.setOrientation (player_dict["orientation"]) else: player.setOrientation (roty90) if "position" in player_dict: world.addObjectAtPos (player, world.decenter(player_dict["position"])) elif "coordinates" in player_dict: pos = player_dict["coordinates"] world.addObjectAtPos (player, KikiPos(pos[0], pos[1], pos[2])) if "nostatus" in player_dict: if player_dict["nostatus"] or self.preview: Controller.player_status.hide() else: Controller.player_status.show() else: if self.preview: Controller.player_status.hide() else: Controller.player_status.show() world.getProjection().setPosition (KVector()) Controller.player.getStatus().setMinMoves (highscore.levelParMoves (world.level_name)) Controller.player.getStatus().setMoves (0) # ............................................................ init world.init() # tell the world that we are finished # ................................................................ restart level def restart (self): """restores the player status and restarts the current level""" Controller.player.getStatus().setMoves (0) Controller.player.reborn() self.create() # ................................................................ finish level def finish (self): """saves the current level status in highscore file""" highscore.levelFinished (world.level_name, Controller.player.getStatus().getMoves()) # ................................................................ player reset def resetPlayer (self): """reset the player to it's original position and orientation""" player_dict = self.dict["player"] player = Controller.getPlayer() if "reset orientation" in player_dict: player.setOrientation (player_dict["reset orientation"]) elif "orientation" in player_dict: player.setOrientation (player_dict["orientation"]) else: player.setOrientation (rot0) if "reset position" in player_dict: world.moveObjectToPos (player, world.decenter (player_dict["reset position"])) else: world.moveObjectToPos (player, world.decenter (player_dict["position"])) # ................................................................ actions def performAction (self, name, time): """action callback. used to exit current world""" if name.find ("exit") == 0: self.finish() Controller.player.getStatus().setMoves (0) if "world" in self.dict["exits"][int(name[5:])]: w = self.dict["exits"][int(name[5:])]["world"] if isinstance (w, KikiPyWorld): w.create() elif callable (w): w() else: exec "KikiPyWorld().create(" + world + ")" else: KikiPyWorld().create (level_list[world.level_index+1]) # ................................................................ help def help (self, index = 0): """displays help messages""" text_list = self.dict["help"] more_text = index < len (text_list) - 1 less_text = index > 0 list = text_list[index].split("$key(") for i in range (1, len(list)): close = list[i].find(")") list[i] = Controller.player.getKeyForAction (list[i][:close]) + list[i][close+1:] list.append ("\n\n$scale(0.5)(%d/%d)" % (index+1, len (text_list))) help_text = KikiPageText ("".join(list), more_text, less_text) if more_text: help_text.getEventWithName ("next").addAction (once (lambda i=index+1: self.help (i))) if less_text: help_text.getEventWithName ("previous").addAction (once (lambda i=index-1: self.help (i))) # ................................................................ def resetProjection(self): world.getProjection().setViewport (0.0, 0.0, 1.0, 1.0) # ................................................................ escape key def escape (self): """handles an ESC key event""" self.resetProjection() if "escape" in self.dict: if callable(self.dict["escape"]): self.dict["escape"]() else: exec self.dict["escape"] in globals() return menu = KikiMenu() menu.getEventWithName ("hide").addAction (once(self.resetProjection)) if Controller.isDebugVersion (): menu.addItem (Controller.getLocalizedString ("next level"), once (lambda w=self: w.performAction("exit 0",0))) if "help" in self.dict: menu.addItem (Controller.getLocalizedString ("help"), once (self.help)) menu.addItem (Controller.getLocalizedString ("restart"), once (self.restart)) esc_menu_action = once (self.escape) console.out("level_index %d" % world.level_index) menu.addItem (Controller.getLocalizedString ("load level"), once (lambda i=world.level_index,a=esc_menu_action: levelSelection(i, a))) menu.addItem (Controller.getLocalizedString ("setup"), once (quickSetup)) menu.addItem (Controller.getLocalizedString ("about"), once (display_about)) menu.addItem (Controller.getLocalizedString ("quit"), once (Controller.quit)) # ................................................................................................................. execfile (kikipy_path + "config.py") execfile (kikipy_path + "setup.py") execfile (kikipy_path + "levels.py") execfile (kikipy_path + "levelselection.py") execfile (kikipy_path + "highscore.py") execfile (kikipy_path + "intro.py") kiki/sound/0000777000000000000000000000000010362753237011647 5ustar rootrootkiki/sound/atom_digest.wav0000666000000000000000000001145607644705766014711 0ustar rootrootRIFF&WAVEfmt ++dataCrzrjw=:ƈJrrdv30}ʎRrr\t)&tŽZsrUr*rarrNs2rhr|rFry:sprur@yxڎBsxsnr8 yҎIr~rgs2׀*zˎPrs`w3̀5|ÎXsrX€=@~^rsRHJfrvPRTmrx~Z\^trqdfh|tlnps|vxz}|{xxwvrp~vnljg~tdb_]vt[XV`ttTNLfstNDBwntysFĀ;ƄBsutrt@΀2όJt{tlt:(xɌPttet4&tŒWts^t.,t^ttXt'4tdstRv#܋:tlt|tK~-ҊBtrtvtDʀ6ȈHtytnt>@Otth|HJVttbQT\tt\Z]dtzbdfjt~lnpruxtvy{||~~zxvtx|romrtvhfdxtp`^\ztjWUWttdNL^uu^FD|dtuX~=ĀFile created by GoldWave. GoldWave copyright (C) Chris Craigkiki/sound/bomb_explode.wav0000666000000000000000000005067607644705770015053 0ustar rootrootRIFFQWAVEfmt >}dataDQ]ayMN94-ye`kJ1 }q6;rL%I nnfR>$W}i#ZI&M@pMVi'2.f[o&;m8#Jjr] <}+4gv9 ic `gf{|?| /16VGjTZvtRyfrZ}C6;vHTW)7q[D1/;9 "r/JK\~.=m^UrG|oyip[wCqe?Nk70Yzgx }wJ'h2]l2V @OfZW~TR -Y d^NPO `$<@ {6V[ ' |@" @ P K"!g -5&8"O V4&"-K. H;ήݒy;2= \XLetDh 7"Y( J )!&"NA>blb*# #Z k 7 M~&# 1E yoD T() - (MK z 5 L++ - 0%3ݭAӬ& LļcaEc(&09<E^3BIe5%:\HDSB$9DS:4KV7*# <  J+|n WE\2x#($/!%=8!l}(q;H #w-__x7,*3  w" 9tīƙȀף&7?L򋜉͠y>ѐ ߿H @)y$'&$R%%o#$$"$)'5?.>$P+5}MB4:nLOmHV!JMVenq|yqOxj}~yuIylTj8uvmp}tsv|jmnBW.EC@i1Zq a 4aZ l}Ӝ۴ɮFc6ϐr* Ѩihڒ¹xǯh^c|IHh~īI8ǧx=ًۚLj"Nҷf .2&{Lɹσ Pśr90ڈQ|Q a8S(#i'A3@1+i7@N=C MXbblj9TGOyD1*;c.).):28\007>F5ga F$l t%Ѭѭ^97ë¤NDA˲6IaFV_5yE9VPGmE=¦&Х#DC&?] Z @`2Q+u/$'/,)$"F% 7PN5B23989545 ?KyMXJX iT\nttqkk#dB\]g3YV$E=\4*+1.= JE{͡8L  )3FN!HdqycImc71% wm; 1\~©ӽ~e<]tŚiޱTNsִʬ}Tќ Hd/3Cw@tP% k@Pz!{`(Y$ \L$M=AC=%K=\]VUOLgOhbdMp{?m|[Wb@tum\XO\UZ`\MLCEO_DGM\Yi/lzeTNsWGeXMd?bX]Ygbcf7qtt~~ wbpk;^j2agROK?5;O<;BGHRhP2= /$0U+: GRQR0+`'Q0]T=qkNC   }A  O !QT=&p#0X"&eb A?$vD=]oKߴӓq8LUs#$Z{吧+?ß$>RV·BLXmv/8%04}R= k+\!.u"4 9 l  Y p~qܖ׷FlB"}Cػ7PbSv }u0*r$*% 9 g "; / 8K+" $"z7@9 ;x80tz|&a-nKXʿTbN q3%]ySj+,l̺X5`%JBaƓ)ʏУkҨpۧ}yqF~OB} }(jW f ):$+\"- -U)/5J70=6FR9KPPEENG@& XA?\9nѮn{ki6~ zNy9z*;?!!!*8+7X G %-b %aF{۞҂-7Յߏ>{[܊͡ӎ6 `1 M&t cp:qEHI 9m'x  I COqM-+"("Bv>4KEB*Mw'3 "t9 g\ GB@l ws]/ P`"8  w-b~ (inO c O b %#^"-u$d  z $'0/,#-71-_3;9S54898642<8D.-5`6/,,R0M/,.*Y): "T(u[bI)[PBf]Aߛ:F޾I@@kBpAnBBFjLKIxCE\D~EIOMMUIO9\*aSS/aabkfipmp}!yBqyi{Tz^stTrk$liwejgedmNilplrcttjuqux|}xtpimbT[c`_,SZ[TTSTVOGA=?;6u<9.=)5333(#D&m%$Hq1  ! 1qt)Rڢ:boɘl TkTrLnUHՒ:t?iXYݲO!xhلGӔ"z-y5@V  - 2E#["$&`&Q(")s &,&)"/~/02.'"(D($y-4:C6-;7Z.^"vq" O n Q QW!9:we6WUjw"&}%* "4!o%((+-(3 J$G/U.)I)I$0 ""_ z k ! v-#rqE( ܹذ0J:Z͗Բ1"RRȻNJǓSDKZ;``OUH7ïTɪاǙԟcxsŠcMUȖaQY\r&ݏebxb񓘊jt1 f䎗~'.El!1zeP¢&ʨè !x||w’l~0ٯmކjRXJ I , Y vi *_`.4h) pW$šwdg*K8֬-C]Ӂϔw؋MK?A!e3E^ $3߯k$]2b&ɲ̰˃ƭc̃ӹ@ږٮIau T k2 m iH :D?v /E)**).:mAC@::@CGSHB=zEG=:87@:G@N?}CABNCOBYFBFDaDGD{EjEBCLCFFSGE@P?EA|??47LN:P'i߀Uyp܋Iڜن}wݗg%P)k0 sGq{y= 8$(&P$Z%X-/i/(*'3,1$.70)*/)&('$7!l!3 < )~=!, e xaC *]\ "C]n<#Oc H-s 3F^}\Y7\ P u"?"X&$$^*,+'--\+-2@2126s3p/3y7%3V7B:=i??2BAHFJnD_DH#JGsG"DIDJIzHI.H]HMMILL%KwHnH3HGhCCC>.A\?=<9!78v98;==9:{?%>@@U@[@}@f9j6I82.1.09)$&J#z#T+ R [ p O NUUq+=!V'"3 7  qp )gI } #t%$&j&f&b'(X&&%!~"$&$C!"!Q1h<23b 0}>MeGr=1c"K O,$ p"ej!uN[! !c#$ 8r!"@OZ"{! 6} # ~ ? "u+'b*QToujG ۍ,j:0ҳ^ѠkJ>vPd )Խ؀ڧr,ւ#ԡqKQ0l"Ct ;'[@4=>A]7[* w>"~bi(sBxpLVRUB7ssy*W6@|I"}T#+gXyW<Vpv&.zeo"=:z|)6!7O0*+gg *  y  J $` =t jWY m v!^ 7C<y jnA  y &  . 3  zy`D|   T    EfOlke7E2 81W+Jlx2lJU"Dxu Qs~U=`Kdq 9 ` 5 8 H p bf q }  E  / }  b   X RB  `  L   ,  rTTMpZidgBAof:%;s ae m x~0J \R^!$#%#"%S%.$&(*t,,*R,.//6/0u.G.l1O/-4012211 3/00?10@122100z-,t,,4-'>(^++))&n!%#<#"^""E" #%,% NSYB4 A []* ) -^L[:!&zd75`zv2K8 ^ 3   5 T F  . 9 f k ` S 7( }  o C , j K &[D;"\V1m%e#b< ?wsWgzHFL)0"')Rv zFn>aHY* xTF l  ! ?  ; Y  `0  xr J  . l 2 ] -  SUm!cqKop{]Lw&x $ZQ~sNAb5 aclDxW#V5H6H. vjUm]-mZ'PH!r{.#PO5$OVppoeV0@ @sWFAD+x!/F/m,OjM2!s{g%U"4nU +kP|:C^6 fw (tb8 Hp]XsIfEXEiZob8BX[|'PlQ5d'CH   %$  <   d ,  J+  j 6 u]o'Rn!JNIXz[e Z:Vj9;\&C4XFQ,L|  { n  U/Nr KBJXI @M%rb tE\^b$CHNkOw}g2R!.b"p .k1$ Ui`Q'T nG_?{KKpCW_\R?.$~~%C]5NP?*qcq i Y -  < V ,   L  ] &   h ]  \2 m[7*7g'l .  K68(e^vo4W)0vFt q j"  Fu }u   } 5 r ? { ` - 9 H  zo{ REHwd)_ b^k[9x*q*zg+Yf[ZJUbY`Qp"v#G(n~GP_xo65C= eqI'0 [pC"6))lco5[^Bm33]Jm@S#c@ ~x\LP5pXy<KnGc buS|L%Cg +_O<YXf*s-jnLCb/;Wo03H?3I~=`GU05K=Fgxdj +@UH75<p;QLy[O\'Ve|_S*uV6jta }KKD.j u P(% wBCtta_\!2 )o' V n = r 9 m u 6  } ^ 6   ) P < s L |  p 8 V K 4*M& R%= _q\zz&A)nw62Te'%mq,JY:=ZBxfZ_$W*nAF_ByZ!)fdqmb#@4yB L+AC

Woq hM [aY o]cW1)Ti(p_C)">1 Nyoq "7mZV9 /mm8(hVd2?<1vY XMw:mEa6 *Q`f.Q S,xl &. O wFB6r70Q\67`67'.~y0:WOHPQ4Pp \xq3\}UM 4<NMA_ P\fH;k:FOtMNkbgl-JO.39y,xk<r''rDcB0 LA2-o2in&"+w+;)bSe7y"KHQWJ'S2`zW=g-sp!eI6]g7fZ ].<;8["uO O.[% Qvj.?|o?7#6S2kMYAlUK2S u*N_NN Trsu(}qJ;k=sJN[J1_bU-N3 F/L \R!4AH;)!9W[Zp4jaz@Cf-{mHIVx<`# nVg6G]-ogpL}LFzn[|@fo|$xBFEJ)0CMTbdEw"o >UGMx,]o \E6rrXeyc{bfjj`}`Mm7ciz[dkCq D&[5Jj`gB>>\PF&;@_z8Bk'g># (9Nz; ]Dd5P2rB^\$_t?emlxYrVRR>LQeg|%0E+}H1)rcR@M`{Mi[_l~le>eQ $>2X*CI{g;JuB`%|W[] &!GID6!pA~4WL"aSb0E. *KC o{E[Rfl^+jndSjzzf}E-_Umh{~<6^yk,L')/8%BN>g%C=zvx]5\XGSzf9Ppguy5@7,=k|9;^L*%Zzn "`Al3/M75:?\eOs+lF)]p- ~gES|0VE{dp.LBq:hj4?tjD?KPV.\`eim`q1tvyz{||3||zwYsnha]ZpQ1H>3).$TLM+m\ ß˝ʛ (1䎐K-")8s|J-}҄G˅k|EC86~mГQt囍At|KD`\ȕ,кO|٫ހr9YW A!~%).:26:}>BFJMQTW;[^`c8fh&kUm,oqr@tuvwxyyOzzz[zy|yxx5wEvusUrpnm=khfdb__\YNU8QLH De?:50+&!3 `}ۨm{̂Ǿq;>Z桓4,擎yݍ4*ÆO5ԈuS>@xzEޚ՜"Yϧ/H>繄KŖȱwνUrۛ9:eP.2 ,_]z ($&),/2 57:=v@B8EGWJLMOS)VY[?^`5cegikmDopq:sFt>uvv$wwwwwowwyvuutrq=pnlmkjDhAfQda_]%[XUSgPjMqJkGJDWA=:S73O0, )%!B),  _k&&3.VtJQg.?ȹط޵,b)/ä3- x.ؘ| CC-ˋ`NJcG* !/ElҊl܋A:ōU z%ʔ'E{i.>ة,V¶ 1B,euVߧvhq#* m@#4&)|,/{2S5>8;=k@ECEHJnMO@RmTVXZ\^w`1bce1ghiRkolmnoMp@qqwrr[sssstttssses%srerqvqqposonm+m^lkjih hfed/cJba_^,][TZXSW-VdTRQ:OMLCJHF3ECtA?=;r9)8531;/h-H+U)'N%# !q s1 { !6]".Zn>cסfӌyϨgeǍ5"//O''.cҤ wΗw*$1\xZ@'-OĎ3Z, U<795[\]^_&``abacddUeff2ggmhhJii jjjjNkkkkkkllkkkkkHkjj|jjiOih`hg'gffNeddWcba``_] ]\["ZXWVU;TSQPVOMLKIWHFyE DNB|@D?>?<:a97~6 531K0F.,?+)"(j&$"!@`)Pi } 4 hZ8rS8i(H]7ݹ/ۯ٤GռԢҳЮ?̩ʁ.ĹZg dzڰȯ-kbǪũ$Tf>}V/vwU뚕I♍NTɗnRF5,$$&-6FZnϗF}.m JQfԜ,&9ȡ5j\fk.yf $=I 9wڹAw2u:ʉ`Tuf"_l-A6&b  s Xn|7N!Z#$w&f(*6+,.|0134689:?@,BCDFGH0JWK*LFM#Ndcccb.ba a``"_z^]\\[ZeYXWVUTS[RLQvPOMLKIHG%FDmCA@?]=;:8 7504F20 /-x+)(/&&$A#!FB" K &`m+W~}IT2HLNރr//ӥc-aSE:޼?R²fЬeƦ;Zy֠eɟAޞw2ΜΜ!PBB3|£qomI5)^AXt#GL#ܿWüŌ< ϻ8֨G [hP3H7fh] #pd "#%&'(J*^+c,i-;/012 4L526&7F89:;q=j>A?*@ZA=B C#DRE?F>G1HIJJuKsLM9NNPPtQRRS=TT5UUVWWeXXLYYTZZ[y[[G\\\E]]]:^w^^_3_n____`(`=`\`l`x`````z`j`Y`F`+``___u_6_^^^>^]]a]]\ \[k[-[ZDZYmYXZXW-WwVUlUTTzSSRR:QQPO~ON?NMHMLKoKJ[JIkIHLHGFTFE$ElDC8CBAAx@?x?>==<;3;:98%8x76625464l3]210M0i/.-*-g,m+u*)(D('&6&|%b$#"! !)7y5ZZ ]  / Vm/J6eBdG"5rvLY@Q5ߝގtܭ+ڥ(zGՈCKDngRʰHɡȩǤ'Yň,ãN¤߿ZvB9 f}𷙷Ͷ%!O̳bDz6ɱ`߰!ǯTdU񬡬AVުDH訪|L ק~V Ҧk.ѥiSG1 ߤФ̤Ťä̤դ#8K]mzΥ$E\Ҧ<[n $Dv̨LթC|ªZ!d \\ЮQ ?yܰ:&nG̳[ٴ1\Pݶ)n!VS7yݻ|м*ŽϾQʿCFtJŜN;wVȱ0eɮ| ̙l/΂=Kо{Ux|ԃժ)l3غ_٠ ځڳڟmܣ4sݩ]/; Q3M%NC;P)hi(@96z O,N0:8F+E j8 O B , l " kl)h`"uP,$76|2` Yd a J!!"""## $q$$%%&H&&&k''((W))*k**$+++H,,--D..N0012o3C4`5 66l7h8"97::;'<<=>??R@TA/BBNCCiDEE{FFrGGH7II>b=<<;:98S877544s3210//.s-,+*)((M'%9%6$l#"!F ZI3lQush ; i Js(f37,_/#@-O(U[K!aO,nӿR^È1ĨLůPhN9ͥ^ϟ A<ӡj#բ/$~?ܼ\߭4l \"Og| L /OY _/p\Vxur i s 3 FlAXuJG !!^""#$f%%&]''v(C))*5++F,d--j. ???,@@@CAA7BBBGCCCFDDEOEEE2FFFGUGtGG H^HHHH%IOIIII1J\JJJJK9KRKkKKKKKKKKKKKKKKKoKKK%K KJJJZJJIIIAIHHMH HGvGGF[FEE$>=<@<;;F:9H9877E655`4321(1m0//- -N,+**)=(&'[&%$=$i# "  cAx3 %Wc+ \ f ^ "G'on )`p+\kaA0B_D9B^Ush}۔aڡ٘,ccԻFWi*ϸggp˶cʓuldžV őN\c0{u5ؾ~Aݽ\{'ûd⺚qKʹhJ,ϸ{cL@+  $6NcvǸ;j 9mJɻ s¼RʽCe/Nº bĊ Ņ?Dbȶʮ ̃,͗/>JъҲeԋ5֯t,رaڲ<ݽ3HZ+JOx;/ <!7xU=RAaZ:Q+B!+o#g&s>lH! ' . ^ S Vsz0|$> +rKY _G;owaO 0 !S!!!)"P""2#z###6$h$$$.%}%%$&o&&&@'''"([((()A))),****6+~++,H,},,,-D--.>.]... /A///030f000+11112E2s222;3T3w3334D4m444+5r55556?6h66667E7q777%8<8Y88889:9[99999:Y:::::;";F;p;;;;;<4F>b>>>>>>>>?!?3?D?^?r?????????@@&@2@D@O@Z@d@t@@@@@@@@@@@@@@@@@@@@AAAA A A A A A A AAAAA@@@@@@@@@@@@@@@@@@{@o@c@R@A@7@)@@@@???????z?_?M?;?*???>>>>>>l>L>5>&>>===={=h=W=6= =<<<<m>>f=D<:8{630-y*'7#6*i# H~NvAE}Ω'şó./™[Çgדq3 +Xd!$ &g(Y*T,9./13345?7j8M9:)<<<;963)//*$) X3x*4O]ד/ҩ΋I1{~óåòw{$ƻǙȏɖʴ%΅]z.ؚsXKH;Cl"0 P!#7&(*,.^02u34B6S7[8-99}::2;R;L;!;:Z:99875<41G/P,&)%6"WL   iu!.[qr˯RXǞƝgcŖŕ]`ȍn6Ԑٲs2FZt a7{ B08 b"#r%&U()*?,-./0123x49556/77,888.9a99999q9D998\87^7616543,3:2L1L0%/.,+|*B)(&k% $"K!]T-\ [ +[[Xl nB +Wz[RЏscXi˓HɽOǫǤdzdȾ7ɏFaͤCВZ,Ա՞ևל؟ٓښ۱ܲJm4aVHZo$_h R )=~HEZni }!i"]#f$+%!&&'(j)7* ++{,1--. //S00Y11H22^33_44!555646X6s6~6~6q6[676655!54X43d32X21)10//G.k-,+*))(' &$#"!d >,%l  ' ljs ,?M`i?݄{"֕oGAaувJε"ͥ>˒Y./^˖F̰"ͻX϶ϏmP[UeՃ"lQ[L=p2o222222233322222w2M2!211z13100K0//7/..?-,+*)('&%$`#"!R.Dv3I g a`udQq~MJ ~)b42*IU؃ז cԣzғ&t&Ϫb9 μίΩίθ3`Ϙ%qюWXwՙ(ֹfזyڶڅnݶ^F*u}}YA3Sjy{ :.V : [nR 9X0} J!""Z# $$4%%r&'' (( )))**N++,l,,-V----2.W....../ /(/0/0/,/#///....n.C..--b-+-,,T,++I+**&*)g)(v('u' 'o&%[%$c$#1#f"!D! ,@kY)ABz > z , xuYX 2dw!l?uMUN&L+~:j~ybx k \6b;hx^}a6< !_!!"v"""<#v###$)$>$Q$m$x$z${$u$g$Z$G$+$###~#C#""q"J" "!!!}!H!! { J ) tJc%S 8|&]UhDn2V\F2l=: ^ - k  / k 9n5\(Sj%,FYd7WEf>HTdSO MY{ n5VMK["V2V+S3{XdN<" xfQ?( {i_UG7*!߾ߵ߳߱ߪߤߤߣߡߞߞߞߟߟߟߢߤߧ߫߯߳߹߾!-8GUbn~,EUn*Gj>n #Db8` 8^'WqCa+I]S}+Z~%:f 9m/_3ax0Z.U|:f =d'P-VGmNz@ZLs+Or+X#fCe 4h 8x%J~,^Y;i3_ b F D * k  H Y?k Du)O3P~*h<x"7[0Ns9]l 4Un{ 4CNXp*47=FLPT\]ahkkmpsqqrqomkiea]XSMG@:2(!yn^L>*tbP<udO) eE-vH._A'\/]4nJd2Z6R2 x I  n 6  B  2 S L=~L(]RCpR.`=SKY:b3e8ljC u`9WeHgP xf2{R7ydS4 ,5Mjx%=I_l+:Ph}?Ni%GYv/Ci{ ."}n_PC91( yfYMF?7*"{qic]YQA50+&!{rmhgb`^OMKIFFB=851//)(&&"   "%%(+.137:t ~$ pA.Q%p!I@ x"a(Q"$~Kl>&b 3+2)$MW  v C^$'WyV6d?D7q%z,3Otҕ>[%[7O ƿ_PAzX|Ul ב\k^MktpqwdS> ׊g;ىEreF02I(2|I*U8ّח߿g_.^ B[>!-vkj 3sWf8qt4  j{{Gr _HYw9GT'+!E4<R 68-pU U b  I 6+   L  [S(/4 W a c not O C8 6CGTJ+-ks&2m$=tӤSxA$ T#,[:o۵;u"{ԜR.'l܈ڐ=6+ ;!g41?1K{R`߳S^{7L[ԣoђ0yxEQ("k)"*]""L  Q6zGKO95S`{Gd_&.8+5%$#"1%"# [oXL   =!@3( b .d;+/8 7( $O 7"+ /+N t3$)l30}b 2-x!4M %MtlޚE"#S ۼ\ - @>y #O ɫS,j{6JO5 IѤڨW+?ͺ^h Adq*d GsW#r l|8=Bރ Dȧ9 L'! [&T. T!-$5#' ?I.{J aow)6 23-r8&yh]FX9KA&K;" 9+24{.-')\g  ,@KhGg6;.\' e853)#3<*2Mg ~ B. V !a +Y./*dR##-&!. LC@`[ V u e$y -,ז",1/*-x& #$Q"$x'k+0ݹh sXٷ/e9/l:.]ߗ ! ;W  )95/3V-4&(*e8f>!5 H*# k"%S~qBA h}C2}p;-M| DtLLߨ޸M2&|\Էu"_ٲ|ܸqbڛޚ(WvXf¡бA䫦IY7y} e}(FúW@5Ͱ! ׽͑0H_Mèaoذڂ3wWjg-:3/!ݶsfZ^auzcs $-, ]B!**U@ :BUPCT2ڨLbt"a-(pQ K 2$.#B/-s!V3 @h?(>&,8 v< 3807, +& 9' V,! %^e#6 TWZ7+ovb  YO FQ" :\Va)T<&"h)H8TK:nJPL7M#,JP,G+D+%& 114O'2/R&S d?^[BV%@ f#C$s0~7j+v9L4U%"P's*q7&t9YZwNR.#-1i4-5$ 9S PȾxM42/l/s+ j$7 z ^F Eӱףkl×ȓHSq<8*" X6DS+M0k<7%WkQQs;i $&'ԯu| 9<3I EP BMO{_m Ԕ Hw6 \7 vIEEz݄0fƵy bl[&13R , &(qC˄KnL&r+"9,P1JwٍP{#@3։ k ?$}%(  %?er" bd4J1So s ;"(, 54/|p}ji -j $e# k"Pwz = _*+w$40 ;(Y _ [k!-&,na#tY& /G(" :Vtuk6!F= #+j6-kO2;=%% N/$)1''gc{-m@3GI?, c(:P-  ~l  )+f:O ,. rC i% &PCTy**߹ec]A xߋw_2`6 ~\ښw%M wTX$k׋(Ђ#McBO@Jddۈ-F {K =ѭo{@QvTFu%޴ ϼDX^68g/.:;`Yˈ %7'9,_2$C#TY y!S"(n/0""  < ["~;d(?"yg Ҙ)&.ڱ"r:-M% ֫qm a: (@0L>0 L [%!k:4 c=].&Z,! E_g ԟ.#r* 7+0.'j&%z!CR d  ; .wKx+F/k8.L! Q!+'$|!Run#`!1#k(ZRmQIBt%caFɥ %I7I&9+#z-_0O% z#"CepNtKTٺ: ?%q`a"Qݎ!) *T\-':$U `)J"6KfV1-}UI5Sڊη ZM&1-4A A   Xb- 'Tk{;bEo}`0v UB rwIandu,'?%O,Q=4:0 CDO_A q >0m#M[%-$ ouX-$  *9 Wo:)J51P&)nb nO~Z,Í ^Xſag. ; %棗>c v  mлX(ʺ]: AF".WȊJƣ`.$u: ؀uT董3R( {E޲KŽ!^]Ż^e6  {q|  ݓ>N $6 (V!*I# ^)A(Q1 E@k# {3t>?=aYs)Jw0~.w4-j6>l#])Zs`(^w2 _1^5)LV:HI R 2S2* \ 6:i:*?/L#,% , --X/.{9KG[@V;:M;}4W/ 4v-LqJz%<50'),i+!  /N$'M8 E#7#i/+>7<$+_I r|cwL']y`VG(Z ^%~+OJ(l MS()3U&)55: K?3k&  #^/_$! A,& 1"f EU9.>cXHyIF$-Cm Q& t '+5.9(Y&OHNK#'@\#S"$$?"h\1B*m*\4 D+?W$*oE+*n+".`)24u:L#M uK=0q0<^VE '?0D+k/88T )r"c h#n1CuC4 4#7r>%@ "$#ϛ|<8dc /&< !4TC8WH20:/S %ClʺY)H    0Jh.ވFRhNNޗ[ޠ9ڙS~ Pʁ苷_Z_+F )(ھ:ַ (N   lFƬ :c qRQH]'ˊ7;2Gv!NDfkfϕ`ϽbݔvWҖ{jyV)mlrl^ !h_ ¾{OV\ v܋"SzL;ڛÚW9ThKv [  ):W"%?! +nu a [ި(MJ ~|J %,^&~w|ձۘQmc 1FSC H J !'!վ׽ $9(3υ$Ek~<`/;h, Ȇ 3 @`.վOֽ.mױAY?g-*;~':Yybr>Xř,Rb%+"_< ]0vA 10 -`U^A<5&3*: )MG$;/#6'}%!H w(qR(0ve֠!.t#?&![ d`5g0" 3j&24:-\/<G;~ IAd&\$A*(+A:&:+ + xx!-fM3(di&[O*5N> o+m/Ù0ͺ7" jk3/0 _&16j3:=-:܃4-b/,)#&HbSY Z{ ]5ƞ#3)]<@+%H)"0(gX0E0ܶ0u.&$# "Wλa`77MQ_ jN;))gR+ -:ҢDy>1hb-=. ,Y+>/ 795D9!>p(s9/0*Yp*1T8W57/+S+Q5l@?7R"`] L< 2m Z6c$9#iOSG''zLm)|.Y"Fh?.0 (SHB %L!K.@ )"J,fv%d$$JF*^6!8r3"0B=bJ2F,j# @aa*Y,j#*&D3S%.t+My %P2ٍ(_0N^ntꍯ$ȤCԴ *fT1οsaB?SS/ʶl%qAaɓސŠZu]3# 80$Uډk˿幷/'b߼3G:$)P/GʾFUY?ŕrw/ΫFѡc '7 \gَK?~HL;  yRjP.ڮL߀2 zia#} 6W & HX#BhO*d"-66Z0^H^.ՇQ'UF 0r "K  )g]*8=y#P/.3(C"z @,ZO:9'.i`&C = (.^3B5 L Kv 9d#0 Z  ~"/"kM Y q*ߙ~Fj ` Z xg&,4!f" t%5%+t K  !2Sm9A91-y+\(83 8f4hq0c- ,3(Z'-' ("V%P(V*:$B$HI!/$H$%'b$V"&>i&&&%, X-*$k4վT}M1I F ${%j0l/[+F-nsoG,{ڡP'o-UpclJB XY rvXՍEM^xݷ=tl. ڸ$?"iDLfyp O I (*0l7ݩ3xY|Upt*  \&d%U |T޵ 5- S6Z(EMwSeMT"J "F`,Rm *}o" ,C > )' } 0+' 0l Z* QY"Z+<# ) $=Rc8:' AF%~$l#?I%p?D ?J 8 ~i "k<ߋZzUx 3σ hI l)r #S՝+ ;  F< i͠z.7ְߵρvYРǞT׸X:.۝:͆װyUjzߖ@H0sc ЮVDaDҋnʔ O L {Rc~ˤ˨-4-yڟA)Ќ m}!Ӻ&"0uԗܹ ?a).CC6eJ8ACS:C54H,B(Ns2nA H1 F8e< 1((|+X\?2J D\@.B>"a) !2FUA1OP!JJu!W- _hM8i YcBTW$v$>xO B#.4 4B O#)~+-! # L z cZD(&N! (| t" "!\/(=i0fA[E7 |.* c 3'@j:-LA{QgFDh:0h _0>XI PRR&+P+LZ"=(C9z3F3A 8%JK HFm5mKx #H[;H'K ɱ`9 |ٍ 6@h8n5p &nY09(c Ƣ$%I;ݞ=PmZᛂ冨\ ?w 5U +1ܓ.SdȅJi?՜Ãxr|h8"K)7<ԩZL / iZu_? |kˀϔhI07!G<# A.| "v i6 $ۋP_\^~CZٛXPP  n/]:oxtT3({Оuf(L >Kk|ؖɵ.i: U$/Nfv-=8J߈q֋ 7?ʚ0庞wځ (/o z{  + 0ඳlG&2wq@|e(i  _. #  0f !ĸ5X;؅nν9 ${ *އ)4=XFWNU7S@ D{I A Uv+2C" Lw1_(HT >q8oE %:J*?6C;1JrP1MVt4e@`nFqXjN[-XG=Hq(H%R fS${[%%i Oh%_)OJ&= 97:EzEy2( )(_/vD\V[V9M ?'x ? C w<4A P>Zy KZԳ3Y޼`Kf{(Hٞ Q+(ɤ߯K;h hA% CC+v<@#|% %2ԒB xw)Z^, +xfoj^ M_GaLff!="` y$QrބDԏS }Wtl` h/yl$8tz #"=sB)˾ BBwu09p; B8cI9>Bf,!81'\DEMI%FAk40:'&S. Mi%28I<ZK7#{A.H*# S-SR)[,/M}Y I[qKNx3 Ik ?[2#*#" kA J)Y Z P$ !10-' *b+?#21$R=)UgbCWWB +!&2""6IM8"chG* {&l"_$lj%H(1* /I*ک :X] 0 ^2 1>$;5f@]7Gx5-&?F {- OXݔK}Г#4D$3p" a0X+'7r5&@Pu+؏^+ޔ$- z}яT˶ћ6&m\Ȭ ڤż0VK T2Ѕ&,=Rͦٹ5 h! "컼X $Ox]!ߥ^nT|mM %íЃk'7$tŸ˭d61ϋ[7iRQϒ(cÁ$͒/䲳ϸ)Q} YZ1"HîHϟog.'9$LX5_ǽN &6l:}07 i/lm F k\'t\P56FHD.+ WoXۙsiF!?& "F2W   7 zWپ/Nփ; D>#$& !0.#*s y+58Z'&-i0/\$QH6ZQKOib1y$;xDrSvPsm'6FX LB-^ݝ'O AAW*ZY%^[_R<ZC05l0,0v$=X$uF#N%O!+|A6/`.* +1";p5=1F J0U-QT p(P_76[|T`|J O+Y8$+P,XZձҐhЉi'T6)gwӽ  CObn .? މ u^,$1ӫ\߽5_ dMǯ ?" ~eG In\^]~c&߆MVl;eQΨA͚}ҹ(JOvW^ͭz೗ =<&MBC%.Tg6f->ҽvU;i X e-"x6Z,?X ]>F 2>/OBG2D|4R+E*>}%DQ    @0W4EY(WL=uVWCބ(BE XT#3P)<+'#<!+E+p+ 2x# 93 #w s##[86G.1 M S*" q7,4(FD_.ac~ +g,6v/G=#uO hߎ,ۘ!퀜V&W'(!(χӗ*x[]-.dosw Hؚܸ4&m˨ ɲ#14߰ḟ]᧞aFYQ<li * $ڤ̏aZ R/ fa"' A? *"d1=@ym:|$:J 9E!-4!4*F1<!M,}=G*\rf( ./tu.4ޢ- D(HG(A^9:,6ɯ'ң>1I NC3":]Hs<#:b@I@IvP>|F!kC5ZwHop>UdWI2)jELsGnߒYb ~"8N>J:4(yܾ+ %&),;}+,J- CC.^B0\%`ZU`\,_MxUXnGJ9*Q#;&"2.=8B'!ePQ 9GP*EU5mV)X<,,'eH9)n91I D[Be[ 17Hu)9)6o%f:] A=>EJ TF5LB )M_ @eQb5,d?HL P\rRaA;ݗ/.>2; .'K"\rȾ0hbLCD&nM3qPw+#%#CުaI ښj߽Ҕ# 6UGGg{+ݵ,sʠ;7ʭ+f(ƽ2b$~֙lز} ?:pY]rT&W@뵰͓&{|m*iߙ =#WCK9+ ! ^ b!F۸:t u9# cZ"k7"qm[ 3'VG2t"gg}k>^vF'4jT0*\ - B%X*@'$'5,,.7'qV-?P'gM:;9.)O$.25R$'\cEG)0*+=89:4>C)z9^d\7֗=r3aX)$ U/ (8+Ng Sj C%5-%"  "54i+3M '$ x\ ` Z \ E 7OR1qZ-HMF[(b] YHy!c#/4"B"F*HfVٙtm+#YQKTETL 鼔CNúѾ޷ķ:s#%²+dϲbԻ)sUjot*Z 5!#)>'#c/@ǹ "g= ,I۹4T0U!R Wm2ܳmʷ%@s5vJ'J& ^ U4'1]YR."3}]C*" % $#,Y*U#4F G8g h >݁o՜rnv/w9n.4 A9:߻c *' _'J "~ |HA6M ES~ybZo'-#414BE6 HL Nh4$&kWpy!LMlray>[$ @c .1O[vSeNNBE~IpSUVEcVp|5j[NG9"U1朗-L:9FPjb?o0hKS$ L߂)#RJuWv]MIP:V_ԆMݳ7S**P3\3\ĉ/q '!̶!R.}H%Jbo ?casI;<ԭ=ՁE|TbY J5)1n>+>,&G M,@1  2d7;'x=g6CFHO$NGR^> UI c kէ[ n )&/"* 9=b?D7p4VcD݅9o1*nL@t 15 1)s l"4+G+E*fߠLG%F0 P +Xf|X 9|   8ظZ$X&#""l(:4 5l)'@(0/ "6vB,aHpDQJ>77*-,X+ )So8 Z3zl.h%X D <ְ>3$/. APF~dAGO:/&j+L>_CZ@<9-u#7#}'9eV6ezT/s'!.*IS-(m#2 @'A6%Iw6H> 9&.\!c:#u2=:=.87 =:| 0AOR(KPO=1W"3<G/ID<.+a% !8 8,c #7*.D22(6J8u 3l+'E O'Og*42[-} 5Ab(^ IE0 ݮCկP,|@ &},?pއҼ36 BԄD'"#>{^y'zJƷ. 8PS3b5 ;"cuެ֡'إa;)9n'XսZiٌ͂6e{Rq?jn  6ѻMJߵ"q'y uAh$G(7-?,Кlάo# [6Rs g&( :nF;&#e)'5+(-M 2f0% J$b]9/(.'n^  9jq+*Z _% )4G(8l*|̲)Y o%7E%=!L! JX4|\g뤿ضoiEdE1oҞ~\֯/Z):iC>c 0cN>& ^tEDK}Oʵ4>i)na%Ǧ9χ#s0>!& >J9BS,# a6nsLkh  Cw"т7JD9ƯCc(qCV]JQ_LlHp.d?TNvJE9g4A]Ki!JoNFV^.q!rf7a]Iӑ1e|&]7Z/oR n"_;Imq=SAYjg+GXtQP#vK 9\1/h(R׍Uqo9946  }XS\S$uyVk7Bڦ tX ]?~ AcS OC hi xD)hY&4d8%Cp2*G $j* N? GUSHkx0W&O/.t`4=3K <|N/SM0 EnW/f{70S;_0U6kB@ d9"y^@jTBS(85<9")]11 ;J!`J3F!><N)uU/VUK_\A79d E A}@F׷Tfyg, U B~e*kq(ÄH[asLp``I\~3֮/־9qF݃Jo|KWiXX BZ&`l "9FqIGM@0{#`W "m:R?' ;Qe-ȏ "ٔ,5<x<|)޺bnzRiZ@/78ƞSȵ ˋ'?4*➷^ (Wk¾٭fU ڭ,'&ˉWr9!ί^NZB7(Ap[d| 蹦^ w"#i[CBE &h78,8+Dm ~) : 4@  *]j0#/.J*' N"EB if / @KSP @qg%,9,Fb XN>#'G /   $/)&=}&=!*2z/e;HC qB^5>u//32%5"9(-4=2`G&I @36Gq5NEQZJ\\6\3N PF M@^';96o6:>VGs93xLd=f "h!Z5!H5!%M"SR0qTgPaNI0 +G&F0 C&B4G?rNJd"7?8$fR> k!#+"K$.s*`!u" ) ,e6159 (=$b n ]"8 J L -/MZ>S8?x)9 a*:4 H`"Q2IO,9&j ",[|O5}' + #*9@nj-Md3N!R0O="#$^NF  Y a;ݾ"֍K lޘnqL)9a(y=n&bbf4ݭ`ؾ *W\U57Q nzi $ HN Y{JGwyG!#Ska9Gw on  "q~djwf>3$ʜ J%'v% V+d4 ӯ}2pMw0 &TD31 D<0 V !b2;i.+}w n!A }"r4#A)s7& 09!G'H*9:-B<> +:>-m+<QF@v"-;!O,l :vIX>N3 ! N>vm #oI/$!:$ O/%OSA0U(Q9? c ]9N>j,M iљ!1w7:yq72@QO ;vʺiKӲlֺ N*D$P0ӫA˞ [ Pn纶؃ Ehɯ=-]$Sl⳩UUvG 뱀p/1Ҽq7۸N¾ԓ ޻=ʊ<<}cp4 jt'*֭4p}+,cאȲ?Ó.f [@ r(2Dzl !#": 0dߩ,ޝ' fܩa^dʊ s$ 1+n:L + F ص%6%Zܩ;5ܢDN5/ (S+Ͻ=@gIIxF9*C+j5 ? DB \D@=/\ !0P)<;/I.L7LH8/n;5$+"&&) V,d)$W'+(,$#":qr#a%$e 5 >N"<*)3#+ &P-!a +A= ,E :!I[ѦP37 B?'!0 v۞Q#5 @K,]{(<@!I@/o#O#|19\<K;$):K.Q[NtOLHPBHUWO+MpGL?M:qChyjSj;J\.=2vEQa j1\QB9Ԃ*\DZ'!7NQ@8T`FD:9MCM Q N.;-. 06H=CDTJJT9C-81&:F.Iz>Y1-TD+GJP$"V} uJ"x#n+#3b5/3#1a@ 5w'S܏D@E*6PzzxZ ޳aݞwɦqt5tVʿºi8!;"L9GbϑƶͻkӺشǍ 4/٪]`Zɷ U Ւs+󀷇NN%x+ m#Ƭc܆QSFR,ܪA [h\9k ؆ TCY5K<4-c  qS$tVMX~iKg 2dr o wt$~>Le@5cq-2N h~ kh!| pCygW T;#CK+A>\K/QHL@o -#",wZ7:5++47 AcG'7<5-?"*Q'/w%(PL$A&#'0"4U/0n873%#9)  *, ?,|9/D&C):&L1%*i$$BJ|!j;HrM 5Kl#q>}"&/# *$1Z"d1!/ &?1dVA8_rI_>V\,D*!0")*7{:EDGC>|7-&$V%w#" (I8 #=$SPu#}~T pbSiϩ0M3ޛӣ x} 91^ϞyxF]͂%v#չ^bbCNб#n젟ۦeޛ@fORn1 ā屃vKaٖOw ѴixNcD.8 wTӡJ ns7r V!0 % I 5;D [*!J 5 g6GN)6oS  AP1;\FNU> k#I {;,sR47jO/D6"q$p5.x a p, %1i0f55cN-&N!%_ oM+ X<H "Eu/f_' 4? GuD6' #_ z(93@ NBR4W %=5S 1NBqH*B{9 "@> ]*FVJ" JS3N!$R!"i&8 "(uZ3 itQPt}_~}  C,x *dOhz2Jۂ)>qAdh2,JFh !r -&=:) 4, AD  Gƒ{   bz!o/^ j&K d9`Lài&ޱݧeE0foSVH荳_TiLl e#v$ȅ#pLiӜ97|> x7ϝ=){qga=;imM|_׽ y[  C 5#c!! #Ҥ"پ) PXswOe eQa*-c! YsL;N{ϭ \tӽjZڣ /3|où XWgd8zT"m3.8H}53L*n*$y##[^ J!,$)>xߣ"/B 2 XrSn( t~ (.(|.V e-!+h&CC}~{ H&ڵȿ5Ŵ"+,/Z&P;ւ B1oBA3%rV_'9IG>J97};6^%'+.* ')ˉ'0&=8{9`?-,0N&wy6(YHKEKxOH`An:2*/7Kl[:V"@3!)[#D6+(KFyd i_fLTn51/3Bc9PVJ@/6y'[+_#: 2  ) H U*$ 2br@WAP&"8 H iS 0 ;T~] }4y ,#UY mF yY!Sƹ^SއIhl# :.+r-חotb+5<- <(ǧQa T uߴgBVlcb F@K4ʹd* ΢á}Jj)X1 3u,V#NY*I>#Lf b]!G0gPT%5#*ߊ"J E 2g/Jk',$8Ah2x )< =Q1$L oLW7$ 0)B wpۑti"U `T  WJ  W )Z9  u86(hn P}  T s x{7 V6h& 7 e:S]4^F QP U?<\ RYd!M#`l`|&y)K$UTG'2"xߋ_"!!|%ڵ ;Ғ}$]!] {x& )*{N=U pA(9g&U '$.]0+@"$s%޶"G #Gd S4%C%OU>Ag6k5:0 , w mM\ rv7(  M 4!x ^ iko@0z2 a~ehݛ 'h YmʺG6ތ6ԏڠQ[2=ܓicNGȕ#5QQt"=_̏j_ʼnM˥9y)YjpÌN(QGBNh+Ș ޏaN#Y۽enӝ(؂ܼ1?' @Nj|5 8< .x!|ڿ !e W0P<4=e&$^ B y.2\ <&'Lg$/%FK'?&% Y9MF0?(o 8Z-K" -*A)(J?zD9/;U"Et$ d 9-d $I !9d7#=-& +j#("< *g&Gq"{b(@a43 p, 7X  u-j7au h! kpC?ʴ* n Q;') =#q h[e,!D \cTndՌ ZH KِbV@ V҄|ӱ E>ue)Ӭ5ͪ x | Cz- Hj uB$$bw٧5DY:i| j?y$}tr  # &A6 < , O&'"  OqeE  fIt&P'"C} ] U! , &|U l [#W 067.tWbOC !((\-#/.#*"k +e\$]0(9b.e;(8~1T) t! C0y<1<0h! c" .92]|.R[0W6G33.<1>T7M8@U@ =3E&s$$,v.}64DFf:[Z0% w4@ @W6 +C!G|#U$Q"l-=A}<[4"46 Rߏ KT^(X[\oT]/!kD!_7 ؂ V P3zб/ޠbؤߤT 38 - P|nY C E&#"ͣq¨S % lӲ;UÞ G\߾2ށM$̳K(XP˰АۡFЪ dS·ԓ bxƽcn$jBQ™G{شI:w<ܼFҰ١O޲݉½٭Ý/ϚC~"Teɶzķ]Nʢ|ҐʟŃɴה 7q'Qm9T<+!  2;*ڒTO lB Jj AT3 ' K[>@> V y s. ]tC%!':$)'!$0:-9u+F! ] !$* (xx&.%]00*uz!i Q % 0"Tf)s$&"!^ J(H M7$(#*.46t@O1d9!)#E"0% z'&b%#4 L OqT MdT f_ N}%#rH   h^ '"(q#[G t w`'*is'(6n+|, )|$g#*-m0"+(k81o@ ^   1 &z!":  / S\!q <$<$-d [_ %` !.0/ - v"Z L !{'F =0g  FO~P;>T-(lVC80Gj +>XBq%H !^"k x[gcj \L phz/ 8{Vb]AyLVSb ز B ?.MSzNn kx  } m j S TZbt  mbwj2 0` bWI?wJ7I:% =[t M~ hp~oQ ؊ehNp 0W8߹\7="! Vki5 D 'V0K}:\ S # RL$#&i&Z 6z ["3-^ c$|oNQJ?d4x # "+D JU 31f\3 MSRz @ !!s n /&t:Ӿ m'?1(ˎO4%C$>^Q|"q Ƒ ig ú, U }mXpdϡu.=I&ꈻ ]Bɨ)* ޼(&)CX @3 zvUD\ +Ky jh @D  &ҚB nWׇ/ 2  `!>݇ek6~) +݇T| h $H̿ &y%Ѝ } x 9ܽVa Y^7 us,l <׼!;ǐ7WR{c~ + & ! a+:ӥ)!4z7# "/: ף!  t H&*)B"% /w+33](.x#PS#$i.)?4V6 . : 4J,%&!*3(/e$- *{J-/%3W(z:4(s@7$/>7]1*1n84983@.G)D+6;G40p>,_D1@3 700)z.'51CC; H@E7LA{&`<_k@%IB1EOCCKfEC=@0q@!975,,/&$_*3d 6X2}@-j#Yf'A/U!M%&?)@)",'o1)6O'49,!\83>J|JJ@|6r.-W0/)n #1 YO:)76C oFE8 ( 8t[!M+uNu)*"oS  gCpDfսן$V!߯c\XYۈ|:>lIQ֝pއDIo0یEOáٓW:W]4-]ۉׁԵҼۭ؂m`[iAף_kfw;qݭ/Ԑ֯!s0ҚަS/bգ-ۆ+|1,qsjύ23o&V $$jB` %8 ,Ds(  p A&So~H  $$(M] |0 Qg|d>   K (\yMAQ}>u 6RWnl  s}v @/  b8,hR Z Wd|Gg ! !8(*g#K<aX %)j*,Y,N++-^08Ab +!;=!Az>17 * %7- -:6'C&GpID t902H*%,u6U8I7>9bf:4I, )F',s!WBlTxx  t9wAܕNm-4 DdY&f5#%I"L# *?/Z0_ٹ y =U4zUsZghc~#(B)#B m>WuLA% ,5,]C,qT.t*a.-J-1.G/a,/w'5,v"/%M y E"r@!%*d.*2"c40'W>@##"l!$i)' 5-d92 2d1y +{'_'"#B2 (@" 2%6\)c6b02r9)W9p2h-Y$(-&24"t;)h=58<2q8-41l,).#-R$%)/2;%435;&1Z<*g;(><$9#1&-#+), ',[%+?%)*(3-;68q;H(:{61?O+Q$$[!'W"\"O/a%3O*f.&5$i+48M % '0;(-;)##BJ;$ZP1 a877;+  `  (T z}v+c5` 9Z 1$"!y!!&l!_t_ ] ]1$-8,H )u8 xJAhAC`ZfqLSeXް'r,pp%Zk3ag.M;lߚgZzӺ'*"6ޕW cMfNΣߡlnT؎=ؒaAdJwCѐܳɰZS ÷ҙ- 5c_ċĸʼn7>׼ަDXuO0x[w8uবa־/uY S“&˯|Z/]5~f`wÑ,/}gЕ[͖d$͊qPw$ <$1ضԸ>ךYZݖ4]ٝ Wִ}f,X߭5!~ "ULxL) N@CmއCO# . >fQܑeooHJ r7 -R 4 $Eh h;  r M ~  y/s 2) b |Z Z cRFy0 V?h^r0y?PC f (* -J+'W{+$ !$ '"Vq %Rx"$50!BQ $i"/L)0 ')!#%+),C0v,&e&41Y$/u& 0*-S2*\1Y %'*"n/+]+3Uq5( 1=g(v. y"%(/V.6/3,/&&iH|'$ j%  !G e#p o;Eg E#r#%( " r<K+ ' ~1+60I" ;& ei"p. ]h i' 1 7X50* &M$z" , Uq pa : M.Ha  ^ h<: |LY!7  x k( ~C D (G-, /V*?> T7 H^ 'ocY o?teA N 2HQ >mXN~+z#}F  aJ8&i $5 /F]E Mi#~f}]w<5Arn ;%%X|d(B?FtKg+'se0sw :/I;} jl"&ba%^\5YD#I[s 9|>%6Q`)8w# UOWނPlv# !&\"@ HUܦ+!1$0'8%@԰/ mYq'q+>|%-ש}76M,͈Z@p /2 ,2O͹Y kzGa kNHﴑӹ0.޶ o _~ SЈzγӖ܌^^ @^TٯN ;E :7(WN#=Zޞ|7*[Y+ ck*" KK\)Ǘ˅@"}<x~5j],3I -P w ϛ Վ8bޣI 5Ⱦ$ϳE۔hN4(!^l 0 L!\\4p\H6(E1ۈܗKj&rWғ>֕M'*?!j`~b L's+)! #@Ot$Q5^=3:-7WQ ~&9e& R "* -y)o#d!%{ .4/X"~[+&t2l/d'_P$ t, o, )*EQ'%%z>( -N-.W 3&{8W+2: -:&8.-!{U$ ,"4#6e!-#P!%+,7$',z)4-;,.<4*3(''zY N ~v+!,e  j '$x{{  "X/,%T6'{6%+1(| ~#$ x'l*-.,$-,V*\2&:;5r0/B04Q0+ > r} l (H y(Z  HO .5S 1"*$"W!()1{24 @8{6@t1) a+Z(%a$E( +'DA/[ M"x>-F6`oS Y#\/ڹFEqc u Qg-Xr^ٝ cvC N (TalI$ރ|Υ|ɦl6ҽј݀ʆOHД80o[J4@<ҟԀ1}tп<~Ϳ?#X؊܆܁ُ&,(a,)W8 aLG uJ$-jF sTkV#'1!<ce 2W#xP#[|u k m,j8, V #w( 's 9LNIiH&*$-.-5*7H%g73qY13(6;6 2p:(f k_-&$,I,^ $ @%`+1`/m<+b'-h'+; .*,X!^. z!U*"8);k O* %!,'j)(%097"%{$ ," )7$ -'5-))&s$ !7v$^)-T!2$2$W-!K%[k #!+*609.6(7%:V'>*?-=E/8-3*/4)>,L3MT9]T)&G$oMM&7L)iDY+9-00-0,,*%(*1 _75%*}v RS&-9UE% D:D.+y*/k6 y9p$4!,\),B142"1(W4z-70t6-0h&)mM   p `e>#O&W!zv#)"t*),)g&F!E NE .<  { fzl ch8cmX)R02z~Jp4hHzG-I9Y4hz]9?5;8O|Ppg C<%.p`v7s B8J>R^U] hXG'|g_s9t{/ޟp+WZ*0)I/%R>ѯz'ׄӤ̞[Ԯu?1~j.)gڧERAϹ\[Z{2fKX2*1ԇ.0s$nԗUW t %. w f;AX7l   j! W",@*Qzde!zZ[ oK'8)x!-b - {*<&&-')>0n7W 4SD+HUf 'C.-4* "QRR)W= Jb&&+r.Y(N QY#!Z+]--$  kq"i-I5|2-;M*b0'#)F/K3`452/ p.e.,) )(&Wi)o 9, - + ){%! g  Z$ & q!E l vE%X#QD V$V3Y(=906/0H*(O#< x!'*}w+y)##"$!gqg]\*eS{Vw&%`(&$ "$$ " 0Kt- s# & $ 6 7B 6 br ]nwd, 8  { Zp8JGCIX>tArjl> $&"bY z hx5 u 0)lP ! > l O Su"  d bRl ,46o1B(4#Q '/4321v.,.(47q; <59)L"v{Vr$X)&ްQlܬޕDݦ$e\S FO . ߿?#K$"W A:9 \|"))$.]F/ 5*؜ rҰiT ;/ (4Sepر%-ٲ5/wݚjGӨ1Xپ(ݼlfr1h+'r֊hxo܊߼v;K֧ ZP[^ףI-UF?B`91(WD5(< B`vQ3=e.!2 ޖ5{ \oEMٳנhZDuNUI)a""%/$&D*8F,A3' B&!#*8' ;*&+ IR#4&T*("m L%?#0mE J #+#&c!/1 (  /d t&5 50Lqr/}? Nc eJ.q}0 Ps4 ~ 08F3Q*"~ |#f&5)<&&,$)6$1 F .#m(Lr%:JiI<$/Q351z,1e!3B 3 (v441'FVo : #&& M O  * CQ{ ij @7  ? <-|=O!"f4]F}N6@P`C@~? ` K ]0iC܏RmMc"U'!(x[/k^;<,bkF \)xH EV\i/Ήp1Io G޶Pc % } hsYK$ t:, hElL ic3}S#7[o0iLW3Lf>g|<]qݧրQ|cRN/}|WAJ uCgQfTAb$˙θr  ڍwTwzQPA ݰk}]@P?2%Np#}z(KwJNFj\%U`uo_nMX8W Y:.$BVGp f kV  <wU2 <+a`m   lZ} SVx   -Ui@5 i`py.Z2NH0lw> R :BQ  S#(<& K | ! o_^+!}s! ;"fFHHliR ,* a ' #wp & Q7  %f(a(#}mv  7<,  k j 3YSK  [ f  e JH' H L  J /F5#G'*F[- , (9!mnny'4,~*!W< j9  )# 'h%~ ; } - qb1 ? YTG t 2op  J"  XbY Dz/# E< l\ h=K mn| C > o EQoW6QI 5<~*c1 dbie.&Wt :gr {m[s}   F@*I P tq$m*XZwZ } 5DC:b- C@ , gS  ilb6m 4- fNl5ib  (In6Gv$X++Q?[ Uz rQhd*^T6]{+^BjcwOۡ88Y "8yޔ~/y}:%ٶ}-Zپf%+"4}-L95555u+2]#1K-'%5&,x)0\,2!1;28y/:*C4&*#"""')-10#3/d54.;*=X%f<"@&D+W@.1>?2G> 4M>4=07)+)6'@<$AH"?#=(M;-92=-8H:O:lJ7A5(93211r05.v8],;^-@2D17F;Cv:E@D59/2,/),/-0/41S;1{=.7+j1(/%1 $6'A+E..^9Q4V24) 1&*+ " 21z.B'#$b%Ia&]$$((*] *-8,+2+ -.U(W  Y *$  QyHfA M V ?%5B)tXbe #3q 0hH`` >+]]w`U#t ~%tA'>FtgF&v |܌ݓfV*)rΎ̙̆,"v)D=ކ-v݌ߌ٪ϕ6+Jcw_ބp2ng:֑WӷۡҍPUPC,JnmԍqυNڜݚ]ߥۭ3ݙSM|{߸ߕKܵ3>?^)}[$@lϹQNqЂٜ&xM T>5 ؝j׵Zٳ oAP^>ײE3AهS۾hb%\wJQ~RU6Ch-ۘ-U8v">41<GߪG|W'H4r^y_1/[hEvncL  <#- OK&g@ߩ+J`KmHl!%.Fx P0 l1), r.G Z25  P Q x  . W " P C / P fy, &  2 i"#oSW Xc ~#!a_ W*4n   | y7o^nwX&;p "B#m>#$ TU1kqtXol D( }Gu$)d')>%M#K$'\+ .f*R+&%I$!  !6#%H)*'!wRXP"&r+g.+y#{Is3Dw&Kr.&1g.(b! ) % o*,*&"o OQS |+ )>_O!% &/ $|l,u"8r! "] (h0[0Y.,Y!*)###4"%&'u+&-"-t) !( f<f#)&0 /'-,f(##q#0r')HA-6:3W7N5/' f#J(Ky+, ,, M,y- -,X+Wz**) (S .'] "  W| %5*y+&oJ$vn#^~&%h;>Q?b7!N&&a!_%hOQ(WRK^4wP6NCZ8$_ ޾!| >V5 yE M؉ 3 X$OϤD vڋHau]TƖ̊U#'wWCԣցydvݤTMܝ%p!z+܏ۣݲ߽۬A3C޽NbB[}3iGޡ݌B3F 2Z|!xd۴^ؙk-٘WL~f%6#ا$ںg^s"_O-+Дδzevxܷ XB-JNUNbrڍ&؇d7^ٳ$'IӠC Di';۔8ڱ;#̢3Vښ~ԭ ΰa1ە:P<߮j0C^9_A!F2$\m /0V> -*9j2 SB="~F4"K*k}.?*"~ ,V+"6*&}'%$!Yope "(a++ r+w4)#F =%(+.-Q*,% lWJ*7e PN#6#c 8!L !x"%+! 0*4-4)E1"./0;2O5'82082555431p2 )0"+#')%d0$"5I 6_ !4d0s,V(0& ~$S%)1.u33]w0 &+&~&}l*0n5-7%5 J1W-W,L-j-M.FM00,$[ + Q> ! e'x F #)~:0,P6@ 61$+*z - 3\ :H >;6) 3 234Ep6p6M5 43cF/&*$@  |F-!" # # $X(M[+B`,'+<)^'^&&x &Y G&%z#$3G!#B#  * fZ {!a%"/" " =" S$ I w1kVw  o  tpUE|oD@93 ( Fq =O3o q_ eA/} ^ 8Bh37}< G  E5v| &XD@A#&< # ">/Fa X ' vrrG/E [ $(+)T&"Log &(*)$)hx*!"R W%%&H%T0$}   Z X  eb '> %[}M |sY v -  w H !~  5yZ  iL/O .Ww #:''p:%>,SN P 0Tmap {  h T M Los,WW y[J n 4orj@ Kj5 e: )t   4 & B p*Q >=x Hx `G ^0 n&  +J1' qI a6 r6 `H[9QvF3 #   &TLH { 8 48 efv":4~0j}sc A|dx^ nt|3T,St 2WB;A8Nv| Ҩ׹QG)tʦe%ϳm]=[ץ&׭/7,z! s9ܜ }n)ݐEҳϛͳ[͜-#z מպKԠhSJ2D`^݃k۟DT͙cxL4zx 'PsD/ԟ,܎Uڕ"א\z0F݅z~$zuWF_sA %W);ԝmӳZضR'U.v.h,Ӭ\g֎}סӔ8pӑՊ!] 2E@&pn~%.@t_ `s3hSwֻ. . ypu<F%( _1{ d-du7TP.55D*/EtiY U> J  Q-9jG/5pKR|xNr'TYRB H  irq `@ @g  m M  ^ ,# xg jTRC&X@=n!9"!jNy3D+> )08H  (s3!&#j!.#""k" TR 6!+!m v ,r j!7"X#$#$- &)%)(,+(+y&+$*,&l*),.00?40o7s-8)4$-!%y"5J#E'-<1D0-(:S"1F x#%f((|g&$$$P&zl*-.6-)@%!l!&#H#"#q# $ % &q .&8%$$.!jp| j{f:*g J#6'*>+-/.V +2&q#h]"q#^(L+ * `))R i+n 03b4 2(x-(4>%-$,#b! e =Saki:e}L'] P = (+ Z 2 $= =  a #=71PlkB1eh y 1 ]shhtw!F   {"wFޑ| .v;>}feiGUeo 4,"~- <B HT-x4jO * `7CO  a}~S QZqB9 u Q W :_q V 1  D ( _ oS^ 3~ \  Y Lik }G aB ;'   w#aH#sBL! "!$k!%z#$" #Q+6W!&$%m!$#$$0$# #C!"s!p$y#&j%w'%'%$.%#o"$(!(-0<3373P~1 .}*"&$?$$%H7&%# g{!$ &]%$%3(V,%2+0605 32A6.55)1$E.$+&a)'((,|(11'0$y-$)%I#K'T)z *%(3+6$ 0!15 "7N"5.%4(1)-t))8(i&,&&7$)$?-&.6(+(&*'"$:!]!!A#R/'Y)x*F)O"&$%&-(',l'1&\6&8$p7!4302W0"X/t-s)%6$#J 3q nQ#'F*&j [! 0 a 5^VD6T I iMC" ] v Pr8ns7 ^2pիgٱ:ҩϧї|! MY ݏ r=4eCmԑץ.c2nYQZ  (A Xq R N#1'yom,st۞]}p n5c3ZUL(xOpB YHanIߍ޶ :+pvj~~ڤ+q>ދ#x@՜G`܆^ۏ-=@ҭNϻͧΪ7AzӣFAՕMԢ"Ae"[^08Eݤ/jcb)=7O7NG(f=n?R(wd5_It&ߵqnF # :t}^GoXwv #Nd1+n7N hnEv5Wp 14`@3PB=I38"N_NKt(qA2uY(pL;M6_ T ?=G RymV^-~q4'Pvnx)Hj` C{VS wl; 3q-E u d}: r Fv 9 ] zhn BX4  p C2  A1"!G   !""! #2tU]p-YGB,  SV!*0"T!: !m ! O$1't)*\v*)' &#d!D^P]#&y)I)( (w&1%D#!ly D  46dfjs{ @"" + 't .!?"n## /Th dT" Ide &!d[\#   xm f ( 8L/{q[t >  wC^J 5  T ,Ir u /   B L F.fy2Lt $ i]>l(h,/(c;]uE !J @d*VS) E" u߷V# (5, uZ LyܣߩJ! d= J l >Ss* \ o A 5a) O b :*& f ! DD"|z!^P "n  .P4W~] g?A_E^w]"AW(g;?7 )sJw(_Y`W5K &*5a1iS(8r>RsYFl\[  XW > J! php  ;;gMB`*d ) ,7~*5G {,v 0NVyV(  x$ }*@ ~ K +4  Xg]1BUPm $p*jSw Z 6 ) D  24 {k%0t 8[ #:mp.FqndD k V R .1TF,^1=ca13 eK n US E  M eWOWl f _ L 6   x-K#  <b R kZ  ~@7 Eg ~WK D Ux.x Y ] Vg |@  > i@;u3d`o L *;X5 F V YBbl2 (d  5 '-=:?'  U~ | %I`7 {K+t1ioG;K  LXjX~< $ ` I eC|KGJ13zn 1  ^tq O 2 "Za dVi\!  K *@Dq J,X  NPP~p\f&I.f$L>@e/CX42s]?SDhf]d" \Z2 c$iߙlߕs2]2ݗ[}0kgl?K8&ٍNIrBFi?c T[vܔډ1ٍb^_)Q&`J!=  \ _/ ` dUy_ (  U@8b fH %:"+\^ A B `N &|4 rLsCnfv Eg29hY\+WWyTe 4 I :o 9j, ) <  mt J\   ^  Id/u{=t   7 z /C `  j, mYP y -u !; t l  3X-  g  | \/    k` ??  p }  u V'*]'j\ 4r R B @ -   }.  9 bD[   I  +V^U T pC {SIc^ JQ-V7   K  _q;8ud m 1 I$J 2 C &?  D =v u:  I1j]9P$ q6 Z  1 = @\ "S L !PE9f# g  [EEiXS>R@zdCg[Hx~p&|U9,$TK<b(  7 m`NF#SSCU0A]|B}?r`kx^\o;~!\T`BbH |eU_X71@0kM1D%@{e ;@W:@,Ug"x $-nDPtE 5O;fX]Cw&3P0]q?L,A ye*LOb\+H78J koeEY+lb`Ef OO(* F t [ \f y `Zj! Z    ` b r' 563Cb;_6c ]Ef%%*fQ* B NXq'usHr^sF T/2u!/.+| e sT?LFNsYmINEdvMw 6Xs%UPEr gn )' W2 | g0pGnN7vIuq#kT o i   x      ^ m tU|f.z sa5= 9 35TpmN  v hOEDi[ #5~$,5/QfoF  Ol T #  ]   r#w-gR:!L\ Q ? * JH zt s;iOuFz#C*vy8>[@ 0 ` 5M,<1HpF,dWkUZGaW;&97w/ <{|3tk l +ed:ms8]  v(=#uDzBm}G/t#N6}@XSr{XrTj dQ,<8+ L7a*G9E4U@Xcd||-OP7.cwVcz\,)v9eK`!3O[QHsI{S = L:E4j!cn',b;ws$KG^o4`^>&\q^^K8Dvt`V4 s(~M RswYP 'C!n@nHV4Rc &3WLMkU^iPvb[1b iE Rbp ) \ w {UFKL   g>  %  F  R   ?  Bi-o l [ i  < # -nCY4}l*J{pW(31g(p E$QNnCZ@86'- ,   ( ;[~A4L k # $m B!n A* Z |4}!:##wbQ;o"7]Cp !u    UV"HP     G D5()t 3  0- +1suo #F#" ~   c % "W$+\%$q !8l#<&'/P([' $Q` V9 .z2CZ;F 1)Z`-=k&VuE[K (|2h>6  ` ~ E% Ge N4P|    @A Jk  eGo3 Dk@*$ - y< ޣq߰ߓ]+[*<ޣޕ-݈ܬ*Qk6܆t=co|:r(;@G72*.vdxE$,i4I{43o{-A z& uS)9| 3 @jy4Es$w:0 p @tXA\ K Mm      J  \WU j" g eq  h _%G)No2G$ Y . 5R  < 6  s 4 E ` y0Z iAY'v  r Rn sU 7`F }  }C`D  !xqBtD"#O##`G#"(!C!!=! A }1 XKLjN> ! #&$"!I4OiX'fqH1Yt}Hi!&=eh/*L j {  ]~RT3irAW?]0Z f7)>EWah o8$1!8MY_;K0E;IS?  N  "O~#}C%% 'x''iS'&T%)#> !+ "&=(R) (1%y"n KK !(!t  :. !D"$Zi&'~{(K&w"S`  Br ' J  [; t w' & ~i1 + !!$ %! " Rxc j H N 4 h]C[ %MX* o o< KZr iO ^|Ob ?J6n! uX0B  K } ^ - P$I#b~ # J |$Dgo^[v*Lo51MWjiA&ܺ!tNݍekyG۴TuY^A-]Kn4ԯ=0ъ5_f2JN TZ 9T;RyT{ٷٯY?]]ba ڧ#<Q3:קKB & u#E\}f `JP   C   VP  = L   $u   9 X 8g  ~/ wt.dQ   dr{P} .lTfH="3H%x'F%#P f  "}$Q$'((k(k|(()=)*) r'] w& %; >$#R#"#d $/$&E,'!)'*'''^F),;).l. 7- +D! +!!', =.0?t2291- . x,!):!q'!c&!& K''`(g(G'm :& %4$$=$PJ%4*%$j#" r"b""7"QG! f <!B!D c7~V?99i#!H0 R!,6!!"#""{ s @8 9h s  U83(  J    i<PL j *OQ,Z$~  = x! w / l M U Dk  l - e36>_ (/  ^ V-vN^t ,yTWfS#T`hmiq)Bg@cD?Og ߂2{v.2܋ڛNko&ix$ؽgחѧ#%׮6BH 3_)~CU,jHCGIڟ(ܻVZFRވ/@j[Z_vrP| P O $oIi0#c=7#?/[.J8O zb9wRy_HojE;7lF)[9u+%TI,' `gx@ D .z2h})$agU(E{.7a3Z U=;6/fMY,w~ Yur]ZzGn6v><~Gx<,j4F( ^[)" "H)]:w>7 >*2|=+ g )  i f^ 1K PB>;" j X}  Y u R ? mj    \ vW?k 5K|~U9 5 d  } Yt(8 ~ }! B"".#t$+$N#]#^H#8##$h?#]!WD! ! F"$)y'('&\&~%j&)+P-e-q,w*B(/([N(b(")a;*N*<*a*(&\%M$t$%t&%$#2"t!$!I!)(""$#="N"o! B)6K g C. mAKcgR5"Hw,Mh%hVk  A I . Z   ) @a  M  %.rOvF?{H {q/-DNj&*7`tg*BC  1yJSF\vrT OY ,  # l  :QK V ߲ 8 ?yIGjP2 M?  p2 RY F w ܣ L߶ ?QLY"L'ۇ!۩ڏڱh۶vGA@8yW2ܑT'xeI]i]G1 , &(kXwe1SS4 hYp^ 7dZ$ ,!O6f#Px N!!tTRCRߊa biX)2^ .y]ےۖ{;  u j | t \bnUuPE35  r  8 $ H A 9   t  @'QYgvo u ]y,S$JH 8 _  .<  `JT 2 d K`PM_g^l wK.S w,I2" 9T{7JCyNT. ] Ws d H 6(l    g "s$t$Z"@- Al#r;W P    0  M) BP h S  E Tbz \   !vh"!v!  !#W%&S&%$"R"/#k#c1#|"/!a76w{Z 3m7V`4  \ 5i5As*^t x z D~E + R `( 5 & Z:B&VF}Xr{rF0ynNXXG>68f5Ioy#|5/c>\tZ,dmafVz*SYgl)Z7cR7GUxx{wAE Ii9m/if\U@\B;w8!&JEAIjKO.4U% MJ)Jr{/@#+\"6acVdWzWUwW}4NDmF_ YP0WOm>)i\Ol`@sNcZ@1kQ@yU^~H>Ap0=V;$oKPjx6w1h-u!}V yT$s(!~SKb]F5i@A!K(BPd/p!VZt}a7^,z/D B 1cwM ndBP{45x :'BU J=Db2~Rb# Brx'2 5 q  tK * Q  um \ Uq8(=+A<I)wb *nDEGer` ^T c C = 9h  V6 hB w  2 \\?z@  Ya<u*n&\  7  / &   9  v   '4%l X q i G  4/    . v L 2sg9Lf d n   t N6 x d'R  h    f= \X  9 <c3R"AX^   4daalv[xG0 ^" $hx%-Q%$" $'\\ _  Y ] &R0G@6k\D 9e1  :=7 _+ J 5  B`o Ys   ;[ } |k   a]  {2s9Am eFmzJQAKNa! L@ R$qt `C(&^<*n8\.%&Xx*/HwY7URd,pMA;o NNg#rxhT'H(kRik,@u&(wO4"xX|TcB &R/pzS8?J1I", {+~u(Z`| 0!&1 m. 6Z# p<B< {N6PM)Lwc8T2dEe`+s~CkxfFKQc-_Xtsv[ltJg>ce fJB#TvoB,/={G/ k_|&/^f7%T2 +k'[94,  <cQN ,KX+?\X&tHVuQt,>6fv6rR`(b7qt4Gil*)&2<us"lml.E\5&jI j  S >zapjswhk Gfe&+g i` )  My - s  y kFkd V d 9 I>S,l"9|>V*Pc7 i~t&,-8 : D23~N,]_G4u"}9sk]Eo0  TsaGPD GY%:<y;xDSFj.df&(Mok#b%"=c@89<}5)iXK  /-"[|W- wt Wk5m{i f EHe>PQ\@fS|9r<&"@|_O-l8=/] ,VE~2Wi3lD\. dm2~re~\fl#PM#Y$5Dmv ?(3a4& Xr)\!K8>"1"/X_.(%IR@L?NYPfL|@-oxcRRB{ 1?<^!VT7c`=]2=~0akx-)t?3;nEoGex#1(#ihd/"'i$]8nuz56r( ;#o;QT*jCk_ '[%W~iF'pQ27(k D : %Bv_I z Xb   [gid ; Y    4 B - ! <  m^  Z~     D  : .j ! E ZFuU i >U n \2 @"Uz qoH]h[   N (F #czyH SZ6lf9  o $kQ    kr  \ :   L O 4Q  $` { Y 8  0 [ Z F gB  % #  \ l 4 Rwf iN     & + MT Vp md&b2~;<` zR  8L&1\ bx    V 7hG 8 [|T[     ee H -:gVK~vd  u> w+N {   < : }+C(M g  9^<2 )1OVL-zVeeZc#!Hp~dNQfeGVHsRtDhD-1~mF+rSz;r B8 ZOfXuIN+zML !'v L9molH=snRKwmzLOO5 8|)c+L2g YE=PH_>825&zu:t  QWbj? 9ELs-;B ?v!"Ai R T 4j  C b xU T 5 L v  92/C&4 6  W  | uX I q ?=  <  r O  g( 97wL1-\8 d  <    - H w      N=   H LU ,  a  @ ?/ O# _ =R 0 Y m ] T [  !@   *V 6" Io O z *  CgaoD{ i  h ,H U j6  +  j 9  x   \ U i KIejkToX3 ? @ c;:[}  # 4 zQ,14 ) q Ha F u n( *B "wi(LO e] ]3TolcR ShXJ  ueNy Q9JOz'Kg>S4Ok'  eU t (3]Ip4NWl=j$&+\9jEy])U/!%682P||p`QDn* ij`knZ0b^4b2"P5R"D5ln-$zl}VX/W G0*bxM#`oR4qT|`<38<\ JEJ='~C  L#8 5^3#crcp",Or[ C]Yjw=Bq t n W+   S U5 /' uU <. x  Z I C ^k T $F  JQ7&]i j  # 0 , C`  Ex   q  n  .  ?N pW D(  ] ^ Vy i / A  e  )  q Y ?u z    , j J  r T ` p  U Np X / o^  z f 3 ' Wfz Y . z } q  >  ~  L  ?  H { %  u }   {XQ N' CbHq @g loSu\3 V Uj - ! _  h 1&yW m%@V&S8  ] ' cH $ H # ;  ;  Zpz  ) 8& >0f%}p!AB % #v  Vd[2 Y?  < A  R \ ` v 6 ~ w&%q8vB> B !  & 6  01j5p~&  ?@@g6f :KgH61iH  b]bf~LK{3\H!]O}pw{GF/QrQeV-Y f9,=* erkC=^vdO }i\DzPB< OU:qbA^hH"h('sTTeqQ3'BUYS,Btjc,V\C8o(`+w\+T  8  >  U3E_h1t(,/  za ) >jX a^  > D f  m gM47!A;A}. te;f1^6h-K >_ "QZX}gOpLf V f  q w Z / K   - &  y +^aVi;'xW(S$g$Z&p$RYk_ZRZf$ `H<x?Fa#Dd<+hao"/t {V5  O r w}A( Qj 1W   v   V!  a   F FJ $$ Y l  I } O I E@ 4 $  x   o 7 +g:z ]  S D p Z]Z ~   TH  c F v~f7< VkNE@X0 GPZp*|6&4lFMX\7?}PCAGwO9ms*U3jFq  j u  kK 7[:v%tuL'0nww3`XTL:G7%Nb5 V jc   Nv?J 8 , 9\ 8   S1 !u"%@}%eBSiGPmLp0Jywe#oF^xH7@=,= ~ K { K{ {1.|QP0`voZ9Hn/II&!=ojkz-T { Y o i  | 4\  8f\ [ 2 V8p B1E!<O0kKXO"s{AEzq mZD`|IdHc]Qs!`q_!0+(Z@kXM4 u /B6nutavrZk^FL)**nIIhe"/}.0m=XoNc4LFtaZ*-QgcOd5% g!W4:ChUZPEX.7DX PO SVN1P^ol=7mH TUp 9BXY{)0 xG44cUr\; c)'hjbCy w =v - z Bl 9 Gf b j 9:(<)IK -Z TY  ) s T , 1vf( p 'peX I"w,: oO!g,&kx_C*:T,XRoj {% U5wLW,N0(%*MUh(l e op ] w 3  J w co  k =4x P 1) \s 6  > T J   a9TsBT$  hP (U)v~p  tN wkUf YDBs"M:faFY*d-gG!8R!JQc( wC  '3V7( h4  E   D E H 0 2  @ dv i4 g m  1uw%V ^   Y ? q1\, ?  $   x " 9KozM~F`sX+WTttMNm=`xYhN_sw{xnzvg/&AZ ^sA  t y Nk_C$OV2B ;X ]aQ\Zz]#*g/Z6"Bo}3^|52a \ 4xOyzj9Ul$I0}u-f2 D90&J5~P6,nvR`)5,4"]*a`xp:V29,X5g{j3l^ CmLW}~&4:V67k}Y+n6[aq&mx7B_EjM-P=FH6`#k/&j2pwv~0*Qxs'`T +M;Wb[ [L<_{:4*rI8H7Azmj"Ys@i1+%j- |J 4   n  2  / ]m6JSGJM(n"*cBI).hduy^xU%`o0F8_j?Uo%/2+|zyyCk  9   e-UTll%r[! x  X5 y = l "   , C  %     F \7 U   MjrN %   ;]  [ > e [ s |7'*4 d/ c 2  Z   &( \  P p   -.     }  A  > \ P  E<IG g D  I cM U je d @ Q  [_ 3 6 <^   ,[   D 2  .  3 j? ] u B %  \ *f  n Cw n - H ko h - >a/=O[ 7S wD1|LCR7#pw`g|v-%dgW.Xr)I5aaLR!UV   6 # + # yr" bj-zE{R~}nP*% |/v.cxSb VRBV^V'' jlsr/!=qT*i9a5z@ve a4aj,VMd3c+inA ~LqvjMryZ^~-7lj+z6 Gk`lg9y2kz)N = cDj@u4N<$*@+,T%L~{</|#-2q .qG=5 n@.L) vHOeAH&c6Rp~9PDwZuQm7)(gz1yRg3&-'`A~jwQN@L3CIP^HCc~]nj t8X6I UWb(e&_IL"pNUauoP]/D=R?3WvRgZ;9tT-h;p=9P~^[  ( * @   Y  } /  -   M   nGl 2f   Dq 1Fg1lOH|{[Mc  m .2a^|s t Se4u|^p%rz/kcIz1*n:=x&{@~(FK@ m!G  [ !  6 e? 5 ! qD <  8 + `[6o    a     #   , o C` M6fs F8aX0=Zi+UD B F  ) 6 D  1 U ^ RR31`  y3.YO7[` 5Pb6CQ[5zrom=mCKYBx O G`K=0 no0^(8Zlvzm< S U xJ0 H. hg%   r 6 7g c&5,`u\c^GY? T Ht!8N3xFJ#iM. _u`^m_0&dZu|X0'g]"`g&pWj`?j_0Z+bqgg1Pdrc"uhVghzTZd!JIS#+ui#5<@o#"B]C.,*3O.Uj6VM>TGC]! jZK B%)YH,.87oc-]?|6O] 'yp8\@[f!5sm5$}Ght!= R   ;# J[ (  x { 9 H D .Uk M F  h * On  wj . O l m i %M P -p  Z  l  | Q QnKS P 9:9s  ;I yr 8 ^) .> DX Z   , w   v: `] %5@0OnN^ /0$6q:6{5   " xF | { u @ \ d` r u K 5} ] ]   qn O 5  ;   x &  w l f V\ _ @ V 9 u 1  K  r V  u  R h $ 7 Y ^ U 6 y  < ! l  v  c T K -  { K 6 D  4  i v }W  M  '  ^    Q C j ? N #  t  q { | ! _ \    pt  X ~ V yGr^y D = i c `R Sl c B # k ! 8 B  WHo  Oj  fP b Q oO :  ] D C  D 'T z * &! *\o|(^GoOser w 4ha6-AA} vfLHL> n75/f^!W+))G6C^u'[-!GZ.gr&n6=?%pPq 1 MzZg'_ :CTrD") cH`a jx?,"GE7^RV%[2"8|3APW$HS}{!CR%! f:{%vOE|mA9Ztg l=n8Z .<oY'X/-2)qdU5-Ff/[BMs`#Mr$NgQ:#H2'<J  = q  i   / 7 7 DU g Y h  T MW   bR(%^A"'Pz7  Y =  _D I= B _y 6  A 4 B  7     p# E !D ^  /-b5 x  v > % s 8 e 3  x j  %  N Z x -  d  =    L  3 ` q &   (  ?3 , m 9w   I i[ C 3 A Xv 6 z  e 9   M ~ & 9 ^ V I  s i   - e  [ :    = } } <f o{&KI8[, -y R (V,xUq%+? T ?v dDsqHEbL2Y<d Z  R   h  emM1_RD*,b!&'3,0vmi8]_|.$64.g3zk* q-o*D,tf yIkI#6Vl}}n,\*MB4;|c(`67XNPPwX&5qej(?.-cK5{td}poJH#AK: }pFNjf+T,)(wwh:@Q'g`A *"BK*RR#|9$;KOb -P WMpH?<(C#JJYsB:1!pKPA;.Y%*.q, .AVfk`)(#T?Pv8VQ2A|,!T ;B/JWw[FQyV>2S,E_)j6CzDMhIR58f\r&M[-kT{\:Ck2*"u'#nI 1UoP!x Crw5M^&7 e,iC:(g;VSg.!/>cA$swNtEKV\~ kN1dF%yhF>I%]K0BS1cXG s(N*P& Xr9bJ)l^y&l*LC[V&sDX]G;%N#Z@U/j \"uUu^Q0V5Q,fONw.( Q}{$6ni GO@<5/}3ois2&/pL;j_vv]("/   &1w>ew9v&fgqlK[1f[YJ '^ODJF?F0A+maG3O/96n',l[j)' ^ |K0X8u0H  < 5  ^ > = !  A p  '3;{gwM  & ? b  0 g ~  \ y w = y &  1 ` $ 1: {  n { 0  V     h f     > 21 3    J    "  n & EI FD 7 (Z c   ]iK ^%}J}5318I ^yV+7% [  # $ , y @ |Z    kb  m ;  '  0 I    b f   2{B13<4  Mx w 0 N '     T,   3  D  (n  +  # ^   nh ,  Q 7 , E ) %    [U  kf{-$m\W)RhS!-]5hj_; ;"|e)r K2R~+ U*^v$ICyg.ZUIHo0HO$&z^a&IFq;$ILcvkiR,DO\.P:,6F85B+{?J2JZD0Ne/t@O 2C-Z:*O0[&^)#\?0 `}WWp Y^xv`9:>^ !{Ml0@`IC^Wj))31a~#eJ>:xQE;qcxiq716&$IcG30thS`;Qe!ig[k9;}jQVVV!1pb"e6 4+w!=z}~6O D.abQJZ e B  a b 9 NY A  v    ( . 7 . 3 >u    u S  J  ^ !n 8, s  b)  S 8  e { <j ;  U j : R -   \ I    p 1   S  7| 6" b $a!nfca{')L  vR { mD    j &'   E 5R   j   ' d 2  ? T  N  , =  -W )  U P E ` czXah- b,\ L7E*5$4IrfhKdbuFz& : ')tZT v_O$(:Xq qGrM,bY  N g 14DR_ ?M t ;  v b TF  ^TToucA2mD!uqP$I4w0|Kc#iH'_H<]rv9tF9H-`8V0Mw>q NswlgMOY^Z*v vhX_naxmuL$8.>o+ } IQP ;DhvM;G$ ` -m1sQ>b&j 5m,X,_(3Ubqu_V]`.WE\cp|`o[Gc@S ?\ !Lw>$GCPVn8q%28]t0R\=Cbm*EKfjaDqe&{k}Ka0C,5[> k ! / aP L g Q*  & [n      * p3  >  U    u rS |-  ( m |@ *t  Q 6 tn & W ~ {x u     6 ; & Y}z^*&IwcL1-?kX0;Tv,"v13;?;ygS?E.\HUg`94>Rrn^`w3OzYJniF%c;6tpQZE]o>O.+z@ O>`%w9X:0"b`!}2^{(>srdR9<|!]\l}cXMoQHS6n0HU"xkSp/i1Sz:c }?' !+! ?jS 0#_8i)%KUlC/c:fp7$rU{ yVo`K\D^q1HY d|? ce?Q1?u)yrrjcN>!8pu2m7:SlGi<~7Fkf& ]Dr@Iu!8}191xA.8 L%;Lnw@?}XPG~+iqd{ BH{d>PzR=+QxnQik~}e D!@.R%ZNK  =THhl=K{DdV%G;/xj*,r[jyd=3 FmgtiT}AeW/evC<]m-pP4Cs? 3Wcg ?hF`(:[)[V_*BYdn rRD7(f!yNs^6aLd[{di;3wYTY|Kg%FVKeccnRZ\b+73(X%|D A-0$z1Y[pSq#ilC )@'g0d h/]Yv$~$-wbJGbn^ v55L)M`'<|?N"c-r_L &T:] ?#iq~$EG_@2wpl>3{Ts%Q3Dc49{[)Rj3}{:'B K)g!lR(c: n8%7 $PJ?qi|r 9w |My$t: e%s:>[?@ Ha @2z5m9$E"x}L/(C]]FZV%B L]X0?I6=Y(L AQx0f<4;H3~K<,n;Xn#["1A^beo9r1G 1_zK)I\.426pE )tL+{@2%h3Bf!<J(6/@KKD+14k2~8VTcda Z`F(>Me|vs#1nG\y%^?DY5;SmMk*CcT@% QC|h]qwmpu QWHOI^{hHP r%TLEx(FfYGkQxryWCC'Dma0;t?1[!V(jFSIT~_g_[IPpNSw>Wd% A\ee$M11@R4MAhub)g0+-VtpF+lrYN\7Eq3ki_`{(OnjuDj35>qy}epPt7}VoXghmvYZx 2J`]mjUA,(9z]HyFe_`1l:6UR!5rVz&1`@QyUvsFrdcK/BF7(X& 7h @nqyHr44n, X1`a&2W|w`fm<hNJX"3fqT3J@<9ueC%WT~KgO0Hv{Pyi*}$,< YO@ qMzyUknw)]65%P]9 8rr(xA6r#Fe$j A(+CNpuoI41F(Gf852?BivDIMX'?Mqo[LSpPpYqh{leTJlB(N|!<gOI`EhqX- >KJ=. Kg"y"tu]C,'1"ys%WPYS9cd(:Mc%vdV=H/2uN@oJm_[F4Cy1<6V$-EXGvsrBU =gizSxV#kt[k9dy `k18 x"O/+9`J::}n:wy&f =##xu .4=4*D*Enz  DJuDQB' 8ShnmZ6_ef;>CQEn%"Y+@RY 67_#J2WZvX&sl-A5)O3~L~{E]sbbuj]zhz*xA>6Xnxa wt FHTd=aWUkue0?=v\.OT|]"SZuPr#f*^ LKpzTFj?``,[R]Ae^Eeh<#v{ ;4*b,   {           k i   )7 O] c 9c  [ K T>NmoX:;kWY)qeI -oY[1Jta@TTF"w&m@]NF!HZ$l]9-$t%RS Af *u'ZGw[@r|XD?7&~ >Z7`s|Zyh-tCbkh,72lDj" &R *!qh.vplda\E%W]wMgEs\ 6V1*ZvAt/_N<%e8Uki=z@%W_Tp0>N<} mTS5K*GD(U UNtfKy A;L}C bVUZWH8*/#2Vcu0'%)@h]#]G>3ZqtPb\*ZHGMf>zl@mosm]_YdP]N) F&:SaQPe)j#E 3o =4gH4`X$;i:]f-1;uK#z"E$ZFM?[dcMjDPLf{hlp<:%?J3'!x~Xua ha2^<2"_,z(,LK`[kcxy "R?=2dVw")|5;+`y_ce5wZ?[AU%*/D!MmDF,#-gSf,7_O }&2$oo*sI126Ih.>}s o[ae'</L6`;lDx84#)Dfmg!ScqSAU]_XAi}Q O#xDEU[D >qF'(f+z/,d XPbIsLoN&@f=VFu]mz$e #Y25;JFPyT[BQ~:<w@2Q  <<DjDCsZ`wSFDSt aFTE%3wDx3_kq[I(&I9G A8YG-p Gk)9]_-SWewe7iDJ`QO^CE>,AJ25o|w>VB Ac.&cr/)[&jsEM$!`4w%}$s$k[]dyRX2|a0PHH Jv~:FJR f$o204WlX'la-E8 7$lR6|/TpVG3&~; p]HX ;JQ94n]!S(=]wi,JHRo$N? N,6yF>>XK7xk L}~F(kU!49 6P )W-PL5Z{?^TQ L{'H>M_8'k$ ?1biE3%l(ep)cz(k7~ 08=WrX/.P]BP D}>gN;Y@>[=60]^!.lEunjCQ:G,beay1?xR~@>6x5,rS]JtN-0N}Jp(O6-*9_j.i9IC"Uo{qX_T8l3nOO26kZ;%qzt; @QM!|8RfU:GoIGGW g Bn4xW5*qr@]AIw "Eh']= XRw&(58d08sB50#gCIHsz/[= 7LS-xT4W]Sxx2_6_^'=0%&%%&R6wApa0xL.HeAx?1<~@=$3g/%Hg^RVUt9&@Y#7k+&42LT_Z{Gw. }6 Z ] ) XUGx  3HV{6/Q}iydb|P 38T|lpTB  41vmQ/t9IIPixT;" X S{}?eqbfv%|W1X$|m]SUbs?Y&z=iV3? n.}\dv;]^Q+L(B I.V$jVD7K\KL|dIA|Xl6$#]3%3HbY_uT)"iG{~l8IUEI=hF%`J|{2kmS]l^55}Ig D\Lzkr6{[kf*a{; Wc9\(5BBF<$Xp`k&HzsyBM' -/;b>trOj.c/m?tQy|W/!"[>2A>?M`ej_VDH'?=O[nZobSOB$G<" I2[g)QJ4]9a0B0RXikT#\> ?M:L 5xtY h o_8Ae"U>eaf~gm||WS`g =0#kFn ~eeq;1dBBDPtM{0  8 z1F6Q W(R5" .emfweh,`\^sLU{rE  C _ o  } l p   - ;   I  }Q,\+&BUMF$Ss #z!R~GX/Ft%5eeQMlye-Gou,e?':@{zH,.=*6T*_w$G6'%Ts30@,{>! uu7"3i3{8?9. (B[Ze^45]cV3"A]z{Rc  Q ,;<6n!l3"/Z_IecC 35{2:/$)5ES "'!X~pJQC1?nAW */( 9xj1eKFO]Uv,s56.K:zMstC[ogHdD48_\Yss 8oW! *PkvP !i!b=R6bL{| g5E|g\SSSxwh"GU^;JksW"?9>)zY29 oax+UK`'VJ?]|swR`Ucv__0rSF0zXabb e=a\pArisi{nqx^N8c7?LbD !X:Pk . |^    ^ : -[)!Cpu' [$,pAr3&P=kTy7Nr!"-Gwn{EOovJ%$TcU 4 T=^, iy?*Yg)YP zD49j!EBd'~!rq%oIGh^|d-BVR=0/m>7?EIC Yi8Gj:v}4U,nPb6ui~:|D!,_JVZt9tvV]X3&jp'2<sXF#I rrfkbme^`W$/jE~p?$_uS|]@$nc`k'5T%&m]np7M. Z]Rw KvIf}k7gQ#`)@cebg,WE:UI/O:(6ii::};(FK@ !)*"cSG+$.%^: ~ fA'H dquW%'#a3Iu@F? gXj~ Kff.E`Jg8k20>b{dUnA!9hxWDk fd]d/5/4a9Y W=7Ac8f%u\B4lB+W"dAm&t^: e'k;t_++7^2pcgx>\U)oG"n+qe^W'\NX~G1erne.qUU"`(y_#%z5[9'x3u-0"3f )U[~^QWO,f*[yQy 8RM( *h&I WKdf`SX.NKMG6pZ5'qEd}z$D;NFICY.v Dm{8uk{Oc1M&QR(=/m1-ff?#3f @~Cm E8#B^hx?"M,r'D> x}qf^A2` eP,(#^@qzYKSs3f{}Ok!R" K*KaXubT@Q~q 2 lulV-n~&i2e^L0n z\q>0t , 5oMGTFyj$W (Sc=>C+_-|JczpR]/$C}w|)3m4?R,v-z5F$P1[9=Hm*8Br}o1S$*P>4S146O|pfZF,HEv}5:!7l:CV9C\nmEaf }]XTI8d> Tg\Cujl; 6G5=BEHBUvQG\z).#8lzc z xEr!lG4SQXXZRf -%.@B<87*$p"m A ( ": w+2DU=m }|p}AsiXu3 Z:^3HnNg>=3Q |>H=#)L9p :ngcSSUw?o}|>Z/y4. P$<P^`]`l!S{ 7h6-wP1i_Ha[H_ut\T{qwlltf*M)f7bJVT`|5"gE?s I$$AQC.b1 ND~)-4zMjjir{uk`WbB+}',:_!jsl hjr >  U,7)I;_<f;h1U.2"+Ce}^; ~yneGJJ3`-1:V`Hi!=9[5jzuwn`YNp>V+(s5 (Wzm-lVGDsJZJ;>-g>),J0[>k1kR:04<U qW wJL6k# ^E~eLFE8c;KY\2PBQHETFiV|akd]!HLE_O{v 8Y6]C4\![>mVXj')ju,dksaF'yiKPU5nP8pxq>$ 'cvYghU^tm;k(/ILE:R3!OkgkPE6,,:?D432\cxYiesU'{fJ"}{|L.e,67' ,4/HJhcomgUaqWg_mz"\vrzpqK  ]% l7{\=y\&uz'e Ph!"N/inv|Ak}*u<_PNlaxvC7f1%N@GK>Q!+BURo} 'Qt 1DKMI{4 qz*QYfq&Stmbd\[`wIL82GZJc.b$\*YUd|Y%l1[|Mf(1lDQj u$hGty1IS?+(KoG' ]iBUFOHUJJ03`:5l9]lH6h:iTvoUhaW\gdtL=jH}vtm*bFq'= +3G[i2e=Q.: e=z-77~IiUN d TBskI1iOKHc$i)vpzF]b[%J08P[ ]+u j7Hw0Aa3 LBn-NZ2H|>+s"~BtoVl#90PN*N)y'T  }WT-?  _8Q?IpG./*F srH[M-tbp}_PAN)e62$_6X?Df~.ffl)R9;1cTyHa3,%tC+WtSrMGZ%_#W4pLSRN81! yK  85V?eJ|XL';jy>v< \)S3avP^TD4$N!4926_ }|~kqi^rFx3y1f DU8D`#7,*!B+c=WVI82dF7oeK@j86<.K@UgTSQ[o|vAu`3EG3]Ar>m|~ f )J4eLiXii_kZI^ bjyfJi=}l.FM>1 +;C\&ke& 2;=CJ `)u8:P}/ V}Mw"u}bmk)17 -zabUSM[=Bq}h@zW!3^l_SCHTj,C= %'+%xV'yP G~7uxEp.k#^5DF$F-FfXID4MSrpnviG Bcy 6F<,@svOD&v{0sSLlwd<  *VhT8.swu /P9'0CT0QiD6 y3Hwdabg]j9I! .E\ZbPRnC*&:X^~:Djc'.=UzhJ%=k7wjkV>$91I.l$-SF|Dd*XM;$P FxhnoiZi.ib\S9rAjZ9Xiktw{rw[k;[G8=(PuRylad Z{'3y_KKbYDAKLWdjwnbcgYYh + Dk3M{;JhwUfE![Uo9@7 0^w8znc|y_ByC--'  oPVcl4X`:_L))*#O'e5b!x!tchlVI2,(6U 2aT(>sJfT,(k%V;}a;L I|+<EA=CWx(*"9T^iw =l;\qo{ikudZ=Q3SPt|<*ZJoa, V6$nOK[r|oAy P<)&! $Eg~}:BVr\Lx=e1O<L^u  H<Y.UPKISU L:&h }^{9d$T!@.-K?dUlk[1w,44!  -L_=i">\#(,)>Lp*AZs}h`cfpqqZ;K!~bF8V% &6DVG9N>d={ l+n\zFj|&@eEd}nI(y"b&3!    $(6;2LMF(}Yb 'b 6NKxK@4),2B?tC'oTPE@",_k 7&?sc[vBq&K :"*ibvx^?hBmMBEU;KZ0d[F+ "BFvip;`$_=&aX3 l`k ltswW%>u l NNc%8f~Ip@F'aOF3-dWD@28f7-b%#V!j2aK#kXokJ@QKt_ax0:wk;Sequ{T5G:-& !:9r]gjZCIi*gs-ZqK_oF9J~@ :MC% (p*G!^4_3^.G9*>FN3]A8@04.M.G! |rotrW)*#* ^+Un "Io!#31K@pGSXY!h&"bG T"B3XDwr`t_P|6('3/6H=bIuVvow @`x={K~G:'+AJne~ ;i.`}kf(eAr]|iT5(3AR]_[C"Dy6d:-\CxV{Urformw|nq#),{[/ %S{/3#a ;J dL>-8Rf_?k F(3g):Fcjc_^PD:o5 wHJ+_$2xrk GW.~q"N6/!1IF}WUmL2ILX{<bkS, moU?QrNvmZB3;mP%0cD%%SLP ! ,Vuy_y< =gxS/.O(Tx Cj7YVtXK  Qse1q l8^Cd&?xH]BEa~]G:Wu`bhHb"id\,@?*=h%r>9E 8#H\>?WYhfX.>XeC:8QIWWMVQZgAU,y{=iznrjui~xw %2Jj+j ,Tw$)1Dc" u~E0NmfHzo_SHA:V@[ShTgf_hK[p\q\s\eJb!M185=[G>d;7_0>Wes|*f(nCW1.> L SEy@&3*6w+sbcuqQ,N$ BAqanvw`IH&<F1]UzvkEf-@4Z/Wx0'6iQCa+r'3V%eZMGK\y/OJ!km[=?t1BtcgKprJ &dW4x4}rb4 .A'G-! o2I Kh1v]msQwG/#dK=~GWP36@v~HyvD2=r)INW.W+x{4}\<"(8 &7;8) u4=j1\ar03 (m l|::eXk}ke^#POg&c}Q"A`%k}o%sfa$nj]H17ZxC]V;.3Sw`_oS,{u||w"!8X|!zp?=pfh@vma*lWOTLgSq%}[;\@*r@|`,n{. ''9IGF?H77=iB]HyVv lrwt~ +Heqo6k`ZQ\?j6y3~/$z|v jO<2*-/K,M$0o}{qsn{{'y0o;`CYYZsXZRRLOVds~xqx`R9l|9fYO;$n'/Qdoe`ezz{A|OJJGYv%6HXn!/j513>BRe5@@9-'y8fBXCA9 ~@273 U"kO;%)%mK:N,9S%^6lHiZYK<* :[hpnz^60+uzsho}|X4%!$3(=$> 2!.K i| u\5 ":Vizm8^ H1  ,lNNmj>.YwjF7KnB`zwr:_ :+Nv@(K fyl~xbRv_wz|{qfN, <n 5EM?3cOh)T~ gZ<gqx`A$ & 5* ~q~wSm*WJ"UDbujI) -[#wp}/]rZ&b, =SF#Ijn`w-a GG8"5O'v~fFqVLTZ_P?- "- +jTyPfUXWSSJ:9" -1B`&~/23SpCQWI /9IQ_gx|wgW;! jG#yfnC/#KsFv g]K+ )DZj"26s30.*.8.H[LVZ][YvW}RWVXYQ?Z$$ bB$n^\]{ZZO6E3%*-#&E j+Rt | k0gIvaldx"BYaZVUkue`XP4'N#p(v)p5SK6T]fbi s(D^Io}gyGw3~1Nm rO#$(/6GP_v )9=874;Vqzk v$7Rw~eewn\]_][=T^NICANSPC5Mgxzp\KQ^ouvywgWoT]]>d!p   ` * *2. :OVSHCAZ!,8>%MUm  /H\x)xNn+.&5M.[E`NSGJ68+&,7@9s|XXPGL1G 3"~fgZOK,F6*$/0-*"%m]SmIZ6[YK:*:@? -% # 9M$M9IF7P/T4O9@>&@(/NwgnriqothmWvGB9>IWe ^V=+   9MXYQKYm`00?/zogV? (:MgaUKE];_"<@?(#8?0mYJ<*jr7`R/[ZD,DZ # -KcwX T4%FTkuA%Or A^]zn{YuBy/1> Q8cVngng]gQjG~I]quG,'.%tfcfhV+{`n$,4Hf?UVvVSF=;S.sdtkfhshT:})H!4N_sz{pW7fF2,-256o2f2\2J>BJ:X4[*\#SF@;FRp 1[#',8/P:ZRdhny~ @`$y*(  46YQ{Z^VpddY]aknok][EV>aOd{ 8{Pzl|jK8)uI F~sgkP\BV:O4C.3!& ,3 38B!T*j@DHJI@<6&Ilxmf\VF52 $-7BAA+5?86=JTfzz}_, q82T-f?kDfCd>a4[%W,Q.B353#,@RVQ<#'Dm2=E7E\<b3bT I Vg&~:JMG4 %+]3yoeNSRR\o}Z+ ";QWQ2KUXtgx (123D7)aMAJNG4kZVk-SedL#{^F82 |nX;$ rb[ PL10CB/1=?C?=Ns:9505:Ql ,6L\rhM0/6@LPK:(.G[gskXJ=><><(]1(Mm,.,&$#)+$7)F<M?PLV\flizsvfgqoZ.xL0k.`9EA)BCA8<}R{n{xuavTV;?39191G-J(B%xki_N6}m{!|%sIn$#RCZ>I^t  &[  ,Un yqo|*$Hf;PWI3%:Yptq_VQWfzcbm=NN@60=Nj|}otqbj=b,X$H%<&5$;"MUZClUE:5#  qK;8|EhOaP\7f"o * &@Whdgb`dcmcS6f U;EW=I9330%Bdxn`OVf`~?"e> q`dip~}s]D-.)051' ,_ +! &MoyuGqeca.dHo\u^VCeG~gZpSbQ_aaxjt|{{xj%`%bho~ qaZ^^ dr)z3{6n8g;e9V-Q/\3c8m@vGxSs_klXv@|3--@RZWI3rl e#yk^]xayiU?( ~ p{('% rkcbtzm^v`daKhJsPzg}5[z'<R*iPy)?HW k+~?Y[ho{>h)t8QGCS0g*{*% kZPEI=51&"!lSPX^feYE'"+6,LA`KySS\v&% yhM<-2-../+.1C~Zvlwxx}voj`cdYV I#@>:e3<CHKD1xxojY<(|pei\VN<65+)#")$<7S@eHkQn`r{ddada_O<,2G]nmohaY`nwti#U.G9H<E?H9?12# }|gBv]I80-~5x>r?i?Y>@/-+ -6CW[`\VRHGCBD=;-," )&((!$ '2 8/( *4C>0l\LFJM XZN 3uaF4s+`R JB9/ hC# jQ3*}(y(|.}8~71,0|07{EMOGD6*"(./?O\n{. >L0Z0_&gnhXXZ \s.752%4I(IAFW?_;b7a=W7W?W4X-hfbaUKMOPSE:| 2ER `!my .BKTR^dt&@\r ! ??PoV\WZX[bo>t7Qh %$  %1>CL MME?<BBF>67773/1   -0##6.&  's9ZECM,SSXbswZ=2 hZWLIE=.'&'36 4 12#@&P8oXfprtlknp}soymjcy_y_sZlXoSrKtInKhWUY=\*[<!{xz 0 N$d<SjxsmbXg~   -3q=\CX>O8J"HRQJ;' zhZC9*u!zokc_c`e[]X\]ifdcbhly~}{kTNIH'N2VDTPQ\@Z/dgi aZO4%~xx~ziv]dRTH:;(9"6 7)/9(M]kx}yreigqlfgd\]\VM?'wqlwwm^VL:~eK3oUE/~qv}~'6>H]z/W !'1BT a r{''-H1b9EUhuxk^G6%   "~.qCh`i{ffha_SJ<45.)~xz   !!)):,C)L#E=1(*!"!  '05 8;JJLNLA7.'   ,K] jnt    *Hk 9I]jjnOh1[Y_lwykYO;3/2@=BMJR]ch r s k _\Uf {":ED>.% #/:AD@703n8fHbJcVpRmNePnTjit $%'0@Wy|x~ ~{eY8$ p\B'xd[X^^WH1-CYeZSEJOe"(/4Hg7DM>>q4O'2)59< A C>:.   8L_mygbc i)m1s3o-b5T?KhNQ_e`VG=1x9xDzQY~XwY]TTT>P?Q>W;Y=Y1O?32% !!e N)!sU:#&% %?R]d\iLC<2 9Gcz&+.)4AFNQY]cjy 0EW\TLHLVbnspZ@(*:?B4 $    !  mV@7%xlYYVWVQD7% ' b!3=/#@IF3r K96AF"M:C>*>6(*49<81"zdbgol[J, 4*IO`vhhjmn} ,,'6< Ndv#$v&i$^#Z'^0j6}=?~IlRW^5e|nkIN': :4.) |pXF- !$  '+=4M9Y.J+:&)$7!J3cRufwdK0 7P]]QFFGXm&8@ 5'"  );8`BFTT\b{ *3.* #)*H:ZQ\W\bQJ=F6*69@?,@4+76 )   n XW`x y[MNXiwn_ep   %$5&E"C!+ }q}b{X]akhpf`_PIEE>@<M@fE}82$   +.63-# ,6<5d;x:z=rBfAfJkNR_ju"25>On}~xuyupw{zzspidcT`Ka<[5P)A,+(15;@,E9E4A)A9 ?FLS6bFgDhCk/n(q&w:xGba`F$sbZ\W[[[J9(w\A,  <Rv||v| ymaH3)"'"(/$>? @>ESYt  |i__X^ f'l+_$L#7|vuk~afQVAA66".'"raN>, "9HTVhRSP?MDVFcKmD|4~mdr' <F T^f&l6s;FTbs.4>Ue} ".~9y=s9n4f3`0T6K?COJ\SlVmail\tXpPoAtEm>x>0+#)u6qBd]]cRiIi>\2O?/-++2>@GI:o;`)R'B3)|&Qn &5D^p|weWNHH@55628$F1T>XLTVQfEh5m/m$o)i1o=vFwP~R~PRYUksrqkbtVhWa`dnao{ +;7/+ }rlnin/oDrRs\igt  +9?G@4 #  h\RDDHE</{}~vokj\]biouzusnh_ZPH7& umbYVK;9829=8?BB>}8z9u3n*c$\'V%M#K.P1P1A365*=Kdz .6=BF@AIVY[ZV`g'6=86657E U![ceb_jp#2CIP[cqwmcTQLE=#     ~yqe[TXYY\UYJJ@;?9.+"!tfR9(~mkrl`TE2! !'5=?|ErMuTqW~[}]xcdiRtC~*   )..-($ $( ( 0 5:>?P_u   .=JX`X"V$['Y!_an w#       z&y7vAlGmIbFXMKT;`1n+t*y&~ohaTD%} xn\H5 zslnw #>V^kx+;?IKMTe|wmjgjjofg`[Z\ _^^XJC8.,3;FMSOPJOOdt{ xv{ 7ESUXdt,7B?-$%):P$Z@kV|ep,788<40;I Pa1bFgL\EPCG9;1@*J'J#A 9+|vnjk}p|zpcdgrzllwyvnd{Sp@`%SORPXJ4jG& #((!0Nm}  !.3@>?MWf%m1n/p(j3Z7^E^_bwhjieuR^ES=A1C*C$@ 1    | zwt  rY?0'"#{[E:*zmbXJHILQUuPbPWDRB[9a9o9p;r9o,`#WSKRKOH>6.*2]AiBqIwDxCy?z=~>I`jvwwtv|{zw}~|vrnnjwfmprip_mRjI^<82/'"#.5KIPJC:0*)%8;=KPINJKA5- vgb e ^c_VMILMTf%j'n)s&q'u)  .C_&t7IKNEQ[fnqqmomr{z{z $%)4IXn1HQeu#-7;AQ fx)5<BMYfp-<JOPQUcnzz|mxbP}JF|5s#Z C3  !2<UWgrm rg[URVNOJB<7,5?H}K_LKG0>3:H_,5<GOcr '8;CET%]FkTukvzwz{}}zzyvi{^qFg=e2d3f-b1X&K/  {\|Fn*e_]WRD</$ |ym``QKNGM}WoOeSfObIbDfD`G]BNE@G6F*D EO W"`"gf^WKB BK"P#S"LC 4#qYZYZTWL@3+)+7CELIKP[lna]NHE3+ zvnonvxsngdgnxyvqdZVvWuWSM>4'&#  %4G Tab$f.d8qDwIVXW_^egqhif__SWRRM J>"D.@6<<E@@KCYCjC{A?BJTcpz+6HWdkntw|xri_SPIG;7@=49 76&;3:2>1@,<'3$2(2&(1(:*:'>E"E FVb`n {!$! {vldblor{vy}'4;>69?M^fyvo|jqWqQjDh;k.k f`YJE5*,&q]O@:5+25<76-) #*=MTV'b,`3e;f5p:w8~3y.|-q-t2q:q9k8d9b6X/S+F'>&1!(.#)(/ +(# !"%%/45=7LBX@SJ\ThXrfy"5? V`kt!s'x,{+5083./w.m'bSF;6 . (  $*289:5?BxOkYj`ejhpnxp{{shZLTE:&~~q|e}[qLg:b2Z*MKC 6:2-%    &*#+-26AGQOTZYkjqtrqpvtsuwyvkjh`gb`oimgjeu&+'(&08DN]jw "irR`>D2<'3(338 5(   $%1:@B>B9098;CD>@=81-,'~|~{ra_YUT~O{IvGq8g:[-O$G(F*@&>#3$)#%)2436;DNaz#,9>JUT[dgkmmeinsqnieYXHDCHBB6.vme[ KNHR0\7qNyZ`a^jvy ).4:49AJQ[c`caa~`u`t`qcoaq^kUlWfZ_ZY_^_ahXk[cXbQ^KXD[H`Qg]qht}1BTfs %$#&'$-02117/1.)#    obRC8&#  '7< ?E#I&S3Y?hLtYn (z'w#v'r*m1f=^KNH@I5H*C&D :775302$#""$  !&7GNX]`eir{}}vwsph^m^jUk[rgxrwzwtrnznvpzuw~wwzxypj\QL=><;<2+ }sZRA3/#}wws~|j_RE87>1("szvoppwyw{wugg_\]_]][~R}E|D|:=DJMKDA5/&#"~zx $%,./246 B GP(Y3a5b?l<x95055720) %4AIWbir  ~wxx  "!"./4CCOS\[js$-89@BHBIF~EtIkFcE]FSQNHPMKJCLBG@G8C0B2B)L%O(STNH ?+      %,*6;91.-*$! ",5:GHJKNUYXZ\][ahmy  !+%'~}ykeaSPROJA>:4+' #+0.1-5/,..,-'}z}{zzyyqsjjhhnqt|{x{}z   "'09;=CAFCFCKW[]egnuw{yqlc[RG>2' zpmigjfg`[QLID>B;?:51/.)/1/76/./'$     &7ALRR[Wbiryulkhhg`_WcY_QaCdA`AY<O1@)5/(*'''* ' 04 6 83..%! $ ! &"*&"'%#,(') " "'5CNX` er29CHQTRU]Xcjox{~zzypzty|~~}wspmifeh`ifpuv #($(+17AD?@@4735598=>8>?EJMTQOSTV`dqy~|{{zseYMMz=r<k<k@a;\1S(J"MKJND?8."!   /(20357<8:@DIIYOe^pju{ !4??MRUbcfnu|"#,-.7:82-*+17:864+""&',%{#|z~  zyruce[~WqWoIgD[3T+SYQ OKFEFCFHJKG>4 2 0*++% ~rsqs{{vrrliuv (.AFSR_[ZQSMPNOMONMGKE>974z,p*e&XQ"OIGD:6'~vvtiaVMC?4-&!   %(2:BOPROWRWY[_e]]^ZV[X_XXPNOPQYabc```hnwzz{||xmofa[SIKHGIKLFD?2112400,4:@COQPMPSQVVUUVTMTUVbjgkac`X^`ad^^RXVUVW]]becesx$)3;=DPZclw|$&.6/1533:>CFMLJLTVU\ac_f_js}y  .716866<> AC#F*O3N?GJOTR_NlVrWpXlWiNiLkKnLuLxR~OvQxKqJtDn>n8r:r4q5i8`,b.X"V`Yfghh kn ow&-06?CQR[SRJHDB>731("! # {oh`QRPFF?<424.469;;<?EHOQOSRT\_bnnnpprv{vqokbb^]WQG>::1-.& zolg^b_ghgy_wYsUiJeVhOgTiVjUgTgWgSaL`QaWcbdgjvgwhnqpt||~xx{mma]QLCGy?t9p2m)^]U T SJLIF?<::><BE<>9tBh?^=Z@LDD?=?5<(<6;7? ="D541- *&!     &&!  '+56;@DDKGQJHIEDGDx>sBg9^?P>J;?94<07)4#.0*#!"%-255@CPUV]`efgjkml s r u ww}~&}3??|AHP[bq /4:IO Ygl'"(,-/0-0/3744/'$)$"   %(%.-'*/%#$$!!"#)+311/3,00477;CJU\cku "((549?GTZ`juv}urolfa`UXSLF@<863/-1,+2203262768=|6s5p2p8j3o9m5o=m8q@tAtBBEIIHKIELIDCDHMUQNNNFBDCEGDBA==?9E<9><:899100)'$ {{sohmfdhlkfihqrwwx{vz{ywufljfgd[QIEB=87+{ ~wup{uwsmlak^gQkLmDm:m6q6{1}*#  !(137>HLVUYc__ijlnnkokmqlltjlifh[gOeJbAd6i-k%pzvy {qmjde_\WRRIHB?<:?9887:<CFNOUXWYR`cbhnor}z{pnslbb__]^a\]_]binoppstsz}  #&+,-446>>DFJMP YY ^%^0_7e8eCgIfYk^i]nismtptupwszppplaggeiddffihg_e_\YWVQVOKCCDHHLKKPLMNTTUXSWNJIIFC<<>78--0'*""  +)1679?BHQXakotx| |*07CFOMU\`flptww{|s~kzjwlwiklldjhegYaXcPdJ_KYAV>H5G,:'3*/.! #     ($ & */3 65$4)7"=0>1:2BE>GALJJEKDN@J?M9P4R/P.T)`+^#USE EB?BB?691/41;37>;<;CGGFLINKMHIG?A=7*#!  |pii]`[UMHHDB@D=:?;53{4t5n8g3e6[5Y5X6S6P;NCJ<HAA=BD9@7E4F.O/O&W!X] b`bemoqwzzwtrvrrknkkeefdaae`_ ^ \cY^SWN!KM%G"F$D#E+J)F+F)C$?$E LGOKNNLMTOW[gffekru{| $%* . 309<=G#FK'J'J-P3P7O1W<^A]EaHeRiWmYk]w_tetbwjupxzyuvwt}pxkzoznlhoksvs{~          )($')'*''*)'((%*%&',)'(&-255>ACHQXZ\fmorsz~|||vx|}vz|u~u~s|~vw~~wxw}tyu}qkh}de`|W|U|YuUuStMiUmNdQcRWVTXSTLSH\B^@]8a3`%^%gdnnmvxooqrtqpje^_STONJJHF;93+%%"     }~~}}{|tnlmikikgnmpjrnvuptus|zz~}{zyuuw~qtpnlffbhWjKnGm;o3i/j+l(h"n ojrupqrtw} }      x}w {qoonmjnmgdfecc]c_aeikmtr||  %'&((&,&24"<#A*D+J3S8Y=`C^HcPjQgVjYxdmdsdvfrntmpqpoiwqozu|tuxy|x{zxz~uxyzzqstqorksjognbpZrYuUwSsOvEx>t:v7r4r0p+o&j%hk hjghljh qpoptt"{$y%~%}(~1:?HLUXaacmxv}~z~~y|xurxvutxuuywpwusk jk ncc \ _U V OKJ@? = 52,$ "()$$ !         " "%" '%%  ||}y|zuupmhka__c_ggjknuw{}~~   #%$-*-.y/r,p4o9n8n?d;k=c@cEpHgIkGiJmIlKfHpJqIiGiHgDi@a@gFc=f=mBn<jCjBnCmBr@v=u@rAu8u;7~500116/-3.23/,,'(%$ &%$#!"zwrqmf]]aT]^]U`^!`$]#]%c&b)c*c.b.k5j<o@t<u8t>~C|?AA=JHBBB>==B==?=A=4647*2{2~0|2w,}/z0|/~+)|,*&*('(%$  &%'% %)%#(&   |{~~~|zzzwsqee_\[UONFFIJGMFJHNSNOUVTZ\[^][ccjghpmqt~}{      !"+,0;87AA@GDHFFGCHF@@A?=>}BGBIKMLIHGFDJGJHKMHIFJE?C?=74<:858:::<9?>??><B@ABHDB?<??DBDJFHDBHJHLFBIGHGEB>@96212,!& !#&('(,+(-2202.0+*.+$&%$"!      !    vx~}{x{{~w~~{stllkgf\]Y\][ZVVSWWSVTZZb\_b^bh\_bd]ac_adhhjlkorjjmef_aZ\\^X\^WTUWRJNMIGIHFFB=8@<;;C<>@D?BGHLINRVTXV\efglkoqv sk rp oov psvlnohlfffbd^a[\[\^XTUXXRRNPL M U VVP S X X^Z^]a`ac`hfe#ll'j%o%m#s&q+w(w,w-{,~2~1010/(*63,,-+1.2*)*%)$$#%&$'"#&"! !!#&(*)**--247758263344112542/635:4:7883971-.%((%% &                            {{zz||}xyzuwytwqyvwwsnmhji`g^YXWTQQMMMLDFIA>D@FGHKPSOYZXZaceccaedimlrlmssqpvxtvqwptpprtusllmgghfgdehfadbeebadfglhd`b]c^bda`cbaclmrqrtptxw|~vy~{{z}yw{}| wwx| y{|} | {   |   !"&!!##%&'(,(+'*(%%+(+,-+.)+('&'(&$+-)-&-',+,/+00,,0/23/+/)'%'"#$"!!   !              "!$#$$%  "!    ~~}}{yvvsupvnklkkemdceibfdaf`dgbcfibff`gbebf`\`[\^e`bc`]\^\]^bd^`efgbcafedghffipdedfhd_cbkcigacbehcedabaaab]\]\YV\XOVZZ\a\Z\^]d^_cac_^kfbkgajpjolplkmnnppvuvypvv}~~|    #  #"$$ "#&!%&#&**-)()02/2/1/13426612133257456189:7875757;7:64387888635707*113//3/+0101--/.'/+1/2.251/+/,-*,-+.'*(&"! %# "! & #&$%$'('$#!#!"##!!%&"! !&$   }xy|uvysospmrnvrrpluqqrusrnspjqquorpinghdgigbklgjgicbbbacdaifb^]`b__da_bb__bc\f`f_]ahakfeieahfgfeab^ac_ace`c`bgc_e[fdffcijkbdiicidfikkemmoqnspqtv z nvt y { }   ~" !~"  !%#''+)%&*.%'()$%#!))"'"!#$&(#'&'&&&,,*-',&-.000-/113,1)),')%$""("!"                                                      ~   }|xzvvqwxruuvqtr|wuq y|zz {               |~                                                                                                kiki/sound/bot_health_alert.wav0000666000000000000000000004072207644705776015711 0ustar rootrootRIFFAWAVEfmt +"VdataAC Qd6+ ޢmC')$$$stݟn@ek$f!,V= dM 2/65&1`щҪѶ , D'%2WbaI~t O'0;6,.,=-r6҂0BZH p !E G `y0\Ad##f>o f.  u/"cˆűBO/ E! YR42&(867W@^1&[# >Qܢ^nmF~^!  /S MS4[N3 &x&= 2~Tn_˘3 "|~!iMTjz@d}E&G583- 1ٮ߈A`q9 hSbC]gΑָPg ".7 +Q"%=>ԧ'^ n zF**.C).5Ŷy'K NE `^ ^qթDJy0:!:<8=4X#F\gM܌%Lw  H )ӈ1E]^22^:F;`$--iUFRQڟrԌ m /c%O ݷ՛e/4 6Y6 05( Uq YDRTn )k[!  R/&I+0 (A0gԾ ( D an$W x*-ܜ1F8;;=4~51)xsx]uh* "o pKk@v :OP."'6X%uN   0"%@[oӎotp 1:7388[41$qc۲c(X\G6c' 8  ~f}ݲ"9 &>1R)#f8v'+$g(}.NCn 7r&#w'|Ҏ͵+V$fg% 7;>l<6&\ %sBl; , K$Hq,q8l15 :%!! =m~6 (`t K5 q*lSx "I+9O8 36x"W; 0߼0 ( 4}bdgUUZ7!:)701G;--"?t_(7ܬw Snx' qыTև@B i#0-=?h:Y=*T: (xv1S` X bc.0 bsHHwBa%,6}6Q8|4" ޟ|0q  {" 7ϋA0Tf&4;!"9z F3Ge:Q@  4Fnˬ YG!b=@;F5YXg!vP> AcJI, 579ۉ%q= <-=68@7 nIg_(ݧ ri PVh P H%۲b֐S'8:)<1@4 "EWx#-UkT1; X 3ֺffYV0A/b::8 <'_sڂ Vv #]T 0PQxϢܵvP454?>) [QAD? $5xET  (;RD (+Q Q s F@` Ijg}D&80{6C'!g "SjXe(  t!*) qd mܞwܴέx1h0+778nC7/2GAj>7<- ]  !TNV *6.88 pP .ޙ, Lm  c !XND G)1108=&nS ]c K1o ,o P u֝cV706*&8+1 N Bp'^q|vbB] .Z a##MҬ6{'-572:>b$?e5k 8M y`q *j͞b3?X6 90/Bh)r)=Lb.d 5 f2 FH< a gξظ N$z4t;5r?K> +  nfs&B  @zoIE-'9Y+<3%A tkWk`+%q*33  4 Y:]Mtd#o64/4#E.J%z821  h! E[۔qթDk 1;h)o>wB|4 2Gv ):N 1 *FcPLiX#E8>5E:6xߜzNg6gn7?y"sI 6.:*;<{ -ڽh+?C k Q  (! +>qqִ߈ *&>:@lt`?.LC/8-J?59|SOj|bFX[O'F( gVnڊ9LSnX':/;)0"e# RT T #2*"xք\ؾ)[ am'/V/=6T0]`+߃ܲ! yJ7QQ pS&0+ܾӶٴ#P"?+e2;6:0'JdO=Cvv  [i?i7r0*7,B/7-!5hb:+1 {LM>2be+uP?*)u/5>:I/?&+N^"6H bD p  mqJ'I(.2:1~"|gIzH;+z X E-<0IfH(13=O:([!Ea?$A L l&p< d!ۓҞYm )9-n1;.l`\i'}BGB  ,94!8b#./'95|%#A I8<6 9W) f YNZh=>@% c,+C*57;& H P-7 Z8])TGU݆Ԕ ~K )1B3=":( #<p ~AC0  x4 > 2Wڍ1"i/,87"`" _ljsR :x{ CNz b+(b7!r "02}>jF!4('' (2ߴ-:w. Y}A+(ۀa$ڂCS$2/97Y+y%+Dh@ޜ!> =& sK.ٶp7"-20>D2$c!52g,Ptg@ Iv* _d8u- )*/X0=0!;#; x6lQ) FH u ; HM&.3@2B/]# ,|=%ZD q'+ m7Gw$9 E+.m4=b*W( 'y)Gs58i> 'j <zn hwsR]0s==*06At;'  @2dZ6w!r 8 >$/ dA'ԁ5qs-+3;+&n?'=6*[$>H2f*N B!/j2V8?C74; Qj~m$z V J6kN{  tFod #(.-81jP}~`1% * pa4/r״2c~?%22%9@6.H!HL3n H;` . P3IXޱګ)U,.3{8E)t(&$% t 85#ܵq+5Z8=:*6" hjkU| & qZa  t ajݺzVF,-,37$: {Y.EJB : wL59b,ձ ؓU1 &M,N35,=3M#?"=E-lyh X / G1܄iU$..4a0&?2 avH!=*2 P ]64tv<m -q1I32;-Z+C9i 6 UpY~fQݑی ^(0/6.Qh=Pܚ &V< QOn)f!u14}8?+ pnvݖ9D > i  $h!rcA\W{)*&31k:c3?bYPs߾ 3n pY 6)rZf&2X5q:S<(U \&%v Dn  Cs.ڼ> k'/B0W7:/MFZDlw P  IMjz߳S(1R2:9% L :] G_unvM J \ԹܤT*G*-$179+6_7>%m>C !GL F Y~'Jb +B3(3|=p7!!n8ee{8 0M 0- ӪmB *+0/5&$MB4pG* e 7>gRӸPۡ&*2a2>:f%#]${U3J|z#Wn @ LyB%ޕhwxu",*44N!  nQx ,B5[ LR) {1qW+w12>n6""\HOwS^V ` ;ދbb#UG*(1T3 ]  2w $6 3#Dէvo*/50K=3X". I=X Rc  _x Ԫ%)(.5"T C`*,*U {PI4%Zk %B,-7C0K&b2'Y& MR! 7[ݻ={?5K+A&-2kJB% oB2XEPK T1R o ,u2 ݡ7 "**(5d1|D0eDB  eZJ b(ڠҫB>It".c+656$ x6#FF)6 1+3<) ?f.&6m4W?-<]&" +THބ ~o ON;"lA'(*f,089* (F1nj |k G{ UlxڥCbB$//99("2[F%j @B q%(^;ۃE3d+}/0K8+0' >d&r#5& z @a{n5ܧܤs&/2@;)##5O pm C ]nTp"D~+}-r0W8++)Z~ڷ n d ~!5ݐչR%Qk_-14>=. @s- H ݛ b =!vkSEVU%,4-80/ bXڄ " E /6/nזӉ$(#b/(39?u+4@aU'iIT $0m\o 0(,.:y,])ݡ U bGIԘXֵ6hV%K36=?)!K'ZP>ߎ I 6 L$p ;~f _9-.68#6Wp0g; ps s~'!qЗxx׳U*Z13~:f0I8`8Ejo! F 0jSTC# LLqt( -07.]S& a~  B56!>ҋܛLO$-17T7 & joR:t _  `{Aiӝp?*053$'{ c`ZeL !Uܢ3$v, 2-8B6(("/ G x  :Xr+ ITK td&-)14%wgPfA 6_ d_]/ҫ iG%&,w072$|! CTMeGb_ E< ' Fp [}*;v1 ((2;5j%_\]Bufl% , ugѳץBO &*3:. "{r 5@F { $!Qfݿ `vj)"t#-'5.~ "$nOhY@ JBxoDY`)I}!**7\>=+!k#+x2lp/ gi KMГԯ3Ae0!_+) gH 6x| qL'C)7;21=ߩŪ]s ,O6]jnNYA ̳̺b1^=R \I.-nqDZY=pF "+2$] Px[۞lw ,kڼH|]yh8YOJ }v=j{chEB3V%, a #S9s+ H Y &IW 5 &t7{"v ;@ p 2 D TI/ yTy)uye\k | 2M<oazN d @@-" 7:nA]`=_4 PEg;c&?o j (s24u`pJUy  ;Bo*}i{w|o7L7_Qx)K X Q5t MlT+c-s Ff?O7b| 0  r~$ M_t7|Y~K;t_?& xT R  4@ B*KA N}QJRQKH   m-Or8#8 M > f0v p s /x>fH #<,=R|3"* {|A3T' 7d8)a5$dx,"w^btU  Z}FlBkQ)oMMQg?G eoVIf}e*]TcF V + 2~Pno|j/i%>I'tx+X05 4h,|:=%lY" Rdq  8rqiR$W/<=z#h]Uh; 4[R8H J uTUD*mk'd-bW$rRR R z C05>3#8]7,}6 ~uee=kVpcobR$rNQds6UD$<I4aV"#kp 'c4T/*'1~k0 i)82yGG0#b<1c8vgZPFsfi4\*&_g?R0nMl`pjgHueg"u1Sb9E'0"=/7FsxB-xNuv7lM.wi)!~uVYrQ+ `?@`gNc.-"7\& = 52D&o] (DI')n z8/[_;\HE#RL/# bpbUb<1j/<#x)M qN'Q n~hQ<#% 13& ,JB  zn`-[8 6x.<-%NBdUOHf<q^MoNA 7xa%M 6N8,Y' 5~Fe9H,/L QfnMo7ebM  f^MbJT0}B E{u6>@>?QOa"kBe+-u'*y: mS 3rEUkiki/sound/bot_jump.wav0000666000000000000000000006753407645053414014224 0ustar rootrootRIFFToWAVEfmt DXdata0o?__"/Fw69|k 0) 3ܚF:o\ 1]1.%]h|d#ը%Ҩ@m3!c4k\!݅{pa7 #lz0H 0\{-UɐW,[V!buO,yiG^+~1Bh?.(LNBѠW~!SDL,[O9l~B'aO' rFBxMΪu]yw@3)^4=EsOe8 6ߣu VtUOPvc*aéRA)jxDū̇'brU ±8/CnppFR;hqNS>ыLJnnHFǢ铝ǎ1] sYb0B]ܓ"[/Z'ufj6쐟dd ;ltW1 E]߯-lL}nnz/ރɑ[+[uj@>+&UHbTu I"(nXySCE'Ϳڒ&ÎrcClnNC[H&* )`gnWLqL=#찍 N;E#OzdcP]H:M9>ȩǙӵmؿuiHa8cQJNOFC'Q \!ĒMDHN_\USMJK33˫ĶrY$tK]|ZSMQK+L6| bۥ϶౿>{a$$DVZSNOM_G+2ITq.p KִV!F8CKTVGShOMNiDZ0~en˵$Vh c2EBLQ"X%'K)L***** )O'$!u(V -V_be/yݪ ܪۚAܸ[Cުߙo J6c- U!Q#$q%%%%%D$B#! 3 R!H~1Z ^KW2 d TEne_1CtL  (AjF-xldpEqyZ#IhMn)nIX d)p *% )"y8'C4tV v~<{+j>;,&5\u#&G1.(gI Q 3  d .Gbe_EEe>jsFq akR  n6uhVM$(X@)anD+!/iL4v2NO"F_9:y , 4 CJH:(a. P;luFewNMq|I u 6 lGc,4ma [: Mzl<  3GQc%j1 &x-e4 CkLs   & Nv>C n<-]9\t}sgbR7s6OV0#E%r p idol^L>5*  )18ATyP]}+oUKcE(++-J.j+ff$P9El2,E<^!_< R& e @  y7u1[o1_v; L!(C]t~yy}mX@R)cu'dYyzgj>\Z )  Q YFyP|w (Ic^js|y~vlcM,hAzJ D:Rk*&4}=Vr2 " . @ 1 ) " Y/]iC}z1 xa]VH8C?:fr0%C_ u6|L oX;& 0Rz"WAw"ad0\_$~2x*,DlnOxn< o?]> vb0mL0p^R"`4lG  P & M >LAW@RME5u8w#Y)p  '9EXYY\K6',+T"|USAY2YKs({($5EDn E . } 4 f |  C[}R} T\k[@g{E~*bq`1$Uz!v%x"M7T{KxZ/y`?% >d *@Rl#]Y'|?j F-vA2VI)|Gl\Hh/eIv;/ Z)dMeVK&V{=0 @ 0  o PN Y`?8z,l(j*R{"N|;XspQ<*( }TE[0 q=W7[l#k&M 2 T F |  f %ver"NKq2Xh_ml)D<]u+*>g%@WX k*]3hKz0w+h*h1qK%fL$|s}uTNUR ))?FIY_~/\|7[v K,_-\PX#t6p\V!j VCzKCj#v w4~]+pP.i;zSLl(qH 5Bs@pcY G 5 l P , h  E l .hY/[$Vx!M:|3W#Mx-KD\   qT3qC KLNx r5`3f  o & Z W  q % x 6 uZuw!~7q#j!SwPHJP oVV/$/BPj-8\q1b$j=gWR|+l<7ZFPNDb:{5w R@u QVc0i#U*j1m:Gz2_Jp>`-q 6 2 g  s < 4 f 9Z} :`:a<o2MGh#=a*ANd|{  '" oT;"@ Kf-o'K~,b5 \  g H D 8 Me-H|2EC~<Joh/g+]+Xj.TLf, T8u6r>T\: q4\0;{[(o3]!rT5nJ yfPRI4/Qco"0O!@,jn>y:/i8>|#_@ RKL8w8~EAfME|@})^}8i6m"P~UR~YTz%Q} < m  C t  i  / Y r  # T  'BXx-?j N5l Bj<[z#:@Q !>5+-504:1xkGyN0l7>O"QZ { ; G  j  b >  _  }Hav6_)"s7Ny"fORIV-a=yIW$Y1~EcAx@ wC!k@^4JfV:e8pK'nS+ rAq`S?fQ^mlb\cyvomou 9So}:o9m;gPT@y K KL1$lm c RzA-{PD ]["Z`N,YE`!;S|)V%Ku?f : g  > m  1 k  ? : G z  ^ .Tp4RrFp&Fi +>Y{ ?]oz3Fw|zoX5*wL?o^1d;z4 a(> x $ L j % t -  E j5K@AQl"< Fz3a_rEn*o: c.q@f2n1Y$wM#O$i8Z|cOAl({c@dZ8iO5od[K<f\QV]S<6  %,(.6CW_m~!-:Z)C]L6u ,n,lR~ R :x8WZKYR 6o:t]7k-av G~(n1a"VjHbJ>l4_"Ro 4 S d v ( M W m % V  : q  8 f Lm>cz)APf4IoHecx<bn%34=&,DI42DC nF7:wD Y,iNe7R < { X - i % ? W  Kj YBb8<\&_s:nD c3]&Ig9a dMP g9L*nL3_) eM%p],d=cVAzYG/s\8"nPAQW/ %8Nk 5Yhz!9bC*z;o_/l H T"fZ6~(^a6r<2j+}3| EJ$Cl8m@`=a7Js 7Qt =c ! > ^ u y + T d s  - A L X 5 W y  8 A ^ >^lu&Lal,Zy #,Fp >ecu 4F[jjZi{skd\dVt[M'X6sGm-K [ A ~ 7 h _  G s,\Sx/o,8ZXQ P? exDP jv<oK}C/tEjI zIl9c8"iF"k?+kO0qS1w^E/&yaE:=>2)# !"*2DUVgw ,Scz)P~ +P;]4h:z"Z_B:F,g3s/aX-c6o*p&a [PuV?j@i!P[F[ ;a 5 a  8 a   $ ) C h : f k z   G i %IGTv +,6Rq&.@n)ET[in)3-6H_ppxndX>()"!~pU3~dH}lAV@ W  z ; O A  q *  q$YW|:x`Pr){E ] 9 Tg NW/Eq?rS-kAy`) r4mAcN8~]0)dG-vo: gSEz{lT81=4BWwzQt./L:j=o9v P X:z6q.i3p OR(r#PSz1[ -_*T|C~>p5ia_ :g*pcQ Hz:oAv:d*W!T&Sy @`q.fK Ew>O_r3Ur  " 6 M j  6 N J M u + B V v   < : O z  2 6 P _ ~ 6X\w0?Piv(15Cj)(,6#/CE:G`hwn`OSPWSUT, tN*.eBb7 v I  t =  m Y  y I  Hb(V.s{QM'hV!Z zMsKZ4 K}kHIoYjR];{V4 tG iT6YA/ j>}ihjG5{_P?/'faZa[d^YY[_aecfk} JZZyz !(23FZTbqu~pps|uzPRqdQ>FA5<- tX& vYA* c S $ M  O % M  h =  Ci&@o2d.n6SGw5|?d;\'h!}C(oc8nM,}Z?_.zmMjND'jub%}rR6/tbI' vVB-/(rYQF:3y||vsf]KGC865<5L@8:IQ=%4=>Pjqlo &;Pr ,Ip;^z)Nk@AzCs(n!W'hGz)_6h> KwZ&V;`R/m*U'KYcj.C\k)R_lm}%AMbz 0 : R j   2 R Z x   & > L Z u     D P c   2 P ` (?<SP[&)+)=HBOKZozkozucXL?'$ vaJ6  n M l N  X  : K # F$CR q9Vi=|EX${:~6p;\(T!oEk2dP#wU1d7tlE&yfB'soc:.bO=q]CG<xYF:2)q~]XfNKA15+#$$$#1#",2=G@OLTinq} 2I 3S"9RtDkRvH@YMw#]$[B~4pF3o1h_ @e3W-Lr;]x(Ov />Rk 8Rq  .Pn  $ 4 W g z  ' 3 C R l  = X ` r f l   # > Q f k |  $ , > V `  !*6GVV\jx}yxmgKIH<92  z I 4  z f F  { b = \ / i 1 LvVW"d,u>e,~>"yBn@ fJ#k3N$xEW9 ^;O{iG(kLC:(}cK8! {_5kYdN$rRG7-,ncVB(xhm]LEMG/4))// 1,!)-5>:FEFFINYjlm*C]q|nM~H~+i*`&Gz(^'YU\!Qz(X Y(eBh(V.@`8Mf3Hau&9G`{ />@Mgs  # : A O j     0 K d a k }   & 8 R _ i e c z   * / , 7 I X ^ b X X l x { | ~ s | x q O A N K 7 -  k b L .  } Y H +  v W 8 &  }RY# }AP$g/O'kDl:U(s9 \0{Of:mO/bP4mO:)zcPQ;"C""ocZLC* {c_P;*|hZbR" ~sjaWIG= (-48C-.4&:GPVIIXe]q~u /GXi 5C^y ):Rz7Tz/h Gy;d7V}2g;@Vq-S{(Y -Ci-Y}%Iau -Qa|$9Ndnm'/@_lz )G[cdo#;LUagcy    * ) E S _ u z    . J M [ d b m k ~  | j a b ] S >   ~ h K 4  ycQ:d@'qS<jM8kCV,p@_0[)Q# ~aQ3p\=rV8 ~\>$}TE>+ aB3+`bU>8 }s]TH  ug\MC0 m^gMEK9B3))#+$  $!++2-i^WR@8&~w`g[<6 }y{yfTE1((+ 6CE_`v 4Nk15Yx 7>]z.T,Or;R|Ie~7V >d!;M^p+GMf6L]Xno $=FEPXjz#'<L<=W`zzm %);Vden   .>OYlotusywnjj]PE,oRI'{jR+zM)m\:wf9x`G5 }aV@%oR5<$uR2 hY@AwgZ:3* ~q|aI:46%zff_:*{xhWTNOA0&qraHGFWG64,1),&#"%  .,:T`ffilsv!*8.+*1ETW\cjypvwztz~xnhm\[UMRT)pj^J@"g^F&# zcK6(|eW0XP@*{jO4#fF7)xf[N?1fIJ=-(}ok^N31+,}j_YRGH1," ~ttsP:A6:8ylys|wnloseguuemrul %.9AWlo}.HPd%?Xx/F[ex-G_Zj#7Q`m3@lut'@AGPe|)$(/HT]s| #%"9<LT[\iz{!&E72O[VXfdpuz :00,0;-G=B^YVdoxlcrqsovxwvv~{xnpwuvsxijsWX]V^^FBFC4$+rfbTK@% hQA/"~tbSG!|iJ>2$fQD"vYN>5'tfeB)9/ ial[J=:91( qjcOE@88=<*oaVPQCE>1/& (9:KQhot#,+Aad|+Re~2Aeav :CXiz,6EO`lt!$AKSYn    !:1QWSMGn}   #/@CGXIWTN\ildmu  "/.@E.4@@Vo_Yjtrgnz{kaFY]L;A$($yjjN@?3-.scMQB4'x\LFA> }o`NF1 ue_I@5/(wgSWVJ879 "rdli[TTWW@9A5$  yobbaKOI?A-:D).!, PtTi} _[h{?pul ).Ooh/YKWoi{  3,>IMMP\^grw~}yx{wsuqiopljpmd_hdfeYV^ZY_WYU`TGUJMRDGC:=H9@16>/-,".)!& wx|uxpald_]QXR@NMD@@>9*-((-'      !%"!# !#%#  %$% & $$%$$%$$$$ "+!#%! %%#&$!##!! & "!"!"'"    # "                                   kiki/sound/bot_land.wav0000666000000000000000000002511007644706000014142 0ustar rootrootRIFF@*WAVEfmt "VDdata*/AxR p'i4)NYuOm R}KsHv B#;t@hl  j87   O628Z%iB BO2Xmuk> %.*$^)&)W.ƒ"1X8:1!f< ߡΨ~B$ fR<Ղ9hO_Ӛÿ xH/ s0V1U -(`0 *[jAe;{'*',)$Q+2-" nl ]|n Ij<_!8p=CFE .'X2% oxn B>Sw (!^i .OR)05B=A4N9䶳5(HbN[O4M-Aw0('~&""E#)q# &pA ÌCom1˱ մ0B8ݾ<,ȭ?헾4Թ$QiX qwϛ^U-i__zz s+ijkrGuvn7bau~~|~pBN0'-Hde C];GPB465%z+(Nx t(Lv ]|< V   * t7mO' ]ac 9 *BgE[&053#̮}[?RUD-M[O[OE4E(&1$5#!U($%] YJ, cI0y ưη򱤰|vڞ'fpf祘QRܬ( q!Hؚʺt06 Ao{.xl[hjnswsf_ik4|JB}K}SwY51))>^h~T&6_*HL;1(72#{ E;ی^̤m6^ЌKMbR=́՗\RoK2FZe` SF06LW9XW^_)EM2''(-%&{.B$\g^V-&>MyY[Oc:)2tqԸJ]{Ҭ(9!Eݙ(7P5}9)?INXYVPOTZ^v`a]VjOJ GEC6AV7*F"2 jߦhyu׶בN@?fɑ¡A@4thҿλt 80%Axާx$Cժk| (֎۷}s ba[E9]t4wC&q'0S a RFt f "-0W1(#"$n,h4ARbkCojnk>llmmjjMl&n1oom/klkWfehxf_&Z,TLB>AL\SwU=UsM=-!h^ = '%r$o b0ƥFL\w;j&hc۞˨깽x/Cȸm^8hXg[7+bu$-q21(,T (w*)/8=9U1-Z&{":*1.110(""!3&'~S j 5 IvckJso Z E^VcՖv`L{{~kQMȭz ܥE%$V')+&*%=#g&/? 7."}Kx)x5@9͐ԽW{AжӡQW=Ny͸o_6 B*?(%17(A ""$!H s"@#? "4& ##  l>=Lg[>k R5! ]w [# )#B Y s PxTN֊7+lCݥGES|4cOlnw=N+w!y ){ I.c $.&*.0 34V0.+&ej 7 cM w Z  9 atFl  lA< [r < 1 "|g\J'߈:5sӥ_M   =SuC+[:A>q ">""4biY7j +9#w),+$ l(4G o  `N*^s[PIX,t:fL~# 4N?9{ޥSDٽLYtVކS>ŀĚnijEx30]Q[!ps"+~498<==<|95321%00i.V.-*$1jbB W_ ' q\b<I %a ##"6= 9!mf &N $'Y."iZ@Ӧ$Xԗ"vOrܘ2 i.u] h} FasMҶ Ѵԙ܂{`Ynn4ۭYɫtĺ.Ő!ICJ HF_"+~49-<=&=<9532"1080.[.-+&  6 3(N{~qxJ##"5 #!Dy 8]j TLB2xȵ#u%TAنحjg?)Kڿm,\ ) / sk +gk&z/7>?\=:4-~((&#q!C~ (05\7'5-X2cmbցJʕ4 O}{R )яC4cN`Im 5 p twm)/120. --.-*l('&$}#g^a c02 !u)(X`&:crmȨ$-;qBj=,ۀY!̇ ؓw4ۜ۞d*d T  "O!hLN:E Ch Z e 8 i p&H, l|  !^#"j  4% wo  l ~ Vo 67s?Y^KسTMڃر'2Tنp H}}GGFh~IVB} U" $<"&,V#e,1^0+#} h4hUO, ! n_73 @}gP'U1;^n;z{P2 yHd=]UZDXC/] 1K/  j' uyj  d 8 C Kg,  [.%YuPTed w: m_4hR bgo 1 N(\_`# ee+ -;apBWpfr BftplIAoNc_Xp'P$P$f@ vq~G< t} Tv " 0+[ hD~I 9{o W  Iym~(qx#lvZ .M  R=)! }  B/ -`~n)8\. jzv5Qqo`9lH mUMymW"tX _g+ $  `Wf " =3*j^Q4\B IIP*H^   jC _a @ { (  C~ &_LK%-Sk+UI%0dt`Q^o6.  ^g;L(1Z g $?f =bz \  k (joz2RiscCF4hrW}Nb!%1 "FOltnyThlla0/zp;k:OL`'8]<|itY]*pUmw7 ;AZ e!B4 UquMMoQJdFUNw *X~O0%t?Q35V.=(8^1N 6W3FJT~#vM?*}vx{I~{wl_<BENRSRPR`mrsqr| *;@GNYaekrq}{ h^XRI4 rV=2tYBmI$vW;Ws>s'b@hQ.+e P)T"7P1?9\ue^~~w{ 6=GQUcjzܧ?vڙ=؀y's"զiԏDӴӁU,Ҭ҆hM*ѴѤіѓёчscVLMZbaWPD)ЪЁPϢYSι1y̖ˆL(T/F-&e{xZڨ i6WybceQAk@=;Z:/%iD  ZJ):FyOFVqF/ ȡ;Hf(8.AED?6c)R  zc{ `"7+1j"4&>~ g$('#g 9O ,S||a c \ j +O%DM vo%b v>mT    " C t P\  e   m: [a# I- ; " 9 PG B o/.v )Y   1 a@pwGK  Cgi 4 q 3O! Kx' Nk E)A t  E   B  ` G d n?- b7 { 0 q \ SYI3xWsov 9 Hz   s ?|  j,Y9 ` 6 |J : O % 1 N v   oJ|ULM9MJf,|"!ncl~K ) *  y C + H :#RcJI>bD"t' & 9 g T  2 /A b X  c| &f K  / O   I o  l qo@ *v S M chX t  t l j ' PD z  W f{z-b 'p2m# 4Cij= wM6AmQ f;#Fh>0"5h }0!1HfV>W}CCMm/y;L5Q?<,0+0[r8 @ SA/ K ˯U"Ϩy Ժ_)]W}j~oRy(ǽOׂ#0@B0n[|:y d p{!\#i7@ % 00 O*B,2'cNv: .LVqo M G,g;7mx5gi+wM XfX Lz6JBO&-?tPZ]lllT{N\1z;K`|VaPJUrMAz$TGyH{4[4q] +*Ol@@F%SC ."dV/wq+"'A^IcWP wf[ 14 ( Vr^l3X3 a=LF7v""T}C@=!a]fHr .T-{&@1wFQ{GmX\N/^UK9+X;7cV{0OG)aQ|NR3cQ4EYa|/m6i.'3JJRb$jM(A=ahraynv=NEM7]d 'U/1_>Ns5H|-?bs-2qUI APJ:<#RJ) Nm~T5K)Be $[hhE;]TIl] f)t+BieE&lLO^ +/^KX&7Hwv{eg5_V(`]v[ GY {^yX ) Hu`V$3>/kP4I2j~d&f3^}NMfS-ow"$&s[)`JvP"M$y mNS|]Oy}zZ `@ yV'!s$7/(Ahݚ ܌7[ح״ֿ$Ԃ[ѼSmI_ϳϞOC͂w͗<8͌ẗ́Ͱ;bATϕψѝ%\=պmm!ړBUݲުn%;oG :k {vR}! `EnVFUcT{$> {Dqv- 2 A5!n$&(*,)/1]4 79;=?@ BB*COC CBBTBAiA@$@3?>KPHMe %'`Is(TcJi1KPB940!xN% Cb D8AXZ6{o  q F ^b?wn"ru'Gh!CPD=4$@S7}  FOװN):$}]'jDjpSQ8j))'[5DHPRGLUs\4 ]Vμ%'^w|_GŸ<$^.eVl3jdggaS>* <!/1 .:&+[B6T \y1::1*$5 s&3l1 (vN6!b =ALmV'2@6Tnk? $ZD OwjqIKyaV~)k4rsp5 m4nSrJ*O<Er]kCG7CcO$.\lkDxC>0.";"`MHlBv  g 'lba+  !wk b s lc      P -O }  X } m o # 8R|"h G ( >% _I6ec}'S6%:"B/J. \ S  Dpm1=/>Nl1l%sH0uw \'KlR m|$\'A<@XFU V(xWg[Q-y #cG|i5.;hOFQ$uo)U?>z9k* n:f=9tj2oBj1g$<0[%$ y5tJjFU-iC)w%"1 y)zZ2b@UiAz8qE#tMt'qLUYNc+tS:vC~n6duhB>XpKN!_UvRnug#'V"t,gOgC-E`t/)0 ;Lz xWSz5nCyxSG7<.eu2@kcm YdJ)9T@%(@H1.tkW>g [(b'|zirv13h6-E~/|8R0NaI1NS 8n{C&8GXriIl7}^R7%ZdqI@1`zF> '^-wCo,u0,vX,ht 9vNLf%6YZa B jr3D` |Coe[A4A>5\dUdFyz3EX{I|ft$+=`3 Z?~6ye9A. ~%-0;n%%m$Z.Mdv `(CTN^_yT= %׾ˠjGW![>hGG@E1 yp'ѫɄߎQ%5U;7M+Jqu!+'$p @LkMNR  S [ "I | vdq#T : -E2<xH MU: TW x\ @+fW" %~ Qz \fhRD.4i^w$7U$kIY 9 m,? $ug)l%q \H`*| a0A7LEpQ9y,p}=]YLxu X-QxW;(~p&BWE:$m7:#OlCI#)>^"Uw ~ WSNc5tjy ^/ j7X;^d=";(|[M' [:6O3|-;\*Igj'S{^h;>] P'MgH' IUKuzr@cU#B tfPL&Jw{4[1&luY;?:CZ7A6JY;l GLjN+7D+IQI PXTp_yp'=kMb<@&QP-zp--E'_yZGJ2{)ECD *bb!b 29SbXB,  [H\s~eIDtpDLYc4E_\F.o4P u?IQo2f3rZڴ;߅巖> ,vqS[8 Ҧh'l:Xt}Xw*b--% y",n$ #[163&&9] =*+):&P>ց@<k ^  F $+N.R- XcXxTxX xc$  LD !!k s9 EiAy;Hdn= h  ARV @  l | UkJ-r W [ZU=j ) kL Q aDWdJQc G UN'{0 SW/ = h fW{ciN, $)s DR>d_[wtu5`WK(XDuZ$m'C $6O^q zRZa){ANxEn_*a\b@/:nN 'Mq߁e6{6oa12*a T-UKR%&Q .5jv)@""S>Dl}E~#ybUoEhrC]w;rTv7Z/>e7\} z= M8-1_-|1= mdPO NT"P{H~c-r<=X u ^K >S]U89BnE*H%:LVQ \{ +  .3}6oS1hL+LfF_  @  4 I  Z <c  x y X&Ta T  >R :$lX4 ZxGwUkmZ;qab u  } U  S w W \cG H|u#b}I] I=nqs:.:pz?Hq7 H*d00+o H ?E }  Q 6 W S B f ] ! h   x7uiDTx2KL[T 1 VA'\hGRK,m6|ni8#-n-E$#4DDnJ@wPt #Vd.,;8}QG81 6FCp F'1i{tJ4# 5TbqR Yp+5"O S~S.@NGEetvF|F)6^AjBE8b ?= ^64f{g-) b6T!sBEll*aVTYLEXoVixyM1v;4717VMMZ;blqUC0TjM G*)CF?cfMMZUYYO\C 4eYMrq[;tzE& RwSSnd]}nSk{|fektskw !"FghHp`akbL:.(27?Kg EJjs A͑ێM]C|c!Xtle1Pu>2 :1:=6,JH1ݩ֟,{!g!_8mcx %_C L'G)  qJb%;K$  497 O <twM_+ImIFp(KAXLf,x^ah8L`# !DcZ &o!ix B7Oy&!na t#Z~\3(=h-01M^!7,8V=#@0v\bKA:(y<`A kFT5b3 2@+$>^O "vq$:'VP=W\N,<a:QAHKr(Rjq&[Y,0IK?zlZ72Bs+}xLFmb$ 6HB4X_Wa}zP:?ff#Gx`%us 4B%rig1BO %4@)! #098475)%  %!'10/)[\;^Gf3xr'5}dQU]HDhEUN#5E#q]:KC\G\:`<+Kr]H:,wa 9K|wp1{_JsP %\&88oWeVK{ |"G Kj13ec~ mp DoNHBPV|~HVrS9[)hW/Ui\q ?|<_O9z\z"&=^ 7  K x\0,'1%&im]|]B&~ Iw NDN6 6G n &~W"B/i_:!cGMf.CR.WBk1T]Lߠ0-7 Xj%h^pa0Wh=́*{)h c!Nù`3|Ap~B.r 4 EBgd8gqVO[pK 7'=L.\ueuUK׭w {oz {355-S]^oM0 E ]) d 0 XxlZo4.4#7Hzy~ye{ RA[aCpUw 1r~7YeB2hsh&w'tri-jdG[ErZY*Hp7/] 9J?[y(?)m__SJ]VZ`-\<@?G_0x BglLz_q,Na4D%Td2}'GA4!{<$:/Gy,)1gB1rk^=X$[B=wJFNeJIz<7>vS Gvm*^|VRzdYH(%(#jW`~>W[4ZcB. Q1ViDfdz<A~{M"v&gWX:q|C-'v  SzeY^A{tyITQ[k* 2 4 |fvZBJ,i;,Xz@ + 0 \1LXnXEliSmc *ZgEY~    v#87 *~Gm'i vIHdW~F<jl73%4U >r/pCb'jFSs%3~yR)JY; \a}Cntbk\Bu^J#DOG4'>5CB'_6NZ4-4%WE4 {}yijY8Wc?=I:NwYk|R[JL): [U~bhA,9I& x`F@?@>FdZ!:>3 d{~x}  ,:1"#*$+@>UZ|z\cjv|kvif^mrumXjzGYM_29-<3GLG:J:0,-?<=.(*1 %)  /# 8Q($,-ZEA!0:  !jjwcf^kvs  D6%- *#767Yn~gSxu /if\_e}ywzt~~nkPZTliXamrqXSY_[MBGBD_7>>GNJF("<&?8")*!2+  /-%!&+#ILdcmmUggbup  !gZWBLx`^R\qs6MFEIGD_M[R^\hFsgdjft_yoiuvR0:I"$6-pgtndkhdrka]Pk.IOE 6 (   /NC,#,"%(    !Z5 0"#!4C-&,15J;"#LpVV\6D*(+.7C3;C* 2CD*?$;FL=CA'6.1")5(0+1%:3A\e;/<J9M93 7BF?/#-(* #. !" ~~d`skrup]uY^RSutqLs{rzw\uxthm|w}q}faIK[h{{x|pse`gMH0' -.|`ahe`<"G7JQg>Xw?H pvfU]ott (-@7./LOXIktmo{t} |vt|mO\qNTE7-(.$!      #*&+$ +:N6;/8:Q8:F5SCCTPgfnozc]Zuqkl{ugjffxhSZRlfGMNXHTW?EMJJ6AHeQVANOB=**/+7 .-!%:*$    "25)&.@7,&% !/)3!5H:GNTEMR\~o`ou '.83'?=GGMUHB>=:<XV@_X=,<M%5@L6<81.<1(0-/376-B)>AF9=:+05:-'&,'     '% &% %/4!  $ (46)33VWZhi_jalzsvz{myv|~}}y}}xwrp`guprtur|xwukfmlqifb[Xa]`^W`Z[\MRLHMHXFXZ]X`_fmpkXbs}prT#J]pmVkbRZ@XL]|"([^[sg;AM0-! B? 'M*SGB' -uyvuy\8sNP['g#- ! TO-dg#& 2V pPK?|M@NUCs{gYonYN GB0F9L`Q"*e}nfVGZoufXu}l  /1 " &/ 1NEH; '4'.,  #' B8P.w;)U92fF$,J#!V45piWapgdeXqtHlZ`yJi~}GH,RgUhIsPWE  *sqc[Hz  ;;e.PL2`{d;xs]GV4[x$RmV^\F_LDJtOP/p^` lOL4+5X|~&(f>6R: EGL`D8RL KbkoMdphN)Uv&0p9];bk?x~EtYc/]Mc)qK57(Yu`*il0~, anp6My Mp5OJ >UL<gJ \M$~nr /TJn!1jUa]&-i7#J%.$`EW$f 9 M;s 1q { vqt -Bz]0* H ;MmV%UQB2D}.h1LaXyiyDg8Cqw^cc'FS:hg' %HQ L,F=~i W~vWpzK- Tu~JN>S?E0w RtmSV W3|,#@6Yh<2]=*.t*kfn?3i8Zt^FktW Ysbf,R8cZd?UP m$VhOwh1H Rs^pyQrE[& .Czh^Pl!?W:kA| qB'z:eK1U>f#|=* ^7.;4\|/U7zLDYdz^j\XJ . AK=_|b`x,-KN+,P}HB)Fx-/C)/K3vxH2X?(vNFS&G` G0[uCgxtT+vn iIl;M#}f$X XtDzDIC._^$ btTB +vekAsS :kI8Qi 0&_}y Z:H3K-1R!0Z!={<}}M'g/Bd"|*"gYId*Z/6;~!7P@NS(?\ dN8{5WP/+T(y%dIlvG9B\'Ys%JT?a4.g$X+kg '~u}`C yE-=VtpL{'BmQ%mqOO#!m{Y"&7+RH:FvNqH',6r%^2{u%d .svoS@"N=k'^A{ptga@)T\x\rRX:_Y'1R  mbGOojM$x<fBbZ<nI'" t >AHHvr$ )itQ@WONN09")UohQa_S]aO:;/G_:6'wwlalxw}u`|qvd^KbUnrW:$FE,1 /0!'3  !   '(07      16TTR4VNQOL[JA9P_bh\YQLWsp]d{zu}|r~y_ucimnxZcXY^fiY`DSY\kL4?LX]-.+' .#,-*54>.&98]kUJJBT9@[;=*15)% |gt3I?'H-=2$rteXfU0597&4%"m|vWfXihYIr !)"= ($5'&7CR[77N=3QY]e.)`a+0A625 81'<# 4ux>CMvV ;Y>- -"$%wkR]|u]N-0;3"Q>+7" %!G\=7   &>;95C$>@:)..6/@;!)5C,Ffpejmio:=$G3Vc]qv{|TQiw(  3?LOg]ijsrh}|xglikx &# y{~uu~grdPRLTOB?HC-/)(($& &"#%$3MA9B4P>>:BMC>RFG@=L^oaT]WiP`liqyvc_EWjhnbf^Yf[dfkc_\PZCKPBcXSNP>.8,EK2/8.+:?>ED?KH63;2<5AEM@=!:82        -$<F1-39C"&25+%.,+0- "' "' -+*)B<NPPHC?2>B6.&;7OK7JYO=ZYEEXhUVoYObZiibo}qyr~stfcgeir|zqutuioj{vlihjc\VSYJ=O7<>9163F5CE5C?*$tuomnsPKQQMKKK6K?!(!)4-. "   !!%%&,'6'1775@GWKO>=PS[OMSaffjrtx}t|        ! $(%#+##$&*4-%%/+(1,+.))%"##%"   LISTFINFOICRD 2000-11-22IENGAriko ShimafaISFTSound Forge 4.0kiki/sound/bullet_hit_mutant.wav0000666000000000000000000007752207644706000016121 0ustar rootrootRIFFJWAVEfmt DXdata& !* 2 G?wDpe*QTvG*GNuV,dJeVR.|PVe<4 m $  N` E]+{0'81$ :b a\k#2(k)&U 0D( ~.  #8 'DA7,R?mfۉB{k.C/&& l$#k6q"b, ~xL߮ܠ{W!hu `!k',y EܡG (+;g#Tww ϑI=e"0 C c?8 tI \ #؉@F' B. fϾWX%m6|3$D<ķ֌ sqC&2X  :H$d2yH۸t#G'۽4H 2 Rӂ4ںښS !3 &YVڸރP C5 w zQ  ~n0+-T"Rs $0;K&Z Yډ & ~ 67 %"! F )"Y:,-e:6f _ mPoc=j#+)}%u !+)mtz<5  eX  w#tEܩu d=H$R\nao݈U_3".Tc הo!%~% -Y kMD| : B @ T?(P} &C( 1c0% >oH-x T QAMZ#hB3K VLa(54NWt^j& h~;f`, Wa $B]$HNC%& 7kye 3 ~M S"m 6.y paG(4A#U+u!?A  W\ xQIj9 ,B6+( % ;`1 KF"7=:\6f.)%W7" . qm UR 9  n(!!-Yy9 2WP ( UJx7{15'y 3CU/A- aWpE MG+9Q z TW)YgG  _VL K%2F 3A \|L'^͜d9lE\T 1ZS P4fE߿%"z$}K! -D#2%!Qigmm! d eiS3*m^zifWH 2vt d5  [W/- F{Y O8%'?.FlF l K!'(X$ $g$lr ;N ku_ajF' & $[gz l"v%d(3Z*F %< _$X*Q/ 2"!'#LLB 2  +V V:++*1T74!+ bK4&)b)8"UeAwW`DQ6"O '$&z }un{@< {79 x #X~ ]&T\I ]=?\X%?v*W py^ -*PtOS#$IuArډmߗ~ (@"\\ kvޜfE)$9\>.~$ѣ|9; >C6ݶڇk]Z߉ZDbX`^!wޣ>4`6xݵI Ps dB1/ ^/ $ Az<t$- o% E,[ 1xD/!(%1   Br?i^8l"3d  6[#'!< c} z#d>HH $~D`:NAGOG߻88@&!W%ڏy8ݙ(@)m֭J Aי%s ؊gjx>֊jTF;$Xg2 -@oٲ@^ sqjHh ٍե. f[P 7gP"]FY *~_  k =F  X  iv !,$/ qj 9  y"d!N/4 j k7e"='E-% #:+9 g7,  ~mJk  a q  bGJP ~D6EJ a @a /]tJ KK|dVk9AQW #aV L r_6Z>$3 NHjDS =/*|8DJ^ >efG RGF m ?{BVe,MseL~'VbdXGR&'Ddh?wK &(+pebDoWZMrIU9uv4\$l~i m|jt]. qf_a( O*3 @ @ & rq  WP! xH 7i ] < (R B''.e&q,Y  ^N8   d iU REr Hc1lt[WFCb w!'O  :o8 b  ?PXT6S 0y& 5<5 U5eQj  e ErT2Y$  /7 x:^t~+ ' B 2" 3`"u pb$9`ډY.! JBՎsxOO fOj݇. XE ?~.,8 = z 7Ba v " S"#$'J$gJGJ"y(- 5q uP"++;I*  ). '!(""SJ +4('(I'.w*Q!&)# XtSH 2m#9\  d $*24 'p..d %O$$lQOX( / Ew aa 2`x! `A 9DVdtX9(2gq6X'c,?^ cOE,ܤzXݜ+ oGI "pGUYoOpYg B `a:!'$)]ϬwnBߕFvb::CU'?+OU= %G#Ob]_ #! JmDR` J! C+ = 87S#.)P5a S D ,g3Kv .L8 QSF  8 J  3%}( <)c .+ 7#G ^# R3z n c[R  8 ] $mQo G  ?'Ek _[F!gq;^ ) '7yen p[PFwwАMߔCѕ[ܱݣFӨӍ*a%'qB$:ϭY`O?w-`poR93F !* q P&+L,m$$: $@ +=D 1H72027)% ,s#/q. # JL#%S)V5+X 7P< <{,/ 9+B#.")E { |",,s4z<-'(!!QH(S g4!   @xg 3/ :,/Oc K$ < !p,n _ V -;^"b7s W !V }C՘ ͕ 5 l$=Ln{4n o e&N9N RK#ILQ #  mS'-=+10%## V J4 `K8 s q%e <gj\ N gpM( H@WYg:ciRMF cLLXJgnN+;-9EN!6H xx`?px]?߱ܭq?֯,ȓƥ*v܂zU:0_/ bw]Tvzݔ BߴFդUU=8o (A4\.&>U@XQK"\E!Y"Vvr D1  ; m  O+X&= `V9 W," Kq^ W#6 # a1/1y$G#/3&] -K%*=5l(|();*56838-<()j)*F'!&#,++02q2>6x0)&! /8,-0_#-97&7S!>52=$,90WV/247Q4" $"!+z.%,.:&XF('>-+  $'))7Q)v)'l"| wb)\('xm)0-q# #'MPW M H `3` D q]\Nٱ5 {? /}lE$w+g c- g6l`US%;Δݴo:zGv"*?zδlH߁"jV! \Df{ݧN*uG|9ֽޖD)w)'6ϫW9GqL 5ـˍ lbHoUN)T J&  5n )[vUܤ دO # 3` [m{ ?O \1  % * ]QO0?:B*8/=!u#8 m.  S P$D ,`# `$/! 4)&p+x( y!O 3##UYm AsX\A%G \ G* w>ZI F1.B :\2+z-(\(Pv) J(G`< A 6ΓZ w/P =GE' ΀1 r4A Q7[ )2 SY* HP3f {ݥ(^R [}w_h wm U  vp"at" | y"IP) ),O"p1, k^,(  9=)?"#)C (0$( %wqe$#&.kJ#%`2[1S5$"#$z " NC \M) UjM I3  2 24dE) l Nc{-? I7\Q?SVc'YZK=%qA:H(ȋal"{8؈[0ԃXоN}c,jҡ>\]Շz`:8<ѓ`uԯ֘:hWǯj϶ *e1볻N܉_"țӸζ@æC2`nkȯڤ/Cާ;Й0ԋߒפ"gߎc'Ռܫd؅x a3{ۿ5,ޥp3cZu~ӿ@HŷU~)&JQ/ 0>أ DKf4H.(. 0U$P<7u+ #$=*'&4=UA4#$$">y,3M*3<>7+7,1}5:2.7fRL9T_gT:IXmS+T[R=5EuD'>JWCRw_o^FjJNBa*/yZ].YSGCMP@L}\?(HDbBR!JWb_[WF(&j5/4HlaF:68FLJBSFOHFPIv2tB`[1REs?9b77;B7&'L3r@(8k=JC;@<4l'!+C=2(&4@?51#EwK")(a#l/G>(9%/#C yo 'j Z |% YdO5l_ez/&~!ߗwǨ?ΪA=m§͛޳Q3`:KdɼBljeØ0f683ƪ^;ױ¥jӧWͣ!մLΪƱάvv" 7;nyym|Wq\ õ@SȌ$<— .ټNȤqT1ӧuد6`TAeLI _~^ 5 $# SH!)%Qi') '05n*7&m/><0A.~79/+,)-u13//,0hKP@=JEDED3J:?CX<&&*k;D<+0*4aKt;5e6 'D#J3<)/5+"5"#  & sp s P u; X\ U+ u/ sI3N u.K}b\%|]F fslv wۇPMթ0j]t8,=CCѧ߳ ҩޚK]f;¬բ=c\߮fd܎g":בn޲'%F^>iTEVj; pCu2 R$E}1=u,uk   | -  ' ^v $'' s@ 9.U*jcr {#4;:+141[*H'*"3"j|%$0 .1*I"`)#}69  -'%*& %I:%kV& ! ee )a &)*"P&'$ U a)RX"&_@O2If %e+Mԏ1E v-?ngF(yCf+Q/=Dd64ϾDz7~ZcgZD׏} ׮Rel׹A&a݌Xa5==߯t_K--l5NKK.+Q# Pݸ*,A V  t_~Q k|[q[aHe )i>$UO&f33G)%M 6Q5#'-#l]%i-,_#N"' ? {!n$)*x(0 k !c o/f2)' $` s!7! h |0'2 G\ #,)&0L   b7"VM 'T; $ z]<  J)\ #--Q"!-&n@[Z#jx/,(~c3>kKQ<pٓIa{Tb(1DqxQ~k!'%\[QC߼QTؤht].?Y~ K1H]QD'e%#"Y { |Q?-axZ$_8) { x [ u&w @, uk6 D rQ=:)Dl( mP%>ʴ;s }%!3$| ^MUS)%++)&)%4}}0AٝXƈ1Q[B8 K:t ;,f~?ώ!Ϥ,`v1"@ W1A 3 2  lmnq 3<  q gHb'.OW  .( > ] Q*v.b] t^ Yl>O7 Y#-%%G@)yX:L$O^݌sc*xR*u]R'!'86 G   "(')'!+C    ',%1t/^&A#+5P@6+#  ~(')6:/=<:,3h.p0Y3-,*+N#{/&c".o(5%J)-.3<:7.4p98-V%CUhFB@8,$P'$'*5-,s1;;6.4) *Uo#m   !; ~t3=5+s/+fQUfhPX mBNNŏɝȤDj=g4aڄ7^b[DȽ!8ۣ[̽_2׃dJľÎK.cǾժ׎%:͸LU0@ĜFNj"QJ0\(%eM%һ8С 7w9n^!WuMER zZt$j.Bt#y-h=8_?Ө8L;}e!gH a,o_V 2 [o^$b< a)A S; f $ $1 i~g!! (N%$!%#C 8 (-"%#}P-/Bk4.T9vCOBh5*)r%&f4*'644wFP0E8/E]O7)*784$6I;]69<:5>*RWG WgWKBbfbMgM8WLBaGJO)A7]=;;*!1&1m[U$D#1'$ }h? h"%1aR X_ #)# +2*s+3%&p)K.I1'4 L  qZ99%f ƓwlG 7*L#4oǨ˺ӳE,X0C>ԯݐ .H%%FH&plpH Kr~u0"CBEb&ۜ( ~jAshLVn 3'B  Bqa / J|!#["5!A7  [h $*L<  v ' n i Zf6)"z   N.^'&$5y U 9E+!2  -PV? V'()#Ro  Bդ k F |!L ON 3%V 5UQ .eN&+kyo) O!i Cy"**}$!t h  IZ er TDO 3~~}` g (r$ !4 $s|d>.TEkICӫ_;9Z9WI,-"w!a+/I6PKMUb|Uc+fK 2h )-L'ǚP&6  t$#M Sݵ-pr G  '@ R )$'VAkY-]*%#!QAj #L=r, O_8*Q!  SwE:% h C+0    P "S@`U&i'* 22&'Q/ W&Az7ܳzָ@b++07 s\'U:Gն0<~ O  O M!X+xԸ \vOq* {ujY|B,Ǯűg?<ʞލ;'5btօ.%[vD &aYzVb>AޞDV \nuNTz-p-LEҥچ@1`Xy>lLڈ׋5Wi_Xٜ]l Sغ'֛U 4.yj`N3\be! !F) *%%Y-. ?f`}AJ|&'"a&) @@t!;:*.$3-?FF?35"?S@8>E>ZSjZP]VjMgOUMYzM:>7['28S-aqWWdRWAC:4-^-(%p581+&)#>A,:DQLG?7\8c7CBzI=B7\5*W$/8h-a3 l_'J&,*  [BU.^ %]=Iqd7/ϡ0eq0D*`<"?:M4NbFQ (lZU3 +f#4X.0 9 66 Y<-%/D1B 'r"v,V d \] e/_7( (&"  CH%Vu((ZTͮ6L gnhi8A[9=\MTF@\NqWօR ق߈8ھ(]Ԅ-7o0ξǧ;կмͪoB]:׷"ܻoQJ_{f)L,U S1 f' 'u ~% E(%("')A'!%7 3 N  d(*('%R$x l%(*)@(Bb uys (W : VQ_i ^SOj!P?s،7TNm͍ػ]H[׻k<ó絨-#%6gk܃^טܲح͵ì[\8Ώ.ɓЭme"AOМ5ZʐŢilɎ{-ê‹r08Grg4WYgn )[l4# )Z1S*R 1 6'8(] X]  |C*N!#'l36Q0'++8&!O,G8m6U+&"#J+-/)#5#'+L0k/'@!(*CC%7.)2(-x+E' g!r'%W|  dg_%*,1Z+3F& Mub ? %&%k(~ #&ZHm! k V*Qx|e ML 0aZ"XbzO } < ko[1hF4 G d  }!h****)L0/$!*<("U $K'',1:pD=24=?A=2/2M4028 53s75=9@:<5.46t3*GK  + " 9Tb&-!Rp"!wS-*H b$P !!x|N#Z%i Y8$!#*4 $!!!=16 kQ 2us+kDW:   O~#m_2z3 [/߭XƔFD ͼxK{džzULBtĶk̋>ӶCWs3xΆ1RVi>߮Gjw ,<Ƭa0ҿ_@"wcc35]W8͟;olP|aFlI$)v|_BE-5rLn?  1 ^1 V Q)SzCi& MEe+AL_Af[p v!,(",A^>5 #Hu**4"1) $W'%+g[)(# ~E1h#XNT B  xvp YV6$$Gxq@!!s ,5.2AF=552>./121529*#%'k "AL_ !H%U2 <q  l `_d TM< V be8 p QN Qe e "#)] ePz #2"k8DVy&xj:9ݳ]@ZsEݗ,٥ 6vljqk/pY |l3c  f|8~`>HܢG"tSFGTҹ݃ہ.foEE BSi ,? CI! ={dd &L !e<    <>g jh|wBL+ku|qDw>Exa0(-~ qK0VX;0De g3..lfKW 0hi^Zs,n,"vU%i|   m  [ _ e o U!b% "$C)8#1!k!$T i 6 r   D)"V   /t k U+i a"R~@M"T!3(d  %(+ "bYLhW$!< r"s(*,"!!f##* h2$  I h6 g% p L Ze <  ^[ :w f  < S O s RM6 WY eK@" 1  "c r 34iZ#"zA9%B]_9e%)4xZtYZzT0Z+/tynz{Nv VI2nm6IZ*P9]zyHKZrSr1c)/{  '/ J\ J  eY  hhE8\,o 0 B $ , $5rM=49We=a. ~ R v\M "` CgAsb dar L sl[,7  ")U8g[)g%c v=,/0a 8zA @ 4Z G nO ~a) t 'a Y!(EGhrs yW 3$mZ,o  Vy]fg1"uY" T{1j g+751I 2N:P*^ `I"1&:m`}^?\ 1}D ^OWKvVC]2v*6ZG%j#BZ!wy[B\_3L0'pS|v GO(0F >kkSLzFAS& %Mch_RrUuq0Xa6j"+4<5/F#g"V>$UQi># & p:4$,I!zjqS ~ du}1=i>O %IblF-C@PS e} " A .^8U! s w+KuU7~D85 d 2 `< x6IIoB|I$blmO F$fhG;wK6#+&K#)X*<Su /D]X1ZJG 4P33!9u >nOC[VQ y  A-BjDd$9}l1Fng# Ir| :GAU.d):J9-< D Lbtv  "mT5 s,f)Z ~aHA2f. SO. O~&v\ITr-EJa~?~Y)m{']1~,N6W'CEGRB"UFy7Z/?"Jb!SkQ'",^ gX+wb>]ks- rVn<? % N Z | ;BD4T+$ Ac=Uu h cc'z$dE44seA !  F  A<U ~)UI,y7o>eqJA 5m*mM' Ft V# |=G2+g{%  r;A Y.13q:9#&(,8U^k}k} ,B"x?G#H cHT]cD o?/xhF]|NcnU-Ug.qE8sO?Z<K,Y?#4lJt,moaQ3\qy $*p*ad7+dCT@3^Z AUy'{iNtJ}NO*24n *.Ug #^`+rqh d5(8O &ifxFH|?>%zgR)*~F swyNR3+ fID4J.;=zsS.X)hA +A>SE* 'w+ob}{+K"L`M,> ;D e`G<s'^t"DP$B)zwL`}}S0; V}<9z4\m&aeH29J?|oj5nJ#_o 1gksJU@^aSFZc8H- TCX%Kb7;sq"3:Dqpf|;kD Rs*ur&aVVh3;$)66w"a e DC7~LB ^9;yn~-u:0/|#VgOX5r[ ( ^BL$/E75o[UF0l#sT!xVQ!PA&@(5u@`WD\%C?|Dl!rcxg-g%|U-cEfK q7!J=)+tNyL= qlSF@V8`}w5 iGW'B/PBi3UpV_UuZ$?Z7g7eD_/gANd! i' }A `6X${cXT_qI\s% XjApe=+o/lDp(7Hn'".5k H'52>~?:AD$fh9$d@{&00=<I_H5ELoP0#JZ*^v z\hucX^-Tmrtb$owK $Ak17Q4;A-fX,]j:A3P^|DB L[OR.YR  k*%;>zmuS#OaxmHo39K.$K-Vt]b0 ziB}d0aEEZ@:+`EmC<[.B<TH-I<T)Sz\D[afek,_rqD,=)LM-F:`yWtP73hcfOLx09mn2&UpNLf40o &m !?WYQl^}YG%#%x0L~R8@=npDgKJmpLVeA( 5HjW[ l@E)uWX{ kY}f,Ak|rGw">1ppmy6 &%>E+ lh BllgWmpV. J[+K?uFQ8RJ%S9BgD]9O), ~Zfrdt/CE8 4/,, ;DE?4/!"2FV]UG>1# ):JPND@724;FNNOVX^ZYSPORWZVMJILOOTTPRRSSTUX`glnjf`[ZW[^bcigf\WTKKOT]][YWRKHA@@ABCDB?950337799963-("   kiki/sound/bullet_hit_object.wav0000666000000000000000000006133607644706002016055 0ustar rootrootRIFFbWAVEfmt >}datadbL'bn(zB]3V;Cc$t"'[&Q0TSzN,k"]\+/Kp  QN}|E3 = O L  4j  _ s: ) W . >n_o  Pngcih\v@A8~z vX}X"^%O  e #u h . B {' Q * q%: . ) C +]G,.S[ P V(    A  q 0 Mc   (    S5  / T W f t x  U@  2%I ?'m 3  ^ #U @(7 qi+9KZDLml / K ;=F+  9> Y dS[IB{x:𻟶5GuzA} jIҫ=б'aq:A;~p"ΰ %'UܽS҉֏ج*%ߺ4xx,k+K-qgr;X$p syy h  t^0`  K ;O3 ;f y > -"=Kfm63A/)nne+ n |<W {fhY +J]1\pz0- kHE,  . BeB0eTZ ]JVp^tިdL>V ކkܕ܍y }%jT m!!#$%'p(p(())*},5-k-/1j135679889m9757!7n7w9+9a9_:a: 9!76740 00.(.u-=-48>EKT`$jp5x}{*zy?wsqj#b[3\^\5\\\]{VTSQ\NPRRUSKaF*D(HKnJHLPUUX\ZT:QCLID1.AI7Xnf?n5ojc_#YQLbQnWE[`ilprih9koleikqxu[ooEtxy{uv6ySw9roljjhb\lZJ^O_<^`xg#k.p|spet%xvttso;kkiokmoqlopv x&vp[hd]]d]&W0W^W[W\]ZYUY{VJTL1L O,MD&D=321:._*(&2""_&A$$m u R"" >Y C! !y WOt6z 5!7!$#'%"{#!;Nm i;\(Om~^ |,gCm n$% &|())B($&& '7#Q!"#C&,/#3'9F;[^۝ف؇مHь? C!ɖƋTϿVsÏ Ú\"Ł>UTuϥӶ1ַXV+nc,:qb Z-&#$$=')p+.12233211.N,,..Q0q000210/1t55i6;7)7p766=9;<>?}@?B>G?=>y?>b>?@>=&><(;889W988d887Y6763 450&.2/b/#-,$.f,(~()x%A$(((c*^,9--1:1l14Z47D88:;~;<?>BPDBBEGF GtG FCDDmC:DECD>?ACCJAsCCbDdJdN.MOSSeVWiXZ)\[^]ZAY}XX[\^[e^```b`da;ba__^`|`ebvdcfjnRmkGokmhs#tp7uvtw{yy~N}5~ }q~||A{y"zP;~~s~0|h|{}{;~V|y]{y{ywywEut/t~ofahid6`\]cd`4cfin1nklKkie*cU\IUmUmOPpSSY7[T]`cj&jfSeeefjhZcak_abubNabz`8`"]^difcc?bcLg fbY_^][[w[Z^_w^]]=SV`]&`5\s^^u\]a]WfWVQxPRNJrJ8HEJ?LKKtMPMJM4MLLN{OLpHIG&GVEs?t>@??@Q@g?g=:9h;:"8:988689):<[?@@4A:BLEhD DBBnDxGFDiEFFzHGHHHJgLKLLMOLPRRPQZQQSTTRQ*TTTUU%R*T3USTUgUV WX VT/USPQzQRSSSSHTUSROSSQRR2QPO%LLLL|KJIGGI0K^JHIBHFD@E:DBmB?= >>?6>==_<;g<+۠ܥ%$7ҭҹgK em=@ ܩcϷu9҈Ԗ[ӊhݟ{#=}t#bx.ԣ|ف޽߯:HڟBϹIE̲t͞Q͍Y#\FǬνNu}ZȽ+ԴVqи1R9Gν>ҸuE [\:*h>0 DZ*t3̒Аv=IՕ{վHф 9ܔ]ߒ j/H> |$:~S4o=FZ\7qg};c|< [ ch [ 5b$IQޣڙ]X>g[ϧ,#B x'eҔF1^€,2Βjtoܒeِבe&j$E*W 0iٶ݌]^۝ݮ >cf݇eui )\DajvH pݧ1=F]؎۵%ӞH&:)Rcֽؕ؎*vbպ1֬eҵ}qg҉f͆gXʮ.δyHI"!_س;ڲU]ق z) `_u98!!IcK3@WZlN3t4H^W"_b+xJz K#  K 2 Y-G:'VLA]-dGkOLM.G.K,=tn"$v ]6u\6^JQMg E 5vq @p(L W!$'y ++ O$((!#&$+F)`($;$,. &%)*,.a9>7q6>U?99<:*5H5@471::?:40178g3:|<'X N   eYv y 3  XU" K  ` R ` 8 h ljg}*3"\"# Y   % %"&H(*%$'4)*+.y33S348O67834K33S0L1\1,,.50/00|.16633x4 4456t45335697846:8:~>?@F>I:541,7*G-+5*)$!!L"u# %*:!6 ]  I6:t>g$_WGq~ݐ8qD' م9rɉ·cZ|Ȟի%[`3wZjLڍ1zVQ#)za(BA9zPLqkab1҉ efU  nj%\9*b7i0W bZ&ɍppR߲m㿵ƯѓAS]|N;NGԟqK桏Q3 Zv♖Ϡޜ˜rSuĉ]솅Ԁ0܂Q.ӊݍY[;u~Pʂ1,ƒo7ɠ1ٚuڕ?JFjOJʱкNTѹk4)r98g.StH0 "%lTxޒ*8pl@Hşv09vwֺ&s0ǝ̜LGq6ů‰@Ɛ&&ԱBݥޛޝxޚPIbݘ vݰݱ)Qb-qDH 1!y'+3<'=O@QBFI(HJLM*QU YGXYYYX7XXrWWWWVUUQSSaStQOFN"NWLHFC=O9j5r585313{3I334556`4C320 .-,+)))+D+R+1-2.;0245I9:9;<>l>Q?.BAq@@;C.B?A@uBA7?>>B;z8[99;7686A7 88j888X7j4N554342`2I33N2G0T20j.P..=0-e*%$# ~ 7  5O5vCں}֤ӣrKqжϽϕ0шC#sӰ$uG+ʐǡŸHO20ȼ4?̘͝UpxX#Ō0ȂXm%ҝ+nӋҮд'Ӽ{H*nAMծ.Ը"[gЏ/H3Wzٖڀ3Il?ߣݨd"ݢn?wKQXeU٫%i֊$ae?T=^̜6Χ(ov\,;̜͈biYҩыҬ϶7Z"ճpK`#zJ!hI9ͽϼ6ԚףEټڬ8ݣIlD_pRKErZboK /LN;(lXf,TLl)Xy 5 ( g |50>Xcue N V  5 @  @ & E t eO={>gN D9~Qa ~,""t$k]ԃ5B3ЈeG]̕xJ$IJc ±Ž𾹿(2?>įƖL2^˦ʾ}&.Wϊ0ь!ӹ`QՅ$&8kZۣhQ`k=ix \=   O'\2O%+uY=7|!r gr cG&KT{Ikh1G~g4Nxޝߒn*6m+HA I]NQ6 @qK2Ni #II1f [ q  D4"nCep  j i # , R0 #yyN~ Zwg od:9H o,|EJ}5U2N,{f&dm8MC^ " G C  , >Tw#6N e [$u&)3*.,/0D12)3W3305454Z57178#:;;:<=a<; ;;:885E75725 5V4344>54H4z4p242E0&1/(//f.j,+ ,,+**|+,+A*g*,8,,+(((('([&$?&$##{!!""*" 6!Hz+(ZN^c*|_Re26i4U7$bW5"Q##(&2%%A&&s))>)*-6/$/.0/.|.--u-l+#*++)'H%%%&n%q$#s$"j"#! G!x"a!_ A ! " {   )]K1 3 OP^(?4-NCZoXPn*cI3|l |)?PV81KFwos>xpzvK6_G(NNxN>q^H4P,E~2PjsYS]o&Q/xAeWcXNsS$$g1Bd*> w Zg$^^ d @ . ZZ&^@T*LEwcfx6  M D 3oRb!kdAhO'XP!hT&]\D KI(A1B+v3} Q*QT4:bt*Z@:;;'wFZk,M=?T{W>(X2^0~rHttXtmj9<QF60fdA9z6l[DE?W=Ec !jV^g]= . C2j"`w!!} c}A'<|DPNn:fC J7fbeDH_wqAp+RSC)U\/ 2*y~pw!c&2)(/.211 44!45?6n79717v87945597y03892.R1J.-B20y,,-, - 2,')6+)%'-,U)b(%"!Q #% #3#he[ kk o3 =  K P'V-.$d @\{"}5M& /hZ1eS FSU,Z1"Y$F6|PCP+ !#G#(O& B"# " [CQM {!f%$ %$ !$&(%###&#_!&nJ] KWO~BOFWo\Vr&[z V$>s6cweatlND~4E$B]~cTR`"( Me/*zQikK[)|#qx {( M  ) V $ kMmY$p V]dV;?C}b[GYEBs$If%[ߑ'ه%&HDܖLD~>TP X A^tdޱx6(|7\>(>, &/:LO6G9d~6h]}VkL&\>2M߫ރ(ݺ ܉wI55UOqM/Y0ڊy)ܩ[t۪zy_EEٷڋ۫i۳wTN8P<>#'qW"\5@&aV~k SHsTF3 5u 6v@:2|%H&XWcyl?'  [! - 1E b yzG[ |(l = $  VZ}5  5Qd;.  k . 3? m%5i6 Wy 8]&Z4i%CE6K ~W4;s16"x!h=mFX /3d@P=JR,kdc4x%_ S J !ghL^# + Q *}>>6qtaa6`z"@x*hVA|! * 4 2  E5OOx>YOB:uh o+oGR1Bf"6m F\w]/$z~n]>J3> DpV]9(t6jA%-k#t4;3% ze^#tp#z5<\@zVh1bB.5"bdYC7 & p K ' < X O    | w S g m  i.RQWj4 KbVn8EnO(Xhj!3}# ;}TsHq%e3=8]!' |s]cF8]U=~iTG]]~;&u{8a>6WWcY /h>JmaZ^*p+g4d?-eMpL-\Fi'?eU"o g p "   : c T  C  , ; ~    l  1 9 - z b x  ] _  1+U@8)-zoa6R=E{)&I~x2oBid9Ov@~PCs"\blW&R*BARzJ*  ~ ` f c I ^ x }uS]pZNrL?zB% BN T,Z2>,15m2mq2i/]M?T_}5$S SzV<s4C{fd>N@LR8C/?1oU'm.^X[( PlY^~ G|7tGh6",W7nj|h,vX*< 9r4D8rV j=7&"j44zVt|/UqsF(\*4 p_apFgrnd[>::DGsc;Is.Ouomn<8f ub,Hdq_NhbtF<Zp(IA#3<dQ/D2asN:,="Z@`Uv~+cl<B.}ZFn~V|XMwFM R@. ~he#Znh$;'K;9WS0aD cKmY .x)Gwg]{M+NdQoYP[y3S.f ) XI& MMOMeQ3M`*zuR P< 1AE/ b p   h ( ) I o S . V L I 2  r N   o }s  |<E>} [  "  c  , D Y u  Q A % w #    M I G    'Qif_/;,ldfji| |^Nq/9 &w{I1;=|8)r%6f b`XVM5~tMSo3'\hhVvJ,t 9zYF@E d&_+o4KI V.(=ZD !?u   9=)xx@ccLE~p(7%G]gsP:2'g -F9QuL?~Wh!-Dn PR)Z`l';h;i\  Bkk %)dVht/e 'dDRlFl20 uuVT7}}#\&PtZl:FOeDVjN2pW@XrB`nZoMCA6`'kMcO%/sNx2\6|6] jx|=)OjpTl\n`K%Z&\^!` <,sei 2^tD( >vB\L\&RL^`Q7N|~kB88^ \cZ -{%\ 0D5x Bz ZC9~~YuKd^:5+*#!$<.4w[; "4V{.BdFhH2L&P4A`u/qP*. 8N\ 6t8n4LJV@Pl:zf(R T"r~&,,drjo' 8h&(zbQ}O;'`~KUzlvL~nZ9xf,Wn.62b"K9\? |9~7/5MiYWMO?/WSDbrtd!!Thb7TPHnx?j ;!r\Ox~ **Z?S~pZ+u1AC=Zb7KuEHlX\<p(""z |* <R2@n hB*V:0h,_Xab`Wj*r\ f~T4,hzNRHlN$L\Dx&O1Gm'( 0ZG"R0j I7 r}7zbHL&Rp@b&x" v<Xp\, hP`^tpjpRV~`\vx`P|~"R<,N@4<6B0 "D.*@V-Q{AgaE]=;  ^C%5ZGdj 9?O~b^Z+ Oh+5CjA\;IZ3Z\1hh`QUzESn`nZQtn=/Wt9W^%9'CIj]e-SC=5!s|D~(:VfH*D4X>40\j+ k'qsgw7Q?1%Q/3Ag+A//K!/'7MSG?Aq{kWI%Ew_{ 1LNTTYSY}qCO/t@B^8<J 9oAKY7Yaum7  G9`j>.@82F@RNV<V@6fj||fl^pzZ,.4&6.$<>8$"*HPH D8F4.<2, "h|Wzv`lZ/E}c}oi3MK=#PZXB> +[93%l#'Q%59Q9A?3%-'9=UmGSEywYCSacm)- +!581%Nx`bR+F #F!853P:xbz`\f,4:^\0\6bT`dbztvr~vTDBhbDP 40\vzvz\phbPr|t~rx BF.>FHhnlxvXF^dvL@J<$"><&&." rXZ`-dV\N)%-'RdXfXL%78 +N<:--DT571TlLH!BJZvvrx"*.>*>\rzZHdXTBL\80*rrz~pR^`N@Pr^hf^lRZjn$($ $&  " vtrrz^|njnr~zt~|phvxxt`jtrv~|z~||xz~t^^^Z\bh^VPRTR8DBDXHNTV\b`^fdZ\b`TPXd^``h`nhrpvxphbpxrrt~|       "" $& """"""   "   LISTFINFOICRD 2000-10-18IENGAriko ShimafaISFTSound Forge 4.0kiki/sound/bullet_hit_player.wav0000666000000000000000000011625607644706002016105 0ustar rootrootRIFFWAVEfmt >}data44N GH` 2L.E,]($f!pr@/]uK!b=IPO{4N4e@$dD2JJX%Cv3F5BXT3A6O;OJ;2zTI^yU$:M:$~%o: cCT^.uV =*\EfW.H*6,:;CPovy,$F(ewl=+g Az$uOX",K` N\JT^ G#%[%y   T U  B  z Y K [y < vw zwX+/;&*ygFM;3&3vqj"':>@@Vh4Qi$%m ?_KpXpLx%1MR7+<{m%sC ?DBS p H e "  d  CT s "  E "   I  E z     ^o|  h  ? ;R  ^ u I Q  6 U 715abQs"W6"4:L ~\3wd )-;IrpX9ti&b IRc4wK Bq^tAiC8bt-RI3g<<=Lt3q~T { 7d[398 - V OGujH +  m! ~yd A 7 Ke Ujj6{"'E%#}8$Go ed  8m7c ?\v +  k ?   B  >3 42  Q ^= O|6 _^_2 lL Hh6[%J9l Y7R ~U T# &=2 S injdd-(ݷ1XĄUДγwϋBNyǾnjm & ONy9C'_% s$3 7V=2'6;?v=R3f1H_cWMMTL(B>'Z*p1+%(2(.1S5b/+97NFM?hFl;+?SD,):EpJHDC7$PK !A-K0G3(),d',D!\'A' oMG,)#F8 ʔ>״ݿ҂GpY٬vz~7<3"$V(F'_%*(l` < lw .&36>EEQMD6-P4%4x3|G;T6eq{bO1+UsxHp Y=Y_,\6_weQR]!aZ~QA:Usij#|tjuc z(`XBQ0)  4i $'/M>LJk9)m02<9_+ xд7𺗷ػҐP߁l Hb˗̐PᖨʒЖෛָ 菻VsQߛlҞ?0HDpm+4ʍ;\|.iUdljFd|~΅ֽǧ\F A*p  3=13FV]V;S}S VLE4>V?F@DB-.1H`intnTqzw|tu_tQhd]fbej~|'eJM@9yX`B`=\gGC/2BIB|JlN6I]EEMIF)!$&0#:)(K1# Q/{ۆL| ܙ!ag @ŒuT [ҌC<&I◟9B6)Ud   2gx&b[[AͰh9#"!'p%p^}WG?P[ůóI9ǵ: f{Sbd˔Ԡ: WUŠhn߃zX>ײ^)WSƤ I~*.pUF~ݬfW !>lL+.D5$T/) T1 -^FT?~.IB[*lurolZF4;`ieKOCTSA;r;>8q/+4)/ !%!)li!CJBǘM|MBʶqQǀ*iڠȊ(bS^Tmr@ьw?ݍԷže™3WK[8ܭ轺.$2E #%@G;_2ENQRif3KOY~S 8.67+ 1I#)7M975 Z[T?KzJ-ΐmȪeĺϸ x<~Ȁ8<   w| v%&#"nH *$&208=E?|=BQAG28@hC2++38dHjJ5)3BCeBB@$A^@FPRSgIMDKSXVY"cfe_G\c^\\UZ'^lL8-/-./,,"V!n.8S($3Y69B@U7>46T:#8z01+AKcIFEaLRPR1RTdhoooqr~qsx}un:mj4dbgii_jMiAm(w#xsw%uv{y|-~~xxwn}}VqotpoZjihre`QwT]WPHEY9:>96=A?;UD@I.DHS#Zwbc,][hr>uwpinqMu{?xrqq?q1naorp=fggd d)e*i;fgTa%]^&g^c']]_^]`UU^I^=]\flddrp0u1zz| zxyyvrmrPv pb\`&\VR)HfBp97{72S*$#8d= 3 X / oI 8 C 4  .S5 ܻԙ'Ϻ3X̱TC[7ț ,c¨Tx~}ǖ6@n63/qպy# VK4}}34DŽ5vR|jEG Y|T"@Bҧeklg鲵><ʮ*1i^ҷɹHȶ~LA%ʍƥȝtҖA*p*.gtmJ"h )    ")u''+L//,$0O455(9x?1DCHCFGDCBuAR>?i?D;/>?8t=WT+,x N RrAN*SNyyWX5+>.$dJILj0"q]\V 6 \ o*Xp;) } g 3  )P.WYGܠ ӹ`Ȃr7_ {Fu sP c ]b.]J\ȷğb'lc eUH{΃ϪO/@WR/v*BxpOB=<96m. +QIՏ-Y||{|5}~>~~ {eXXLm3!| MS\z2ڃ(T>Y鞫2^L EI[oޮEyG;ɅҲVEP*"(D`lY@y@[^S?2/+*T)9$(?  >Hg  xAuэ|ͬĠ"ټ,KML>2giRYŪcD-kl"m4\Ⱥܿ2@}sӁ'2,,އ>3jŤYn ݜԕ۠[0;Av31%r5=OFFSPRIyG ?==PMZW R@NIRQIQ7V` ]I^`eGk|l7>)y68XAwG")*(#SSI=ȯLu(S𘰍jঊb`ٺ& l#&L@K$Dl1)/'6H3sa)c4@Se|}R`Za^TD2q1.A R_,~G :ocۣcŪCC )EX:g0wy|HopbVNKCCHPWVzV,X|~+!prTP+[a^cm7uv4l-KF2/t+'J ՄͫPaAz 贈+w֞myG}rjx|3Rczctߊlݡ== K& N,V:@KXPUdZb`it3~|om~g~}&xsf@SHJN?V ,2Rdͨg_(eߑ좵eT*՟TػͪE:-! fd ˝ԌҿX ل٣ё@ȐJ+/Jﲅ6,_^yش߽q7 P  uv>z  _W(6OKDzA1_ gʡ1V"čD2Ңˇ$1/ZnHQKگ^o7Ӿ\Ǒө2ܯٴ۟ȰϹf0DƫԧԮB^"K:aƔTax؄8ԀAԛ˶~^Z* 6lCצ<嵚t0iwȭĤɲ?43? ;l*tǹƗmۡ,J؃֗CK ps!+ 1,u32j'%'!"2#; LL F*/ζ?$ ܣT\I󣾩̭3@z{ڒe݈uO\;6Y: ΧZĦŰ鴦'ԠHGi GWV(3&+\:7L8VZ[__]ZbV4SPMJIQLK(F{JtS}QUIcn(ps=uv|x|C|/{DytnkmhpsDurrur)ty2||yyqt-fZ"WeN9F??k;u;;K9?iA8916u<ǡ󾾻ռڹsZ7_ީͯ˲뵨_ߤ ̫#4#4;M$fGNBL]!s?  X 8( i G)i%1%Ij GՅAƻŒ3/.),1540/./&M%[$ ! a I &""#R""#>$L(041.,o,t-,.-)%**_*9+b+++b+]-)'}%!F<5ArH6e,&M@!B# ibNQ!_=Y U!%$(+(1&J' -I2?3x.I,-i4m365H8Z549ClKLFFHHCtCEFMPT=T ROVQI.EEBG0CGA<;;:83;6BSMPSgVqN8LZOPNIEHB$GJG8HMRQST_ZZ[WX0^6]b_^S^aPgjo*pq:nm+onoYppSpoe7X\ZbSSNTW_\4[UUXtUKcJNKwJBJGJHVECD1DDFDCJ+NNOPU]_^[_`_]ZoXW`UTLLMGXD>>#>6-,)! K9%vh xpR˺+DMTo`UNžŴ(GZȻEƬ"ƘŁŀǠ!ʵWf|μ͋I.߈%ED *`C $ 3Y"("{"%'))')-/- %"o&"((-/-./-,/5~5.,*00-*L)+-Z#S %#$$$3 & (#Q %x*-S,($#b&4%&G&!!H$)'&$0%H#dFPO   Y}  ^LjO$ 4krzW[e]lހnجؼպgnJщ5NiKۆg2kH5=I, |-1S~d XI"LIbqoVO י؄Bתؐa۫G+rR}ڑD~c/τf` ߂Ux:έˆɻ͋͆6ΡdӬB)Y~ΥA$gGͬԠSmӉؒ$ݟQBf?yA~5ysM(@Rscݪޞ_aё91<ݾ&ۆݜH۞ކACOH3&TA}8BMޤkfڑwݴ3=l?RyR)[2t.w P mdLBNS 5,e Z\HFSݲ V ݽtJ#v%s"Rw  n m S/!;AD8~ydk8C=p{Fn=G  +  BIrB7O~--;>\wV3 B?d Bga`$V.\ C D = f :v_ | o?  +CnHqrlXq :j  ?F^RGp|N21 44!=2YjaguQ.u}A}C,As(B>v^wx _6 qaF! loN0Ze#8VxnfJ[!8S`no|JI{_~rnw~xwt -  (  t H tCfm^ B S ] b o ;'i_Y"ny. n K VhB';QB3<:W)W/&OvNZZ ;X{5{R+$V&@Y{+?N669Y+. $k )!a 6 N l v G >vw ocC`T_x ;'O @ =%1H _  N :h C-GM>dB ?0} 2L(6/ i Y $  ,2}Rc#\ #$#p")!!"$&,%(#%%$"$S)& #!1$g% %%&&d'+U,#//.x.c11H0-.I.7..0v1 03.-y003w14655B5557543P10 //.w. ,+(),q*)H):++&#$$V$$$$b%M#($=&&p(%&+{+('~'e&$#o#x%#x#  `! /V+!D*"I T59Q 2U   JJ`Dmv* 05IpV߉[(ݶ8L!k 9ӗיRwg Oe.Дϻͳdҵ.וn&>}ߩ da>o le(r =^ : >A_}C n   a k 6 \.\([^h_57^J, Z HvK2 6]A ' +[iu9pC~I|=D#"*7f|GWd65!0]pdZ$q-Ki.#  dy`  b . Q 3" @ <  p M ?{Pm  ! < w HhG i / 1 % c t :hDd#zTacvO6bQ] S\@S[yrWZPHg [ ] ]!]?.{hP] ( `tm?w{yRNe*')c "4J35@cNg^qep8"krABYJr$*7)MK  <\  ; b kV vDtAA~?-?2uZ1./f RU=' 3  4q\p5BE5la 74/^7G)=z` q $ ' 1  ? ~ a,OV U  O Y*==  Hk ) qr+-l|]n  ) 9 K WXpLg++qB{>p:i{_dsQ<]6sD&IQR1 81txf  >* y /2 w=-WE'Ytyb S &,p@ n+ 38a%"[% $ ~ e v  v  @ L:aSzfRp2$W Y~j1b5 y*\9?8J(Ir{_Ys#kvP&`$c@G  9([ *]4  ? _a S  0p E;]bt=HZ~}[> Q"# &$cmI&= 4Af L H  h s   T  &a7  V`T z\} & _ w ) \  \ 1w gwnFE  *E*6=yY\Jhi gK n i ! ^ < 1r b c 5 J { ?,}yQ~o:x>" J <   i  E ` J ?  J jXT.MzFW |J= O E' \ v = }WT , x C    |  J i X'h"=  k^V = } m ~: ;=x0"d :qsu}6r R!l N K L" SBY \]jfqS<k9uh2_6*Q;|0@"'23K j-80[>a, z ] C , G {up%|ZhZIC~V^I:|kP Tkc\*4u~SU^htZdMFI3+M+[jNsN  ! ` C m /BE @  c m 5$65  2 W=/|s d)yUg+aMO0@bkG g;i<Q++O)1q0sC y(G aY<c=^.!io;4c  #Gif!gqG8QTMEH41 VSi\mX u8:wE'ub N4<Mkss  t C k & (7=#<s[BP { ' u \ k I  T QPJ6T;3RkvvC Kq(J!DK:?~:zz\5u|# sye{Pu6`v/;y{bmcm$D -3O > '4gA@@Fq ! R 7d  ; H ~ S i @@? E-,CQHy2 +]Ag4=kpEf"OF6G}LNq4ewq 1 2 / u   O , h O | 2 ? u e  {m * a r3q6 R&EXDK/bZvc6n:}7G^qJOs]Yui6; P<'(J6<:*;g"E-vheFKVNu%d  cb0_%)5{MRB{oP8 V+"pxG!e5GX"ocyYR>f> /S zt ^  (  o x , . p x @ C )>UU& E Y]nMyS(BQ+.N>SI. '5h"c~no%4Ya-(NTeC&f^C!@okO,mg"n/eUj?t"&Z:}/9]Cwn*@TC"ZAeh7iH'vX`9q 8T SF};_-m>gmAs,15 JVPB^%.dp}*d,rc95eYO9Q&Nf>qd(R \j  |-uGV  8N;0{]#u/N:{]Dqtlql5|-arB$LqSahK-0/8 x /~LgKy \   9 A Z 6 B WL[_PGz/@(QER\DUYJ/M!89 F}zFT|V\<{FM2E?`n[=CYCgXcoWl   GX I #_HMiy&)4w' Sf>ui$="H}US]39D-LDQz:]J;%V~0E\@3ZGbPhmNl'6)C8(a7Bzo*G 0UsTU6<2ZN9s=R1or 3Ztx,8$C{~jGg/v a| z8Q6@} #Q4w SFh:D"]BrHaB-&)me;m~ *U O %  Q O @ 3v +w+m_*leu2ME1f1N6=VZrzq\y^Glt @vy5h" &cvIxr 0X'XY.0'}:|\PMq3SUd-N? Q f  = o_ G U 2 nT  ~ ^ncC_-`'ds]Ja#| wj7VCKSDB(YS8< #e>d7@4DIl.ckOL(l&NNp71.bq( pq8Y  ;<&rJV)~+BEBd4Wt|X,jJnF3"nC7qc'=/n}?n:OZ&we9K-v,_HX|.f7 C@"El(AELc ZXSdcwzr[R (TGM\Ew5f|Imjh5oT0= zq?o[NDd*+KPXyZ1m V(hcyx*|,2MF .N|3% _{|?\Hy1`>% -GUERqxT1(_A^`I-DhGxYcJ"[r1MNDmyV-_ekqvSKJWX,Lvx{O02B xXi7jUOOT^ >\spl3*z"WPHU2u'+H4JJwwlqgD#Vy-}LjPctX^:hA4 %KuQH%j[)?lI*d41<MH1v01F [>~-z:=n_Q2R~ 'x7nk-d BdjY\Oj~zN-!!_Hb>u]niAS<n61hN'c>#V3% Kwc :6(zG!2u >+i{J8VTPOul!1__(6*Ne[05>ccbK5 xmr8f` pu Lii'0SZ_;tMr|e]J9`}YB^v$~@rLS%%<,/yQuuF!5 ~wEYfPi`s6$P b!qQbh/JBqw.vwnL>'@KcCqr@3M! 3Byo,-3 dvb1(y.(VLAL^;.\&i5;;V!1aN7G.:_/|;sQs/|QO9{5rs4#lzv,C4Usc8,u$lbPS*{1"lzC_D\EpyAa\^ )^>^EsZDS"Tjd 4Hu^r( #9IdN"1m"*%7{c>58 fSttAMgT@=pzAy`/)?L - Y _\4rt]x*XF+g@*2ZE58m.mJQp.3 dT0`g>LBS"[" [SRyY^I)",wR^ "lJ OBqX5HqM( nM 3P1ywH i()]RQ>Q''Nw. 2^l8J%($ h{QfeV[qQQ1 T<c5FAco-1#/N\z1F #~=ee)0Yh7`bdo Lw_ btvrm&c#YxOR4CmQ;nPf0+|`1bS3 3h.s CB>Ev[h|misuW\`J,|vb^UV#JBFeC\z<>Rq -KFYe |9[[/?xjgC~uRc&}8 >`7W].$yho1`|BEd}|U5DLCPlp^0K yM\-(d_=rIOR7U 1"%-A* +t tX^{5epSgh`?LSo4. 2s_b__2-nh8k x)X~o~o! ]xv*8F6O:r#cTowT$./`\5 P# ()eE6B,0&9T $OsryGb%TEa+g|GZD^4NHeyCG*   5?P;xv>7\ ir;soGL+5  /3{i^ $Qc8Kf"0BDPK\E&8I",A W(eXuZs%vQTCYY*TUkb!m>_>A'*7Byi}c ScUb{cTcov O83PrZ9 COPfA]n^Z Nv\5&/bV r|my3q[ GMsI>_ovw8 ><ue':Pwo^jA!Wz%vAN5*")Ifo85?t1.jhjjbdNBe]/tmcF#\N}_ %"1TgnBG8Q[ qV.|9u7liqdKCQxu|UE/(:%+LohVIK:50s=IO^zmJMQA3D,OB\Zgu/<TM'GX)S}YK07#+BI5H$8Xxl0J/;{wgwqfkNzZpsO{N9mZEP\8%!m@2>3 1:*)6zaje/9Sjymvdl9 |QFKG^r_dZ7t(w!' .0dNAY)2(~~~pJ-9jqKu,vr1`jc}}hauF[r1Y@wJ`v_79PkGuq~d@1U||g2#W5Bnh`VR6zK+92ehH;-% Ydg\]YILCJ|vxxokIF65QsnZO9 J+/1JBCl}uzk6 !v3#~okm#:D:RwvufL@BdZ,;[Qj|{7?9KsKhbP;>L%Q;-y:uc~hjy5'-&'%(* 1IA;%Aph]>YUGusVKWn -+TYC-$%7VTY0!.&./.;Q^hJ7;S\G6 #_rzJu --,C+Z+'5WwiMFbPjyuy}B^~3QmpSI]tjq{ymf!<3lr}oybH6"S- wI'46K*! qohZx|y_WWYMD6++ 5LXvGd}4)7?4#1M^bbKB4<SYYj~mOUefcQ($>`ytk_YSfy{-1*dI&/ zc|tyWS]ckt{[AQWSOH2$3(?mur`jwiRSy/Z`7BQ^V?&%yn|S3.E=,*!"3ACY\)_0 ,eTIXmomYS]yqPFOVrura-.TG6 jWUCEh0_RTp@-*DcxmVIMU]R><5=IB4*)$8JZetqei|]G=-jD853.)/* !8Qurj}wo_[lzr~"1>?)" 39*=hzxm}gD./LISTFINFOICRD 2000-10-18IENGAriko ShimafaISFTSound Forge 4.0kiki/sound/bullet_hit_wall.wav0000666000000000000000000004240407644706004015543 0ustar rootrootRIFFDWAVEfmt DdataD89""  QR,,bb **44DDKKdessXXHIppCC*)DDooSSEE++33OOFFSR;:VVUUQP<65++~~ USAA""XX;;.-++~~NMIH]]12@@gf22 }}GFPP }}NMIIxweeLKqr11DD##ZZii22..$$21^_XXggcb<<jjvv=<#"[[QR]]  77PP--WV&&vvHHtt;:    77UU6611.-ih44llutHH..]\ BB44IIee OO\[87tucbppuu**OOuu]]  zz43 !,,,-hg,-**!!UV}|bb''PQxw~~JJ32nl}-,*+YW?@! KK|z! qsOOdbba^\`]kgjj VVed >?61ccoideRM:=~裼EZ/һEbbJD?D?;&&Q02) ӈJPPcc''֕h|BB<]>]\H]H!J'J8K7KZC͒͜**p.g.iR䐇s00&J&FeOeI>=> <+D+2BA87!<<[[SQ $ no%"63|}`aZ[;:  ]\e h rl=<{zff98&&][?=]Z)(54kk*)b_ ./,*ca<:pp^]HHmm"#oo&$TT%%RRSRTT314321ZY>>%%66NM::('RR}|*'NLWVOOvt<:oo  WT./bb_`ij VXXX/+85GDJKMKjk56981/ZX$%kjDEVU<:#"23CA]^EDJFopyw9831XX~qp**87:9:8LKsqooxw[YEEtt}{$#fe+)uvuv**pnKJ/0ffTUusxyAAYXTU[[$%} } A@ZY][NO,*-,uw} } A?:9pooq  jh ~~,*bb?>22[XRQCDSP<<32vw;8R R ZW65 <912[Z^]~~ed99mkrqQQVTwvFDed88  e c 21uuQR66^_p q ('78?=$" ~~YXDC` b F D ijYX]^/.CEvw !))PO/.vw((EFllUVEE65<<JKffttmlRS#"}..NMKKggOO$$8700[[NM10&&LMFEhibcONYY"!&&22"!\[KKsrr s gfLJ KB(%mmTU\\88| } 20 \ Y ba      "# 45CAVW. / ^ ^ p q M N WT+*   p o e f .-ll""{{ed02jk  < ; ~wxOO('kl    <;U V 3 2 99f h ` _ '%%&-.$%wv^^"!OO {} eb +,@= ^_<:pq  oo22>@ +* "";> jhvvii(&44uxwvKJ@@'(zy//32! IHlm YXxyEE dcMLDDpoZYWWtsWUOO_^ !@@gfGG |{"!! ;;__CB^^poWU>?''45R Q ()aaML:855EEZY\[<;ZZlkvuooCCBCZY)*nm))zz43 HI32xy##QQln``_]}|UUiirq   qn+,<: UU<;NN88onJKHIII('dc1/xyii  ddqr' ' [Z6532,,rt1011][CAIH$%.-hi)(CCusZZKKfevw[Z{z{zml\\qqtt45UUBBII@@==~bb.-oo$#STxxeeCBZZJJ23\\"!eeABVVVVWWCCrs mla`cb23ee<;HG]]aa}|PP! LJ::STdc`_!!FEml   22xy  BBIIBAnoEFonvvON[[ll23YYFEFF DDlm%$ji43  wv -.}|YY=<KL,+_aUUyyrsNN"">>0/-,oo"#pq$$ 44JJ==~}{{caPP'&oo<=98HHpq54sr<<~..OOvvgg++--poCD4400sr?@fe<=yy==ccXW#"  65<9ihhiDCjiXWrsCC~~EFJJ-,uv<;VV;:,,AB@>CCyxwwxwWV\\BB)(VTYXhgff98-+yxMLyxwwGGsr[Y|}STyyNO wv=;A@vu sszygg||UTkk()LJdd QQfe..+*HH'&--VVSREEML55.. MLuu~~FFnmIH==sr ``vu7687 hf&%FF$$vtBBji=>HH77,-PO1121\\)*]]ba54 ''+*baaayx?>MKrqA@ffNN}XWEF[Z! ,,/.#"::fd{{**yy/0  \\RR\[)( [[cd44xw22||yycb20xwpp^]kkMM$$ML10fgww,-!!__kluu\\44%$CCmmYY  77XX<=)(]]++RRgglm11rr&%dc%%}|'(ABMN,,mm88hgnnSSVU@@WX  23BBYY;;ggmm##8811~ll[[,,KKml;;pqz{0/WWNO<;33kjVV!!hgOO^_UURRdd>>ih#"xxoo""fe*)PPxwaaji&&**|{UURRDC;:dd`aMNzz99 0/OOwwEE)(22wvon  JI??gg}}DDDDee89nmtsxx11""mk''++..]]A@?@SScassih[Zrr.-??NMFE88AB55XW?@}| dc.. _^UTjioo)(++33UUqqz{LKKK~~klCC||  GG $$ZY ]\77xx44}}zy54ML]]22DE{zGF~ +*AAZZ--~~nn XX!"]\  hgttRQCD,,QOPOww{znnAB\\bbdeGG}|67OOwwONQQ}~nnRR0.ddiiee)) .///(({|aa..TTee98ts""zyrqFF--}|  >=}|rr77ed((WW==ih@>`_11mnvuwvNM opdc.-QQBAZY}}{z22NMMM~~((11::$#56 76zy %$CC^^wvED KKdczz8887 ((^]!!BAMMRRUTML[\:9ba{{  LLhhpo[Z on ..%%10{{XX]]HGUU11lk^^nmccUT+,FF77YX==XXmm^^gf~((TTQPZZ-,SR_^ml>=&%DDyy{{;;)){{HG{z_^0/''  bb  SShg54  ''>=yzeeVVff4311zzPP??56UUZY)(  YX||xx\\.-A@^]((21''HHABss"!WW  ,,??vwihjkAA}}~LLWVbb/.SR<<MMQQ66*)PP113221jiqqdc//43POee]]ooNM! rrww%$NMaaOPfeGFss11~cc ""a`**22VUdc<<dcZYyynnjiii  baccGG$#~}87nmooOOkj  `_AAii  ffmm77a`ffCC11jj$#!"kiki/sound/bullet_shot.wav0000666000000000000000000000467007645054554014727 0ustar rootrootRIFF WAVEfmt IIdata yyfsyyyflyyyffyyyslyyylfsyyslyyyysysyyyssf`sl`yl`ssYlsYl`lfflfsfs`s`sYsy`sflfffflflfylfylfysfsylyylyylylylslsfsfsfsfsfsflflyflyflyflyfssfyyflfsff`YYs`Ysfflflflllffffffffflfflllfss`ss`ysff``fy`lsfylffls`fl`slfyllflflfls`slfylfylfyffffffffyfls`ssff``ls`slf`fs`s``ys`ll`sfls`sllfssff`y`fs`llfllff`fs`sl`yffffy`ssfy``y`ls`y``sYll`yfslfy`llfylslfyYlf`yyfsflyfylfyfsl`y`ll`yfffss`yf`y`flYsfYyYYs`ylf`ls`yfsf`y`lffs`Yfffyffs`flfs`s`fffs`y``s`y``lYl`YyYfs`yff`ls`yf`y`sf`yYfffyf`sfll`lYys`yYyy`yyfyYf`lfffYys`ysYl``yfY`s`f`sYll`S`l`yf`Yll`yYlflfSl`sYyYsy`ySly`ysYylYyl`fSsfl`s`y`SlflYYlYyYYlSy``sYs`YlSl`YsYY`f`lYysSsyYyySlyYysSyyffYflYf`yyYlYl`YYfffYl`sSyySsSYfSSlfYYl`SySsSSfSyLsYlYf`lYsyYylS``YysY`lYylfYlYsSfY`Y`SfYfLyySFY`FyLf`SySlYYsSSlS`LYS`YlyLylfLls`LfsYLfy`SfySSfySlSYYLYL`SY`SsLySfYFyFlS``FysFsSyLsLsLylSY`Lf`F`lsFYYSySSllLYssL``LfLs@l@YLS`SyFsLS`Fl9s@lFlLyyFfSLsf@LyfYy3YSfffy`FSSllSFy`SLsyLf@f9f@yFyFfSLY9l,sy9fs9slFLSFy`YLL`sYY``lf`SfSsfsSy@YSfl@@llLSYF`9`9S@@L3Y3f9s@`LLfy@@lSYlYyYLs@fsYYL`f`LlFf`ffYyF3sL@,l`3L@L@S@S9S9L9FF9ll@LYl```L`S`fYL3yFllYy9y,@FLFS`y9FY3sƀ3ys3s,l,`39L3FSy@333yF`fF@fYSS`lF@sS``YfYYsF@YL3ls S,L@FS,ff&,fFFf@s@lSSf33`lLssLyY3y@Fs9FlS`Lf@,3ff39Ỳ&yY 9F&L@339@sSFFYYYySLY9`f@ff93l9YFl9y ,l`3&FLӀ &3&FFy,3Y@FYllF3,9SyY,9y9Ys,&& 9SLF`L`@Fl&yL&L`syf`YLYlsylysfLF9sY 3F`9&& fS3fYkiki/sound/gate_close.wav0000666000000000000000000025572407645053564014520 0ustar rootrootRIFF[WAVEfmt DXdata[00UU{{11ZZ11mm  ??ss22kkXX22qqDDZZ  k k 5 5 p p   a a 6 6 c c " " B B c c ~ } //JJddlluu{{**<<NNff~~CCnm]]%%mm  mm,,MM66  {{[[NNBB&&xxssCCvv9 9 '!'!k!k!!!!!F"F"v"v"""""""##K#K#[#[#k#k#r#r#y#y#u#u#q#q#t#t#y#y#c#b#L#L#.#.###""""""""c"c"5"5"""!!!!!!T!T! ! ! ] ] @ @ # # zyyyzz  ) ) \ \ !!o!o!!!'"'"""""X#X###^$^$$$`%`%%%v&u& ' '''H(G((())4*4***~+}+4,4,,,--9.9...//&0&000v1u1"2"222N3M333d4d4445555/6.6666677f7e7777777!8!87878M8M8R8R8X8W8;8;88888777777\7\7$7$76666I6H65555B5B544]4\433333322@2?211`1`1000000//D/D/..c.c. . .--`-`---,,,,T,T, ,,++++++++++++++++++++,,C,C,,,,,#-#-y-y---G.G...////)0)000P1O1112273633344@5@55566d7d78888q9q9):(:::;;GE>>>??@@@@5A4AAA B ByByBBBBCBCCCCC/D/DdDdDDDDDDDDDDDDDDDDDDD]D]D/D/DCCCC]C]C C CBBLBKBAApAoA@@^@^@??[?[?>>I>I>==1=0=<<<<;;::p:p:99W9W988L8L877d7d7666636265555O5O5544M71!BHO$W?\f^#]XRL,HuFqHM|U]Xe$jkkhaYQKI_K9PV']a5ca[qTLFA>ACHlNSVVSsNG@;8'9;@eEHIK3JFwA\;51?0 147;l>?s=94/L+('(f+.?0'1U0-)o%!Gp~Ze g 8 * ;  y {l.c(8/4<z1 ޙCݩUa |2yςo gI( {Xʳłl‘Ŋ[SLiĄöθgvȸOr:q=٥S 4$E`g@hZ똞_õv7 ߠ6 ȾϿսp=߯2g\xV" ̈́>ѫ ŹAypպMZjвB֌ښY1ߚyM$G7 \Yv7G> TaCx:/D$"'rzJ _ l h 6@ @  ` 2} t7)" y;> "$N&K'l''[&%$c" Sv+ ! $b&Z(*,Q.G//O/~. -+)'&%9$ $$%{')-/M36+9:;3<A?FtJNPQR#R}PNKHECA AABEIN/SX]qbegshnhfda)^XTPM-KJIJLDORRU ZN]$`b"dddb_\XTPSL IQFCCBCE(HJNQT5WtY~ZZZ,XUROK|G"D0AM><;@CFIL/NPPPP"NLNI>F9B?CA[CtEPFF GFEGD3B?=:8 6310.g.<..Q/0W235P749:;[2|7]Kߦz6vr- _/żU.=in`<.~Vԥ9ⴅc=6t&ԬΪYKHp5nZ]CNҹcѸ bYѪHl,QQө7Ƶ@ҿ§K25ķӵxï^${[%nʵwn}$P˴QoLkH/Õݽ6} LÛ vʉzήQEYBԮԁ!uQ; 3wdəʱ˄ϧkҞGnx`ړ&܀ݢݴZvvwCי~ԶԜԘvֺuٱڕV6YY/ s,1q G;J^tJ,c113V3M\Y>U"\'Kl46Uo@yF?\ZN$l4[6uPZUF.Y!_. =],UW]j-Z7Zn{GDkw"h.@0+m] D|n4Uuo1 =gj[" !?""#X$$.%z%%%%%%%L%$$$1#"!n! @ d$ 2s<] !"i#P$%&z'U($))*C++M,,, --,,t, ,+%+*)%)g('&#&%v$#\#""<""!"*"m""]#A$$%&'()*+,-.00=2235444)5G56554`43S3a210/ /<.m-,+*+*))())()4))**X+6,1-+.U/013t457c89:;<=>F??@a@@V@*@?f?>>>=B=;;L:9k98888)99l:9;I<=><@AaCEFHNJ LM6OPR5SKT5UU[VVVVjVU:UpT}SjRQOnNLvKJH$GEDCB6B~A@@@@@}A1BC?DEFHOJLMOQSUWEYZ\]_``aaaaaaaC`Q_A^\[Z~XV.USQ?PNVM LJtJIIHHHHIBIIOJ-KKLMQOP9RRTVzWXQZZ\]]^^ _+__^V^](]\ZrYW/VFUlSQOMKJHFDDCA@?>=<1<;;;;;H< ? @AABC%EGFyGGHIJ&KKKLLLKLKJ?J\ISH(GE.ECSB@?r=<:^97O6433100[/..B...5...//7001 2234[56v677288889988=87`76543@392?1:0*/.-R,>+1*.):('&&o%$n$<$#####$`$$L%%&&'V("))*++u,--7.s...-/A/8/&/.. .--,,+B*_)t(''& %$=#g""A!} 1 /Z<9A`d& Q!!*""{##p$$|%%=&&&('U'j'w'|'h'S''&O&&%%e$#8#y""L! ;c?[`5eXr3@(nMZi$AB:Y?^U[b~.}[, 9~$ hH WP j,DDQ= 4ay/[#5Um~`WB"O > : I ~ B m c .  |wqqrznu     yU@{C't8fIvG0ykQ${_A:( <p= [%gSp Do;h)|tn GlvwC"c7#yY~Mߠްݼ܇%۹ۭۗۗۯ#܆ܰiݜ"Y߱m8" ^ _߬qݑ"ۋwXؿ׆E+Ӣҗј8 α͒p+ṇYD1c1ҘbӀ-Հ\Lrui\}<֙qԏg4JJCSG*Ĩñ xI%Ǽ%ľ'> ĉ8ſ>``G:yp/~ ü/iѴ Ryܮѩ`;^Qj۩\nAQ~=wjTwODuнŽ\mmȹj4h{eꟚ֜Q} e2ҜuӞM0(EVc:kWҽܿ'mq*@Xﴽ.)Ͱjf:îV߯09PöOߺr, ‰(ł:Ȏ'T\2͒Ay\!ΨT͟?̉˯\ɉ'N2<ĭ8öþBĨĠ3(Ⱦy`_ ` }%ս][جpg\rܗܛܕ܊r6ܱwڸ ڻlomtՉ԰b_70.3FxӘ ԊrՌ^<د' zuqiX>|0mb93,"hAJ6nDߴsNA0-4IXߊ߭)_4ef~>b k?>(m/[ Rq}i>& eIkJ@.('+0,8Jy&NLZ!e6{JJ~8}-Tw BQ^s{|}}|{yyxy{|xn},Cy`&x.X+T|a0Ol %Ul '2Sj:Yi/@`p!Gblw #(1ARVbhov~DVj~=Xt!@Ky )R  % D o { u i i \ O B 4         ) 5 U s  6  1 . # 5@`z!(:LH=5)nQ/sU7vrtv3S?O"c+n\`Br/Mj?uH'q@ e7 rP- 9ugYH+FFA\,\ / ` |  { t T J A  zJEHEl`XNEER]r7mf.sB !y!!U"+###H$$G%%%H&&&0'Y''''((((('''''-'&&&X&%y%,%$$##L#""K"!U!!  \0[ H O!!"g"7##-$$%&~&&r''r(o))V**1+,,,6--._.../s////////////...G.-S--,`,+7+*r**)((6(''&&W& &%n%:%%%$$$$$ %%~%%%?&&:''(w(()`**p+,3--P../)0W11}2334255466j778j88=9y9999999999*988w828r776T654443321D10L0/ /.B.---,,Z,9,++++++M,,,-B--k..J//0_112.34&55~6377999:S;;4==s>??@ApAA2BB.CXCCCCCCCCCxC@CCBBAfA@@@??>=<\<;C;:+:8w87j76m6554e4433g383 322223I3z33J44555m66(88l9::;F<<>O?@@AtBACDrE1FFG7HHlIJJtKKOLLL0MMMMMMMMM!MLLQLKrKKJuIH\HG0GFEDCHCBAGA@@>A>=<=<=<;(;::M:(::999 :1:b:::9;;y<<=%>>]?@A^B%CCDEwFMGIIJKLaMm>===<< <;;;;;;(>g??@#AAbB CZDEErFGGH=IIJ(KiLLrMM{NN_OOOHPPPPQ QQPPPP3PO3ON:NM9MLLcKJJHGGCFoEDCC@BxA@?W>=<(<~;:D:99879766J66555555556U666677 88w99:;;0<>?@!AA=BBeCC]DDE8FFF%GsGGGGH&H$HHGGGeG"GFzFFEDTDC&CBAOA@?O?>1=q<; ;J:98-8y76%64\43432A21Y110!0///n/X/D/N/X/j/}//0a000N112r22c3L44\55s66u788 99:;;;_<<1=~==>>>>?4?O?G?@?4?)?>>q>/>==+=];rbXMGBBB9.8AP_r!@` .Nn ,;EOSWK?7/"a;Zc%h&Dy6t4f.f=xcM?2+%(7Lb} 6`Bg0a-U|%*-5<;;2)zP%Pv0O]ILUNx4MjL9%!2&yNjxy*&l .f6n ޟ2})ۆ9ڮdٳٴٌdG+ &BhٍٯAځ Oۛ+njݽf޸ Mߑ&j(\';ENKG-T JߟKޏ*Ypۀ ۗ!ګ5ٴ2س3ת!֝իO:DQ)<ղMѱ~ıJ޲=$=Ҷ45㸑J~Mྡྷc$m""y#_qk@ʚ(YZˊ˰˥ˊP|(efyǀqFŬĊK­sؿPȾ;<.E߻yh33ιfnuӹ]M'I῏=;;æboȅ''`ˏ&ͥ#ΓaapЫ 3Qnooo\H-ТYvϫ9LZYZEʹ9ɹ.ȣǔ !ƭ3źLÉ4‹FFkZHHHjkEœKã rwxnj,cdɘ4ˈ$ZΈψзOYL<ԛԜK՛1aְְ֑֕a,էWնeԛ.YYzшС3ϼD\̜6tv?@ ɛtKA7.$,,3Yɦ;ʏ56ˈG9ͮ!ΞϞϞ еI]sԝ$$ժ+֬2׷)؛k:ڋ`۠+CCZckor]H%۷{?ڲm(vٺb إ>oֺcc Ԁ4ӰyLҼҥҍ҂wj]m|҉Ҋҗ"Zӏds8֦וtzk{܍ ݄ ޏߑr]!H1x5\\ ffE#pFFW/_C& 11PnV^>OV/Yci ^9w7rr#@]}}  qmijhf\PV[WWR`m1Gq]-]\//=KC;86++ nG"WW&R~N!gD%DDoAZ h*)G j; !w!w!!I"""X##$$h$$%A%{%%%%*&^&w&&&&&&&&&&&&&&&&\&8&%%%%W%%$$C$C$##n#%#""<"<"!!W!! L  G~_UKCC<?D_{ M  a !r!!2"""#z##f$$M%M%%F&&A''-((("))*{**G+++,t,,-`----..a......// / ///....p.G..---M--,s,,++Y+**D*)v) ) )(I(''&'&&h&&%|%,%$$$k$:$ $#####~#x#r#z######$D$y$$$%c%%&j&&&N''0((")))9**B++Q,,,{-..//$0$00,11&223w3w33144415t5t5556C6X6m6m6r6x6{66d6I6I66555Z5554o443i3332&21W10g0//s//..-4-4-,_,++4+**}*8*))n)9)9))(((((((((( )9)8)g)))J****V++C,,2--8.7..e//0 111\233744h5h5 66;77P888a99\::1;;;;\<<<=N=N=~==========w=@= =<<J>>?%@@2AAA#BBCjCC DDNDDDD EEE#E'E+E EDDDDUDDCsC C CB@BAYA@L@K@?9?>>=>>?S@AABBSCDDlE!FFFZGGyHIIIImJJ!KtKKKK'LAL[LlL~LjLXLWL.LLKKPKJJJ2JI_IHRHQHG+GFFaEDDDdCB BrA@@@m?>:>===o<;e;:y::99B9888I8I8&8888 888<8`888;9999\::g;;;<"==x>1???@fA)BBCDDmE;F GGHIIGJKKLEMEMMN'OOPPPPQQQRwRRSSESqSSSSSSSmS8SSRRR!RQGQPVPVPOBONN^MLLL[KJI?I?IHGRGFFmElEDGDCCB"B!BA0A@?k?k?>Z>=x==<y>y>>]??m@@zAyABB:CCZDDDEFF.GGGFHH/IIJoJoJJKnKKKLL-L5L>L>L?LLLKKKAKJJJ4JI\IHAH@HG GrFEEiDhDCBBYA@@?>>==c<;;:9%9X87666a54 4h322021-108080/~/)/..S.S./. .-------.@.k.j.../a//0/Y001o11827222[3344444S55 6[6Z667?7|77778=8]8888888k8N8 8 8777B7666T65{554443321`100:0/.R.-- -b,++r*))4)('m'&A&A&%<%$7$##]#""3"!!!>! v c b O I C @ > Q Q e !I!!!"E"D""" #V####5$x$$%_%_%%%:&o&&&&'O'''''''(+(6(A(3(2($(( (''''v'F''&&&]&&%b% %$$X$###""G"!n!!   *Nkk)h  Vee#]/.iiOGACFFGH[oFFpEv6Wx(;Uoo]];d$r4R  u).//6U nn.y::sJ((p[HCC??@EKJJIUbq />MMLLV_djllo_PJC88-{^// f - - h 7 7  T C  k 9 f: V2 hBB*yj]\O9$uj`TIH/yeeP;%yj\??#l\L=-zznaV?) zqqgT@6++  paQAA1 yggT5eG6& ~wojdSSA?<:999899//$&(+.0025799;3)+,,,+)(%%"ttbN:%%y]@"xLL+ eEvv\A*wj`WWQJ9((('+-238AIGEER^m|0?NRRT`ktt|wrmee[NA1 uT3h33~~O H]0nI$rrO- &<UfvqdWC..Wm/kk$3KapA{AV)x__EB=CHIVcy&&R N{33q..mDD{??j b5T 66G6u`KK&}}-ޔKK ݍSܮ܆hJJ7#)*@`܀ܪVݏTޘ,l߬GG0}N G>Vngg=gg&;)^^߅ߢ,,޶>KYh}}ٙ*X֖>՘JԍԍU*ӱӠӜӘӘӢӪDqԨԩ_է?֍5׌׌<ؕGGٞIڝڝ;ۃ K܁ܷ.N`rsx}sjRR:ܸ܃܃@۬\ڠ7ZZigW=ծԊeCѵ'ОϔΘͰ̰Az$$ʆ=ɟu[A78.4:PfgɌɱZʚ4ˌˌE̦uvP22ϤЈgg?Ҩ mm oԾCxլ #(,- էէw6ԣԤQӍӪҪ,ҭ"іm1Ό͍@̗ABʗDȜVƺʼnniZÿO(ھپؾپ"F}}AR&–Ë ĎŜ'Ʊ;آSS34֢\խՀOԵԙԕԖԒtVQQLT\qqԅԧ%&`ՙ$$ux<إ~~aKK:ܲ**ݢގuS&FC;m &&6GLQRMG8((`1\"k-r4O߽ߏiBC$޽ޫޚޚޟޤ޳::gߓ:xNN=EZxx6OZ[U3y.f!@@Wm{vfRR=# eeA^99uYB*+6QQsBvVW$k@Y$$eYY..\/LLe~zl]]OA3%% /H``|Af 99eL{ 7ffFq7Z~~4DTTk #..9DMVV_hpyy--=L^oo"-9EER^lyy )9HHd''5BNZZgs~##,5>HHZmw!!/<KZZhw//Khy-;GTT`lv      )**+.0337<AQQaiq{{'<RRh11Mj11Om%%Mf  % @ @ [ g t | | w j j \ N ? 1 1 !       < ] x   7 \  : d d   > k  . W Ft':UppyueUAA-vX; m U U < '    . . C ^ y ??i&ZJ0j"f =on0/e00CP^pp}wj__L;00%cc;UU)}^??qWV=2' 2FZZv*YY?z9{V7V/}6q 9oo.@@JTccrlfXXK6!!h:: ss=p5QQa5zy`G>66-#"""*2CCTw 55h[4ms))+%v(qA|! N M z !!.!.!5!~>????r@@%AzAzAABTBSBBBBBBBBBBBBBBaB0BAAAWAA@@)@?L?L?>X>=S=R=>??N@AAsBsB.CCDD=EEFFGG:HHHIyIII-JJJJJ K-KCKBKYKLK@K?K)KKJJJVJ JIIcIHH H HG G{FzFEGEDDDoCB%B$BA@)@(@~?>7>7>=<^<;;5;:99d98X877q7 766j6%655555h5h5o5w555556O6N6669797788899:::.;;g>>~?@@@aABBB,CCGDDDKEE4F4FF GnGGGG7HvHuHHHHHHHHHHHkH@H?HHGaG`GGF6FEE0ED#D"DCBPBAA@U@??>/>|=|=<>>>c???@e@@@@(AYAAAAAAAAAAAAlA>AAA@@2@2@?s??>>.>===<''&&&&&&&&&&&&&-']']'''(([(())\))****G+++*,,-|-{--Y...0////i00011~112n2m222$3P3O3y3333333333333}3\3!3 322j2 221s1110M0//`/.z...-,u,t,+t+**o*)Y)((\('T'T'&l&%%%&%$a$a$$#\#\##""s"s"E""!!!!!!!!!!! """N"N"{"""&#%#`####B$$$B%B%%&Y&Y&&'{'z''-((((P))))K***/+/+n++++',^,^,~,,,,,,--,,,,,,,,,_,1,1,,+w+w+1+***6*)))$)(R(Q('t' ' '&&%%3%$Q$P$#\#""""!!A! y x  baL |VU/  "!6Kaax65d>=x- i !T!S!!!!!";"c"b""""""" # ###$##### # #""""""S"S"%"!!!t!4! 9 :V NN|E}]DXRfBA$-D]]v(??Th{zlYX?%oDyx>s2l''VV< l ( ' c c # o 5 T S % ~ X X 7  zggUE55(wmaaUH;;+  uu]A&&iiE"f@@xPP~nRR7seOO9-   ulddSB11 q]]I5**xxi[AA' gWGG-ybbJ5 {qrrtldd]VYY]WQQTWXRLFF?BDD<4,,#!x`FF4"ttP,{R22gGG'~~aC}]]=+zmooqkeenwwwwz}}+6BBLWjj}r^^F-uTT2RRNO`.HH w??[--hhZK66! %%1°°"ç--ı34ŽD[džȇɚ !ʦ%ˤˤ#̡ w3΂^ϋϋϷϧϧzKKϸccΠ12ͼE̷˸*˘`ɻqǼƽYũĪ6Ȉ$oo˿&ڽJ,+II۹:; ظƸǸøҸӸ;???0"" g@@rrMssP'kXXE.$%B[\u<=uMM`/uuaa99e*ii^Ky4KUV_dghfehhkaaWJ<<4,,iSS>** ''=QuvGvGssEuvA{{ 8n$Mtt45Rp 0FF\hht}''/99BYoo}11G] :__:KK[ll|4KKXeer )9HHPX``gvv##5?II\o{{ %<SS_ll !!6??H[oov~    %-../88ACDDOY]]`eejw(?PPbt  +CC[}&&Ib||4I^^}*)>SYY_oo~wvvthh\YUUG88*%%<NNaw - - T u u  8 8 g 5 f f  E E j  ) Q Q y '&6LLahhn|z{z{mm`YRR>*) f I I 5 ! !  s ^ J J 8 ( ( "           , , 6 @ @ W n   : ^ ^ IIHH0ooWW4nnHHw**E_hhq~~}utqmYYE77(  utL%mlJcFF)wdd^XRRKRRY_ffsBii0cc[$onBdc2z66lBBl$DDR`gfmvvvvlf``H00}N`_'TTNNllA##&Q||Ta:--*){(!nnK$bb  Cjj  % % ' ) " "     {[**YX&`RRCLppEppe[RRJLLNaauFyy&iiUTNj$H j j !v!u!!'"'"""##]####-$_$^$$$$$ % %4%H%\%\%d%m%m%j%h%e%e%b%J%J%2%%$$$$$v$B$A$$###T# # #"t"&"&"!!!:! I \\{{3j87||T?)) .Jff**f18K K #!!!!["[""0#/##$$$$S%R%%&&&&H'H'''F(F((((,)l)k)))))(*O*O*w***********~*^*]*=***))))L) ) )({(5(4('''A'&&&6&%%%"%!%$b$ $ $#\#[##"T"S""!!s!3!2! ~ } I % %    % \ ! !R!!!!N"""#i###?$$$#%%%&|&&&h'''h((T)T)):*:**+++++\,\,,--m--.._.... /A/@/t///////////////Z/Z/0///..U.U. .--q-&-&-,k,,,+E+E+*{***)7)6)(`('''9'8'&t&s&&%u%u%&%$$$N$$$####t#U#T#D#3#3#8#=#=#J#W#s#r#####)$a$a$$$$F%%%%\&&&+''' (( ) ))*** +++ ,,,&---'..5/4//$0#001l1l11:2:222C3C3333 4M4M4u444444444444444q4H4H44333O3O332e2d2211510d0c0////.".".-1-1-,T,T,+l+***.*.*)p)))(h(g(('''o'B'A''&&&&&&&&&&&&'E'x'w''''-(}(}((3)))*k*k**T+S++_,,,h---|.///7000U111n22234445556666X777 8a8`889859k99999999999999999[9Z99888F8777B7A76m6555554&4%43!322211 1000/ / /.A.A.-c-b-,,?,>,+++]+++****s*_*^*S*H*H*N*V*v*u*****%+$+`++++Z,,,%---.{.///00041411e2333948445666R7Q7788#993:3::B;B;;;<:<<=d=d==>>c>>>>>&?%???Z?Y?V?S?S?H?>? ? ??>>>Q>P>>=s=r= =<<:<;;I;:+:*:988D8776O6555]4]433321U1T104040/2/2/.J.--x---,,,D,,++++++v+v+l+u+~+~+++++,,R,,,,/----?.>..////o0n00q1p11i222d333o444a55J6I665747777S8899W9999::/:X:::::::::::\:[:6::999P9O9888?877t7 766655 5444n322C211100/Y/..,.---,,,}+*****)9)8)(u()()('''S'''&&&&&&&|&w&w&&&&&&&&"'`'`'''%(%(z((('))))?***++++\,[,,=---....Y/Y//10000:19111102m2222 3 363d3c3w33333333~3}3d3<333222w2322211;1;100~00//1/.Q.Q.-P-P-,G,F,+J+**8*))*)((0('0'0'&;&;&%f%$$$3$3$###<#"""s":":""!!!!!!!!!!!!!!!!"C"t"s"""",#q###$P$O$$%%]%%&&k&&&4''''G((()a)))*O*N****2+k++++,,0,^,u,u,,,,,,,,,,,x,\,\,<,,+++q+q+/+***T*)))?)((((('7'6'&X&%%t%$$$ $##0#""I"!!k! ! F /VUoGF"9Z%``--s M A!@!!!%"$"w"""#T#T###$$^$$$$$%%H%t%t%%%%%%%%%%%%%%%%|%|%S%*%$$$$$[$$$##3#2#"""?"!!!$! n  :tK00''=s88ZZ=  /.QtAmm =wwML 55c*)<PedgiimqbbTGG:\\.;;ts#?CB?EQaaES!bD''   88Ull.PPr33>IYYijikpvulbb\WAA+{{Y88LLt76HT c c - P O  O )   q q P / .   w w x y y u r r x ~ ~   l l ^ P P 6  qVV<bbB!!^^4}]]6fD**n[HH0uccQ?..+(( }oojeeVGG7'taaM::& |iiaYYH77&vjjgddYNND9//$wffUCC1 |ccI/||^A##gJ..v__K66#wwhW==#b=X,yTT/{{P$$mH%&ssZPEE5$$  ()3ANNg ::Wjj~qRR/ p@@pp9^!!i,,vDDl66vvW66~~kXXURKKDDDCIINYYd}}-NNn 1VW| ..V}} /??OQRTPPLAA7%%`33d++z67_}~9YY v+``$ii-f>?--Syy LxyN/jjHHw,TU}kl< mm.nn*==BEEHJijQRoo= ߭ߍߍ߁tpqmjjgww߇ߖߗߦ +\\()e&bc3stEG/ee3HH^ccgiij[[K77$[[*f#$2((uuV45i߳SSݡݡOܤ__۠cd&ککڀklWC00122588Pfgڈڪڪ#WXۋۿۿFF܈gݱݲPPޤPߝߝ<<hi-jj.YYzggCww=_` `ߘ77ggݐݑ'ݵܵBnۜڝ/aٝ9:דד@֫jk+ՕՕvX;<!!4JJ`ՋՋնOO֏ ghׯ]^رduv99ےHܥܦWXݤ;ކ78qߘߘ#,-612-߾ߋߌY ޝQR޳ݴTܒ00]^qrًًّؑؤ&&ר45JJijԞӞ>nڞڞڿگڅڅ[##٩٩fuucם67fԕ+,^_ҘҘ:х..ВВN ϗϘk>EEmϢϢ]ЬЬUUѯvwQQ99Գ,-ժ((֨()ש)*ة((٥!"ښۃۃ``,,ݎ=މފJ~~߲3?@LKIJ<..߭߭}LLޕRS ޿ݿo x""tuouu$؍GH׆QR֨ևֈs^_VMMPSTdst֏֫֫/bbנ'okl%&چR۽۽'ܔܔopMM޻((ߕi45NKKMN ,KK_s||stgPP:vvF^TU=>q..߰߰v;<ޥwwQ* ݻݻݰݯݯݮݷݷ GGnޞޞ?߀ PQ@BCT jk##~000a!!\4NNfpzzzzzxvveTU;""qCC}BBWW!gh*SttK'::^N7xxS))qZZ/zzF;lm>bb{^^C((W))rr? SS$YY5xkkmooooov}} 44^=>wP NA>vv'XXAee**5::>CCH@@9,qqO--vVV.}}Y44zdd[QRE881))'$$1==FOO^ll<44"yppsuurnonmmpqq =YYp,,Faa}0JJk &';OPbuu "*****)''*..*%&  ,,=GGQ\\g}} ))9RRj{{ ++;PPess&&,339>>CHHMQQUYY]``cffilloqqtww!!*12:CCLLT]]foox"")//6<<BHHNTTZ__ejjo{{ ..??ISS^iis~~))5AAUiiu &//011111000.--,**(&&$"" """#$$%((*.-166:A@GNNU__hrr|  ,,>QQdxx/CCWkk  ((6CCOYYddmvv}}ttlcbYOOE;;1&&  ((9RRk)DD`||  (EEa}} + + B Z Z o              #      m m Z H H 5 " "  uui^^SKKC?>:886779==BKKS__kzz  4 P P n   6 Z Z ~   7 \ \  = = ^ } }    1 D C V V d r r } ~ r r b R R ? ? ,    j O O 4   m V V ? ? *     5 5 M i h / / U } } & & R   4aaHqq%EEa~} pVV8tRR.  hGG'' l Z Z H : : - $ $        ( : : M M _ r r EllL||J.bb00b@?h2FFTbbr~tsjZZJ55 kkEzzN""VV,lkI** {{xut~"DDgDCuuQQ NN1}|ffHWQQAfffML&TT,xxI""||T00 3__77zQPOO]|{OO{{JJu. 7!6!!!!&"%"h""""/#/#_#######$$.$.$G$N$N$U$Q$P$M$?$>$0$$$$#####w#w#L#"#"#"""q"3"3"!!!n!0!/! X W  KJJJYX4!!Amm RR8O !!!!i"i""T#T##T$T$$K%K%%%C&&&:''';(((%)))*t*t**E+D++++Q,P,,,,0-x-w----.+.+.L.K.l.w.w....}.m.l.\.G.F.2...---t-t-<---,U,T,+++1+**j* **)1)0)((W('''%'$'&X&W&%%%C%$$$H$G$#####H###""""""u"k"k"i"i"h"u"u"""""""#O#O####$k$j$$$%q%p%%F&F&& ' ''((()))))z*y**t+s++r,q,,[-[--%.$....*/z/z///0V0U00000111101P1Y1X1b1d1d1f1[1Z1N1,1,1 1 10000L0L0 0//p///..f...-/-.-,L,K,+d+d+**n*))t)(((((' ' '&&!&%%E%$$j$ $ $#Y#X###"p"p","!!!!!c!c!?!$!#!!! !!!!!>!_!^!!!!!""a"""""=####;$:$$$$P%%%&&v&&&;'''(j(i(())z)z)),*,****+U+U++++,,9,b,a,,,,,,,,,,,,,,,,,,,P,P,,,+++s+3+3+***8*))))+)((U('''''&5&5&%%O%$$q$$$#*#*#"N"M"!!!,!+! v v  HHi@@#! A@l;tt  P O 8!!!!A"@""""D#D####S$$$$J%J%%%%6&6&&&& '='<'p''''''#("(7(L(L(](o(o(t(y(y(k(\(\(J(I(7(((''''e'e'1'&&&&f&&&%z%z%$%$$r$r$$##H#"""""!M!M! ~   YY<Bdc#PP-  +TT}IIYX00 jj  U U 44\[8rq== xxGrr@xwB j j > >  o o U E E 5 + *      $ , , 4 F E W l l   6 6 U o n  99Vtt##2AAEEIQQX[[^^\[ZM??4*) rrS55   w w R R # | | S + +    X X 3 y [ [ = " !   s s b Z Z R R M I I H H H F D D K J Q [ [ f n m u u   + + B Y Y i z z     # 4 4 C Q Q V U Z c b k r q x w z } | t l l h h d \ \ U C C 0 0 "    w v ^ C C ( (  i I I *   cc??~}aFF1   --;IIVV\bbmyy}}ummcYYLL@**vvaaM77!tsXBB-}}nZZG;;//${{qqf\\I77**{zgZZNAA44"zzgTTB00##uuf\\SCC44$ kXXDD/ hQQ9!! xxhhQ;;%{{rccSFF993..#yymmaXXNO>.. rVV>&&kkG""iiHH iBBvvT44mmYNND66'' ""(009IIYYdoo{ $**(%%vWW77V((h::^,,O~~H}}VV.rWW:**>VVm ..RRv66OOg  uuWW4W$$vv;==ss1]]\ dd00kl:;~oo`XXPPH@AGGN[[hvvCfgDDp44ggKLx )GH[oonnY77qq89JJ tt++GLYZ eeyy2Yst>~abE88,,($%#$"00?UVmmExyLBB}A33o==k!23CDQ]]addYYN==-xJJT y+,z""nnVW..qr߳RRޤޥSTްݱ_ܜ`a'۝~`EF++"*+7GGXXyۚۚH܃܄ܾAA݂XYާި@@ߊߊ*+zV++nnGHtt)*+,. uCD R_ J|ߤޤ4Qqqܐۑۭڭ<=bbؒ01||))ֆև@սսՁ^_;@AFFQ[\zz՘##YZ֛(stnn00ٕٔhiFF۷۸)ܕܖvZ::ߩ|EFK:|}00]  ^_23g,,pq.VVD߂CD ޗޗ]00ݺݺݝ݁݁no[RRIBC<=HRSgh}ݜݜݻ @qrަb߬߬GGCDOPee%%AASH11vw67l:UVpmUU=> ii<ssBBxxGGUU-.qZ[KL<--%%,;;JKaxx##PQ+jj00qqE*vv[\11xxHH>>tt *IJhhuWW99kDE~WW01 }}X23 &HIkk??o >?vvW00h ??qq+VV}}""6II\\o||{{ll]KK99$kkO44zzaKK55"//IcczzCCj=iiIuu>ff<>???<<993..%%{kk\\L==. 33FG]ss#AA``!!Bbb=TTll--@SSddt//@RRccv 33II]rr%%7HIZZfqq#,,55=EEMMTWWYY[]]__`bbccdeefffgghhhiijjkllmmnoovv~ ''.55==DLLSS[bcjjqxx #'',,066::?DDIINTTYY_jjttz"**2::BBIQQYY`ggnnu{{  %%,,3;;DDMVV``jtt$22??M[[iiv  (//66<AAFFJMMPPRTTUTUTTTTRPPMMJFFCCCEE??:44..'!!((4AASSfuu((<<Pddww ..?OO__n||||ppdcWJJ>=1))"!  ''7JJ]]q00OOi55Nee}}   * ) = I H T T ] \ e k k p p t w w w w w t t r r m h g ` _ X N N D D 8 , , # #  ||jWVDD1  zwwttsssvvzz((@XXrq  ; ; Z z y  7 7 [ [ % = = T T i ~ } m l Y X C - -   t t \ C C + +  t t f Y Y N N C < < 5 5 1 1 - 2 2 6 6 : > > F E M Y Y e e t ' ' D c c   9 ^ ^  ? ? d c   2 2 R o o  ! 0/?KJVV]ddggjhhggb\\RRI<;..   q q U U 8   b b D C %   t t ] ] J 6 6 & &     ! 8 8 O f f } }   4 4 Y ~ }   H H r ON~DCtt0\\7SRnnkkSS::kLL,, ww[BB))--Jll  :mlJJED  R dd/.on++d88hh"??UUl{{ss__K,+  ]55  S$#dd6__:|pocc^YY\[^iittBnm  FE  QP33$#wrm`BON&&UT{!\55sr:9LONUUr==mlL33  33Oqp&&[&ll`l22PUT  J I y !*!)!K!K!j!j!!!!!!!!!!!!!!!!!!!k!j!P!,!,!!! l l 6 j&%40&ml YXHGDC[[QP}RR,+$#Ccb32b  NM| ==dd88WVi}}wvdcC$#W)(|CB||;;hgCCjj!SSyyLL jjLL8$$00CCVji ('BBl 00WW77RnngOO76ZZ11 MVV&b55 \ 4 3 s \ \ I I 6 % $          . - = < L K c z y   3 3 T S u /KJji.>=NN_gfnnwv~~|||||wwrcbTTFF8!   ddD$# _ ^ 4 d d < <  t t O O (     e e L 5 5      , C C Z Z r r  , , F E Y Y m      % % 0 0 3 6 5 : : ? @ @ A A 9 1 1 + + % %    n n P 3 2   } } Y Y 5 4  l l M . - qXX??((yymmhccba``]ZZ^^cceiirr{{..A@NN\nn              q__ML43qYY<<llQ<<''rddVVMEE??991))((&&#""$$$%%++008??CCHQQ[[aahrr}}qq_QQDD0  {zeeTCC..  {{ppeWWII@@800))              ttg^^UULBB44%%~~vjj^^VVOED::44.((""  ||xuummeea^^YYVVMDD??;;1''"" ~zzrriifcc[[TTQOOLLJCC==;;933--++)$$ ||uumaaTTKKB55((yyppbUULLD<<55))yyn]^MM?@2 q\\LL;<'yooeeXXKDD>>44*&&##"" ""$$%%-55>>GGLRR\\gnnuu ssccR<<&&ww\AA*+~~jjUVC00{|wqqjjkklkkiiottxx{{!!..@@Rddvv "%%!"kkVV@$% aaEE((kkOP44~~dRR@@,,  ()::JYYoo 22Jbbuu $-.88BBEIILMPPMIIFFBB;34%%mmR77tuOO)ooHHwwO()ccE**++AAXpp)BBZ[ss&&-.4579978562..""ttTT4kk<< uuAA pp9:``*`56 hhFF$|}uvtusww{|++GfgAAfg"GGjj*CDXYnn~p[[@@%%m@Apq66EE CD|;;zAA _`)*qqKL&  =`a33ab"#TUN//UUzz,,9:?EEDDBB8// yST((__''kk**YY44WAHyNO%%{pqffdebhioo O2rsFF ijJK*rsEByzEop"#/3377440%%e@Aaa00`a,,[\(uvM#$klYYG;<00+,')*,-77AWWmm((TL8vw?BB==x!"UU7ZZ}~ !"bcCC##ee;cd99opLL( xyfgZNNGHABA@@FFKLWXcuu=de??qr ABwxST33fg**XX;!kkII'(`@A#$yymnbbVWKDD==;;8;;>>EFMNZffwx&&LLrr 77a@mn""NNyyBBg01DDViiwwtufgXDD//{{^^AA'}}ddK88%% 44KLc}} ++LMppDiiBCaa01IIaastrrbcRR@A+wccVVHH<<0&&  %%11@OPabst %%AA\\x ==ZZww--EE\\ss!!''../001133332//,-((## wwmmcdZNNBB;;44/))%%!!$$)*199??DDPP[iivv !!66KK`vv00EEUUffy&&009BBIJQQSSVZZ^^aaddeggggggcc_]][\YYVWSPPMMIIBB;773400,))%%## %%++23:>>BBKKTT^iitt $$//==LLZiiww!!**3;;DDKKSSZaaddggmrrww{{ !!$$((008@@HHPPXaaiirrzz %%**0066;AAFFKKPPU[[``eejjprruuzz  &&--33>HHRR]]ggr}}  ((,1188@@GFMSSYY__ddhmmqquux{{}}~~}}}||{{zzyyyxxxxwwwwwwwxxyyz{{}}#11@?NN]]m}}00AAQQbrq'')),+16598<<==?????>>==:884400+&&   ""33FFYmm44LLccww'';;NNasstteeWWIH:,,  ~{{zyyzz||#"98OOg##@@^{{  ) ) B B ^ ] y     - - ? > P \ [ g f s r  x x l k ` ` T F F 8 8 ( (     v v ^ ^ F F 2 2  {{nncXXMMCB==86654667799<DDLLXXdcs  4 3 N N i - - M M m l   = = [ [ y  , , A A W V m l z f f S S = = ( '  r r X W = = # "   p X X E D 2 1 ! !       , , ? ? S R l l  > > c b " " G G l l 3 2 Z Y | 'EEdc{z "!$#&$#!!  hhPO44 { { \ < <   | { ^ ^ C B '     t t i i ` W W U T R R U U X _ _ f f p p z y  0 / Q Q r r 1 1 X W 44aa 98d  Ded+2188=<AAA@@;;65(( jjLL.-  XX3{UU/.   t t Y Y > = (     9 8 Q Q o n @?iJzz@on,+[&LKnm((66>GFFEEDBA>>65-{{[[;:zyQQ('{zQP''__<<yyggVVJI>=711100055;:FEQcbttDDkjMM~P))_^0/ba33NNddzy||iiPP7ed9 }}KKyxBB  lk76qqCpoML*   { { s s k k h h f f i m l u u ~ }   >>\\},,QQv  ..Rts  %?>TShhyxmlZYB++kDDrqD]]/. z y N M & & h g G G & & t i i _ ^ Y X S R Q Q P P T W W _ _ g g s s   & A A ] \ z y   / . M M k j ))?>UTh{{||jjU??&%   r r P P , ,   o n G G  ] \ 6 6   k k M M / /   v v i a a Y Y T T P P O O O N R V U \ \ c c m m w w   , , C C [ Z r r     / . D Y Y n m u t ^ ^ H H / /   i h I I ) f f F & &   sYY??''||rlleebb_^^^^a`ccihnnvu~}+*<<NN`rr     % $ - - 4 3 : : > = A A C D D B B A A = < 8 8 1 1 * ! !   poYCC++{z``FF** ||ffP<<('}|zzyyyzz||##-,87CCMMXXblktt}}{zrqgg\\OOC55''xxddQ;;%$}|lk[KK=<..      ##%%(())+++++****('&""  tggZYML<<,,zzoee[[QQHH??66.''  {{sslldd]]UUMEE>>33((  yyooh``WWNNGG@@8800)## zpphh``UUJJAA88,!! wwjj`aWWKK>>56,!!zvvrrooiibb]]WWOFF>>67-.%% }}jjXXGG66"#veeSS@@-- wwnnhhaaZZRROOKGGCCCDDDCCBBEEIKKMMSSYY]]abijqww}~yyiXXDD00zz__DD++ttYY>&'wwffWWHI9:*+ ! **66DDRR^_kl{| --::GGUUccmwwvvii\\JK99&&`aBB$``=vvXX9:yzaaNN:;( &&78KK^_qr**CCZZpq**;;IIW``iipqxxzz||||||xstjj``TTHH67%%wwYY67ZZ44 vPQ./ ijJ00wwmmjjfgefddijnov|} &&AA\\wx33UVwx88Vtu-:;HHST__dejjmmoplhiffcc^^XYMNBC55((uvZ[? !jjLM-opXYA./ /0EE[[qr"#EFhh>cc78XYy 77LLaqqz{k[\JJ88!" yz^_CC)*uv``JK55  12HIbb{{"#CCcc !AAaa~ &&@@VVklrr`aKL67"" pp[[EE.wwqrllghbccccdeffmmtt{|./GH``x45OPj $%<IJVVbrs !"77MMef~~ !!88MMbbwx%%/89@@GGJKNNPQSSRRPQNLLFF@A::44** ! ssdeUUEE78**  !11@APPccuv%%99Maass +,77??GGOOW\]bbeeggiikkkkkkheeaa^^WWQQJKDD<=5**  {|rrjaaXXNOIIBC>>9944/--+,)*'()*++./22588??FFLMSS]]ggrs~~&&67GGXXiixx  ++44==FFOOWW__cchlmqqttwwwxxxxxxxussppnnjjggaaZ[UUOGH@@9922++#$ **45??LLYffss  )*189@AHHNNTTZZ_`ddikkmnppssssssstttstsppnnllijeeaa^^ZZVRRMMGGBC>>::55//)$%    ''./55;;CKKRSYZccllvv &',1177<=BBGGJJMMQQTUVXXZZ\\^^``____```````^^\\[[ZZWWUUSRRPPNNKKHHFFDDAA><<;;::886633332200.....//00////11224778899<<@@BBDDHHLQQVVZZ]]cchimmqqww}  $$&&((++..03344557799::<<<<<==>>>>>>??@@@@AAA@@AAAAAA@@AABBCCDDCCCDDEEGGHHHHHHIIIKKMMMNNNOOPPSSUUWXX[[^^``bbddeeiimmoqqttvvzz~~ !!%$&&((**,,//2244699==>>@@AACCFFIIKKLLMMORRTTUUVVYY[[\\]]^^^^`bbccccccddeeggggggiijjjjjjjjjllmmmmmmmmmmoopppqqrrttuuuuvvwwyy{{||}}    !!!!!!"##""""!!                   !!%$((--2266::??EJJNNSSXX^^ddiinnssxx~~##**2177=CCHHNNUUYY^^baeejjooqqtww{z||}}}}~~~~|{zyyxxuurrppnmjieeaa\\YUUPPKKEE@@<;7722,,(($$        &&,,22::AAHHPXXa`hhpoww            ~}yyssnniiddaa^]ZZWWUUTTRQPPPOOPPRQSSTTWWZZ]]``eejjoot{{  &&..77@@HGOOWW__eekkqxw}}~~zyuuppkkdd]]WVPPHH@:922**""  $$..99CCMMWVballvv              }}ullccZYRQJIBB::32++%$     $$**32;;CCLKVU__iisr~}  &%.-6?>FFMMSRXW]\bbedhgjjmlmlmmmmmkkihffcc`_\[VUPOJIDC<;44,,$$  yyqphhba[ZTTNMIIDD@@<;997766555546688::=<AAEEJJOOVV]\ddkktt}   ,+77BBLLVU`_jiss||xwonff]]SRHH>>44))  }wwrrmmiieecb```__^_^_^``bbeehmmrqww||''32?>KKVUa`llww~~sshh]]SRGF;;00%$}{{xxxwwwwwwwzy||   ++76BNNYYedpp|{vukj__SHH<<00$$  {zvurqnnllkjjiihiijllnmqqutyy~}  )(22<;EDMLUU]femmut{zzysrkkcb[ZQQH==22('wwlk``VVLKBB9910((!    ""((//66>>FEMMUU]fenmvu}}~}utkkbaXONED;:10&&}|xxuurrpommllkkkkkllmmooqqtswvzz~}    !"""""!!!    xwoogg__WWOOHG@@8821+*%$      ""',,1166;;@@EEJIONSSXW\\``ddggkjnqqtsvvxxzz|{}|~}~~~}~}}|||zyxvvtsqpnmjjffbb^]YXTTONIICC>=721+*$#  {zuuppkkffaa\\XWSSNNJJFCC??<<99663311/.--++*)(((''&&&&%&%&%&&''(())*,,.-//11335587:9<;>>A@CCFFIHKKNNPPSSUUXWZZ\_^a`cbddeegfhgihjijjkkkkkkkkkjjjjihhggfedcb``^^\\YYWVTSQQNMKJGGDC@@<<885400,,(($$     ~~||{zyxwvussqqoommkkjihhffddcbaa__^]\\[[ZYXXWWVUUTSSSRRQQPPPOOONNNNMMMMMMMLLLLLLLLLLLLLLLLLMLMMMMMNMNNNNNNOOOOOOOOPPPPPPQPQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPPOOOONNNNMMLLLKKKJJJIIHHHGGFFEEDCCBBAA@@??>>=<;;::998877665544322110//...--,,++**))((''''&&%%%%$$####""""!!!!  kiki/sound/gate_open.wav0000666000000000000000000006015207644706006014334 0ustar rootrootRIFFb`WAVEfmt +"Vdata>`   0Q",:E: jp]o,dW;2pq"d|-6I<q Ы0 D)r }L E1UZsB7jR}\n RN.|\|c NyPFJmLMC36'NgNq( {@6P8s(#XTJD`bJv^6_Friy=ajQp6.YU0&S\<H,JKK5/OH#U=2J%qjLG'/8v cY[Wv#C _&47B+p6P *  C50YLOyO0@9e_.QxHxv.>YWxMg;FVAp cIuO$M@PN.3`ozA$<pz` vX,t ).2=| uT݋J7b4 s"-*M" cp ۗMԟR p .9K1(4 4- LO&6ɦƼOP*C= ",446g?A6)~"Uz]Խ˗ۮvn  )/1]572&* {Bڰs֠-l=  !"J#9N GPA(iT Cp[u ;7pb41H@0~_U 3 *X :4 EQ{L)C `  5l{n ~:`xfb  F VD%Tey=]Rk5hgu3lr](Jz9oc(e@_ _`+mBA\e/W"4y:e\J T]ts. bG |C y?0J ώS22+@ɘ*wj$?BoA!# Cb^:LN<7 pҝߟ}8A=)SQɃDo_ a(+<&"߱x*d"~{jMU#q)|Sߴo >im6"+:V#) 9 cOff Zv CEX (^D ks>j@F P|9x(CDyjM#) x&q6; * ga;dI#S+2+$i>LH/A>QQjg #*P xa #X  G< |p8= Oku_>z Jnw[xi_G :3sOIvcn"+BC R+&7!y*G7%Gvwaye SOH hP0w5 K_G3-f5XV0`ph | A `?v]~e:C(kg2-v/)r I \  d&Fo.TzEG  E M HxBqAG% {F&dK > _yS{ nWeUNsp`_g C 6xQ, *we!uHY5}\?>i 21"9_}@SI" P..79) 4%+0sX3}:bHB] ))r}8J}\I'D)<f l"^v="04eWhg&D8h~D^`xMF6Y7{r{j S=+a/}5= NV #1G7  MK2+% p֦1y B RF!1 z w= W" HIk)^ p:V Tw\\~ . ^ `u4&ix; ~1&b/  { 'dwx'x;BA'?\+ > Zs$96"G  }&* bv > y!Q ^ ,3;xTu7) O!(u#%$ERK,p׈vJ 9%"&U'+.' .eե(ݢ F :p Q"#!7=RYgoI BV CDfVoqc#1 M :i wy|+L{" C k;q v\%w1Rfh# . L i :Ba6!  >  Cm~1:3 Ojx EG$ ^TvFV4p)m3nY#D%BJQ8.;}p)40{V<Ud3"FJ+KT*sNi5$X.d' xIdE@:OSY(n s"hy<  P beE 17i s j"X~I Xt` />  %Rai/3;Cd%x\8P Wy`r9iixh|WR^(upU 9 duu @Yyt\H! { "`6)20=&ie v  ^ })& t 0 k^-qHg Hsno`jXk#h:/!U:Y^yl(:!0mq v(J'&,st Y.mJ1\@giu}jH>HFrS;8bA{:9 /20r|jDv >1 ^Pm(?2b (7xVc7itt0rPRODye[  +  7oK1dhkT'+.IgXe,+ i@9hZQS!>A}7CJ 3 ~SEz4 B 4 bMK}%2 l=)6^/p0!| v}9]> LhqT%;<3F]}? O \2nAL (m- W "vM~m  . s Eii3@ (c - unPC"%uJ}[N ]Gn<'0IGz FwDvpDH=oBKhQvjbp5;GE:X'g<n,Q9>3. ey;$i-MwKVa UU6L#bte~TZ`l2?,T|B;7`c_VK3ym<RCMFqgk`t0fGfU<]ACWTK,S.`8Dv^TYZ gg}!OLmd*CI:wO`,{8:6 lin p/Kc)}3  R(xs7Q6L]=X @{+Z gj|~,3 O_w"Lc:i&jY_Vhj|TZ\Nl !^0&a6w^+nmKSmI/3y<#zL(`iTKpq?_-2:<{IAXz&CrglMb_Vq)H.@0GJoEyxEHKz#@wU1jMUQZo"@9}8e0Qy:)Ja %4 `b9}sx 0awz.'nq] p24`}zd&us ,@vQ$Z$]l yN"Js5^c>w?clnbO"|GI)!6g(85OBh@J NDOke-d5c # 7boC7?Q}1M]'?sdWH%mP7%E!3}4P"k0-i)`l'_S,sjs oz ]f"3FCYQv!&[ }7ObC~i ~r yPbg =(zI',bmRQV2Uh`&}}hR[i FKZA,6)QE(Y? |t.PlDnZ'7fJJ_8~)?]$>L{  +!67] jz j^(U5IINAV53cceGLBj"k[U;'"9|@ "LTHE 18 wS=ip2.`Y'r/qN2x m6^uu4 gI%"Aee'RaHQ\2?Ae eLpmLMbwUFmS]N@E+M+l:e1V7|,6 %tmo7NMK;K,OGuB/7Y&0MDw 6+D7- N| 0#4BT{MB(9NFvp/x6@HiRi\0 /~aw/@~k]#M[T`(2[ggz(|mnid.o*N-A;=n`Vg&/ay>rPN8ojkUnVLc^nsJOMJUH4L.%2K% {Htsej ~\f:6@Q, =lQ9nD*^`j0bo.#W^kii-*k77|qz70'aNe=X39gnaPk>,!0al ^c+x\y*F2'TCj0s RkDHqOUSKmQ"rzlfBt\D*d>b77OvN]09MObyq(DE1pA|/}nL:; +"|}`'bze/r[ (,UD70rjEou,0:BM MlJ= {I2`VxS? 6 *hHs%3a   x#ppi> YShAm0ON7!] #`I`^Z"zNa%X xl>dyqqE]qXsOs7qR6Q$v \#"eu/OBS]K0KJ^oR 4`G EJ^&##0#pEqR3LKV7&WjC Otq2.e/; j3I!:9t+&E+VpaOt([<%Sx#EhT vgrRgxX_2L`;zQ\G a$skTst:UB4/F{dy9BgJvaK(/VDmqJh? a^1kEJ)>kAGt%y6 SvAP+*NODG;0mfKS bjQ o-~K@b`u|NJ8F~/_2Hew-YtaR?i@`=/@]uc2r5 L:qOmvRM97] !@FRu^KLF/15&D/$Vpnx+c*>*sIJ7F.vn0 7 VqP9 V6'/2C   (eF/NCO^#N7JDp#eZ6UZU>'A:\$2 63y} %+&1fQyP>+QU6BSK4]QJ/}^$uqxwVatl9d*p;x32 Lh!."i 'uv65R mc.e'GOK@1W`$nUx6^pvk)QySdeE!+;u2>l|\N> pad G7`:UAycP#Je2E* &tiyid N5{p$ZKQO/ Y^# k+aUEA{u|$V6;ZM Fh*'0NtJ 7I|a $;6 6?a;2` 3B//,daG6B E`>$ GZK^Y& Fd:mqC 0QVTO /%'NULT^5Xf*ec= ,P ua6{ctmQ6W U*^Trm#s@f7w} zass*F2R\"Uc(7E0:/{cN$BIxLut GGK=@=*QQ,{6 F9M?.'#YypQBN:G}^tl"& /'Y+&,`,yl,|}= 0+:o'(+>2}2I6'43=UF;;b0/>t/9>-\)5tZaKJyn |xh2RMzpzU#dCQ3yw}cMx '#FEY|WrY^C  9kms;apI(= $eZ"=6UwQYOarf=,*&,2aaPM>qb77i 7\Rt=|KKA^C3C`YFa&#"NqmG?uGmEu/I0MM4  .u^|`qC& 3'&x23$GWOIa^S(\ZeC:4A"/*#3/,.]^> # 2:'9W/  :l};:e "HvV #mq=r]ZRT|Ysw\C]Ee!~Ig3D2&R] jY /6 ]vF>=2mL1-\h'EU&Qgw(h`C,  \l(Zuz!4mqYA^^HY]Nj&gypVx5Des:"z[K GQ:\$M^`2cv$dgcERS$7X059[^^'WqH+72=U\Q>+3% 1 7AdhrKZ)dB4Mjpu2BJ|2-2&2FNpYOjA.Q+iU91mu(/#+RB&  :',(C+ ".   +AN> / =M& x6V#lmU7}2M9V,BXFe$2 +mQ6`> :b+uo ,+(?QN2++^J=Ww0^a#A3 >Br!kW2 ENu;VQ"tBWa!+E.eqz3#mL9@l &ClG U^olDi6bm7 :{guu3R^UjU&, }}0W6' * 'eBN' +&" BhUV2 +&W7?  ("'&7"6  '. 4RB4 ,:IA7,20/4,UiK4;6$#$*A;7::223*AZF EW0" "((}OSi9yHI>j1 A2Wt^/Pq=bk3:m}y"'(|ap93'#=0\ VmRx.o "Q9Ma*# 'o:\`y/]'^v}M w2" FS7GOZ\)2ZC\C2*  (6'$  .&  "   (' "+ &+Q2'(  /#  "#:A6 #*90=7(  0 (+  &  :EVSKU>  $?' .EA:J: *=C0  # $ 46 #&  ;7#'/.9/  && $*  &     0        #*,$  # (   (   .'" +73=2"  "    " kiki/sound/gate_warp.aif0000666000000000000000000053115610341200425014273 0ustar rootrootFORMfAIFFCOMMY@DMARKAPPL$AMIImcolprivpbcr?SSND m  $K1*9HNRNlmS'?qxt+ 1)fra{j]dRdS=UQe"F ~b"\B}zE7  t i l: K t P  x Z i " # x i e C Z K    x 5 : )  )~`u,5}\=d|;R!cDq'[ME:~0O0P >c)Efp6E5l$QQh"Gp SRL[H)X~,0mXD5IQG;O[r*+5?Y`oZq  ( 56$*79"8)((;8#I* !uzU4;\4 ?myJQ[?=688 9}?MUt /Р~@Ӭmշ֤بژS݄8ޗJuu@Q/%}1s:b1`>p7F8j5v7g&9fik jA fst+-v~5u +Q 7;;IGSL"Srm 0 )   > f U j   E  O M @ ` s z w  %  f   Y H $ ] O W m j R s   4   N  )  F U Q 4 K e > j ; w J B z K # : 2 _ k C r z ` [ N f h ? Y @ 8 b < W H E : Y   ,  2 R t >  )~=MeE,5=VI2c>c? <(l*?+iMx-Jk6]} Bvt52 _G8]QzE;i^)</lGs&:9IiomUt ()$t3GZCqb}^iyw|r~wv{OHS^rdfQgXQ8@3"K$1C0(0%(~}`hFWw&YbYE=-to?xa?e%!L5=(5PFb$`9s-{zx9 \hfJc;0DO~*\y\q-A5 <0?Y(S 8.21,"!&B,*6uFpex5E^.@ $ZDShI6"-w`sSPwe.AY-6!.% `\pbmK[dV1ZlJ@42C".0 q*]Tf mɁ;wfOߵ,r s1/jjZ'8p@)5}aZsVCuE }@{/}"r[-R[y]Ll+]u N |}f`_Qi@vM"D;J2,]-SztSzӼɚW;Ƚu۩lѯazJآ|=-ym;\2rYP4`q6\z1 V;;)>`LC>ltG,Z;Ah+I>x MPs,R`6NTo J]g K 4 M L z q ) K & 8 e ^ c 6 $ . L 7 G W O r 3  H E  S { ] u s  : <  Q = ( ? P . 7 G N + : c Q \ ^ O V C c E ? I B K V = N : ( > T ' ! C   G   { @ ` R " O E؏3^a9H,PzqCvp$.zX tm/!|77$ H.D@xxwwcIeTK/K$?Ps<H>kr:6ATd}':cymj}/RG<[n|m    >  , * + /  7 @ / 4 - J h = d F Q g q u ^ d u P } u _ n x m i ` G * W > , v G $ u C < F    7  m_^t7F_CUHxp[l<SFDV!! TqZ6U-iY'x ;2 CoEgb AIvo/7 #{Qd4 *H.V#V=)5Z>LZ2F'II_+\g5#J?n%B F &1)$ml^Cc;/c,5~]{j;aQIZ)W( /*XoT4yji:-J;%D 2 %H$~|Q(eIMM&>CD/ / yWwmYDeR7=7:!49ZݞWʏ3p%^"/f|ܠct6GV{6B5As0F4 'w](^((dz$vc mbGO HDk)Ip$Ne0c;q]bU{ HGw 0AQjtp(%0o$BdWSkk^\gsxjt}p_k>h7AN: =fcRlLkkJYLu<[>;!RJaEgejx̯ŸdؙEpy9~d kɾӯڬ[ &@c<٩(2"q$x1="lY1-D~C9uXQz*$o9Vm'|)A?$e0`)c*aN4Z@C![h*Q|ko} ? F  L X i K Z d E @ B (  S y ! Y < c B Z f I Z F H d N K        2  3 %  } 8 u u {  8 G : ? > *  R #  L `  # M + r  # P , 1 + 3 N 2 * ? D =     T : { E W E H  )kb\\#jRdgbf O"@A\2<&[4A64)K3;t6#>@UqNx2G<937y<  C J { . 1 zj@ ChEt / R y ~ l N &  N h + : P "  N  y  q[}6`~~bx;O_NRO;oe{Eb10$GDE+BpW/GZ46}m Mc +#n~eb+JTj-qZZ!.5R-1i-4-vM>!-Cvw0^D= ^udHZi|-CgZE~HQ+y95F,P16zwG;C huV<=1'N98D62O+=P W 6ro;zN.^A/4T#]3 1C+ju< 5h< ӔDϒΓaE$ԙU=Ad@duhDsn Q}g~JYK0^Cnl P]l8,7C]d^!_.6+G6  V@w=Hr\Yv1:Cd8i_Y-M1R?}^,=?KGjg}Zbeuw;4t x0A8/?Kk(X|0sU}~rq{LA?*B#+BvSpNJ y|SX<b"B2187Fnd|TC/ K֐IYD_ǹ`9%-[޺CK %߻E9)y!قdݔ !!}`}1yl .9<]N IERa4p S n Jod<,)BbW(ib g } J  ,@ i  | = 80W$_W6. ^ 5  M# v n  gtq E  n h j ( k a>|twC_ {  8 } y L O Y ` I g  ! j ;FiP l C [ 9  g ~  a e u O*F!_EcvRcݶݮs߂fM`jPT3-(  h &  i | O4NL|y;;3S2}J)cTU8I  L % w + C { , p S n?fB/F0&>b. L 9  .X17 . n " k>hQX`_M6{:(9} U p ` Q Q V h ? ' O < eUl.$XVb3}2e 2 k D ] ] v ^ ; i  <g?*v|B"{ 3 $ V k c [ I 0 A 'loP@Ptl} J+h{ ~d[5g@p0!|OV#zg`M4\ oE* -L_ cED's'X[a212^yd :^c|%v4OjrxfnK<6"lr} {z'G <@SP/><.*2u<.L<qT7wU_q:O#,-<@Ib>bnefo5}=8O[g|D-+0 S2"h>wގlڪf $ғeeҙeW9O2޲ 2X{,:VSU$h'r}X%E"\kh;7c)6`g3(HDx=FI36Nq5Kt#^ gvjl:Zs  fu]P A t  # pl<JqC"I !g 4GoQ6=u[.8x  2,PKd [6SXj~:vy ZgoMl9Fg@FtP#_d0׿ԪΚfĻϿE00fܼg^&̯:uX({'{s0! W = !I7 Kswg-tzG - F&Y*,9Bn !xr|y' o  N@kjRxFJn  S | n ,y3?m#Xc)J z 6 Fi7{\s@%k" ; 5 # Zat&@)(S_qT%(o,phq  J : A & i}LEni"N3 '4;4QH.O\TLPT)jx&$9@:   $vj)y  Z n 2.F=U@@#&d L iNjZ  h  sjF>Gzu5aSy# y 1G;,;w s3u{ d  1 \  5 FYL`~]cp p  ~ Q P m @q`^+~;^0BSR ; K r   : ^ @ ? ; ;   z ` jJ]?8u0xYP':yzR=k4$Yw%vC2M/VL]l~-l`q  ? i e ! G Jx |H!t`eK;zfM#cN[{X YiAE!,a;)F2wj9ND~.<`r Mp$Uh*@L~ytlT_A;.&`J^Y9&qgqpQ@jLlN^06([?2\4P,yC$rb8p|f.߱Km٦AؤLתא|׸י;ؗٓS1ޱj^=`4AL>[ E S = ` X V 7  f~2vwn]D4}5)^gm-~e"$o?ska  :  { i .;iR^: d    "w^$*KT#/{?AkK+TI~X  nq`*Z*<l L s p *  6 I 4 I Z 3 X Ty5wrOc!e>dE lg>r"_Zߨ"bبCӢˑrɖdz&Ʋ&žŘQlłłFnjA ]8̈́_[غڝXxI.~8X& F z:n `yllynNJ)3 \is* U #T~Ky gW@YlGAR^P6LhgSq3g6E\p . \ $Bb}PW\C<F40"yD$j7oq4M g " R-sJ=wP|etk F7xJB 9 k  U8h/orYj(6OIg:6Y2 h , . nPo1Z8dm{Gz PtTߟ5zTR* ;ޅެq'^WN6M a  A!cDcK)@Qi&Wlwx+ g]a7NEAhX d tfn4x/oG-c"E}A' ^  RI 8Hn{Wce+fEw ?@ ) 1 U QSK:_ [1~CW>4"?Y_Tt?1ZJku-P~> 6  @ , \  I Y ?y{G|jD ] S  & FvZMz;j (h W)fkC}8nk+Qw[ T\ N  N C _ , i K /  V U 7c RXV]ho%ddn`#r|Drzs5J*Ca#jdutEL{H<cV;,B@B%6r8x5sj$gR)Q: a95@+}v;pwdkQwg!t&dEWM;Be.q(1,{iZqj=7T9h\w m|ްiݶ|q !K݌>hh~=5)9HKtn&ILQ  1 L k g&ll&S :  o    * !AO,A 7\Hat#S* u7C==_2L kp]@E  Y I j  B 6 ( a '*-UPkPA-% ? Y -  { l S D(}{:NwB V(G2 WK=|P"yBft"v|t'!IER ݕܽ۞ڣٓ|בֺ_ӳGѤН6ϡhΒΖ΅\Υά$hϳЕѷCwxJ YU<ۚܙAu$euO{??6E   Y>-;/uC5f!;W] v bH e;n *6ccP:bv &Wu- \tV(1K7dV( r < > A `sS59Hz:T"FOIf4"wN^<)2>]~:Q= l  " } O3JdR$fKN{:[bp)bUBP>7igC$ GGnAy1Q`~u-o"Kxu+@((7 Q  s  @#Vas s&j_]bV^3l9HJ'&@I   p y 1   uRbAQ kCdUY_Iw=72!)O-"Fan 4 m  h _ g $ ` ILPC$B`9eUxN37 n+*P5I q V  a Xg!cWuNUu< :n){S!l>$wbwU?Q"ccA0S n hWLX+3mvfGBY6[)GJ>*00GP 5=[{DNw5Rt 2goR ==Vms`gt{]^V33(sF9aCO ~x)4@$v)Q\ ߈ޤ ݡiܸܤyX.3*UW8݁ކ Fk("L ^)GLxdmC9s +B5lSMJ%*( !]"*"#j$H$%"%&A&&'X''((,(V([(~(L(\( ('''v'&&%%$$w##"!!7 &zI?&e~_bo]s ~ 4!o~xh4C3WR5)R]DNTkOt>\mx.`+Wm'pVd8  ^ K FU*r!AUgSd+a[\yyH<)]    m 2#@$>Q,Jl%+TIr0^gOmL6kap3Fw2bK[4G8ZauAfXD,ukmk:0 O d  l &  E , C 3?R=YYT]m$ z 1  ? V L  5d$7s*dy^1u| \;{DmVs`S~OQ7o;;M$2< p>Lm9fF @=uUNj<<~]C$s!Sg6Yv:m*tQ+Y&K"_N%e@mxq *$q)PIC [hS r&[C@ g"eXd' G u E  zQ1Bw>,zQDB,J{A@"v< ;  2 K =0`FW}|m/u UX0\q8-QS6h% 8 2CVCX*sI=fiI}"O1/WNaDP4?kWje?_Zq"]W2[j:F 9J\܁۲Wڞٰ1Sױmֿ֝, ՟ճը՘մBL֧}66ٵ?ڕqd+ފd xLI-3 )_mQ  w t )<8cy3> !3""#?$$%%&P&'''(U(z(()0)>)J)O)))g))I)7)j(((}(1'''a&&8%%$$Y##P""! hggGrx3K  T XM14k2JV4KZ` m7oC5N^!53,T,BrZ risD,MW"UNv"-H i6!zD E : K < ; F\K ~B%X Ks8<{l{nYGM<:^u/`%q T?Fe | E E  , M Kb0_LQQ4\9ypU]}&P +iY:| ;%g  z( ^\eV7pm0Z8 >QIy#+O'W{+eUkcnj}Sj]WN4W82"p`P5&~wVV/! Mg_zr@" bcX|(%}]uy[KGR 9)3 (G9C"ia`uDwQ|,<;DWcMLUg?@5`Ds!\fas3yKu]tFh+N?mZB.Q$*'i}uArJKXb> rD&u\L6s+Fa:s0H~ :A(W4~:/a4y}vZz.R onB9 9 3 I : Ur]42-QBlk.T*q:T 0KU!#m] .:c-\r|7Oe: UH4eHEG`fHNBGy~jzr|%@ee{k^&ݨ_bA /aeL݂^ޘ@}bK+3exgl?V2idFD< = R ` `  t){:[,+Cf + !jcYl\MljMogyq%_Q@'Dot0@} { M  h , % ) |& C&X|&qE&nI#.MxOIoB1< 8@3L%8>MH9MUmYF]{jzxu}{`]O\atjXU`YKS\f:2[OG8!B;M/-/5#* 28 ?"0*   =  (&1 ~ziZJCiKZ9'pz`ZBG+<8"j~Y7b9D: ~kyJNdKEV?#0'}qHJ6"wm!{ RI[i Sw(=pQt{0EZ,P3V9kQ#T93j^z0(OE>vVMO@<'azI7k3z_,K\'&s G N 1 + ?T<.`Z2];+'s%]]O!oWW<oopM )W o + ~ ) Ec9FKw5>M gD @iwDf.4; EW>U&pXM O=iN l%@Yq_y*WE~;KRAGR7ދޅbݴݟz.#-ܟܴܲ1A|ݰݸ%gޭ4ߣC2i\x)[oK'$`fFfFT/0/P;`, q e 3 OG1eLd+w6G J v!&!!"W"#;#^#}$$$k$$%"%;%C%%%%%%%%%%%%d%k%e$$$$g$c####4"""$!! ghcwS5\t2k6X!j+ A   h R_pCIU,L pKQkGk])nS_+"bFB gTPqHm5 !}X`{bLXv.&]t7rcw[k=c(LiXttk)b~K`m&ET 1 h  U l j K Wh&HB+ jvF;ro&fY#y^F@ VrOf. U :  _ N 2 7cwH.j9"d$&7 ^;k;4uKfV&w%P,J-&:Z3GNC^chqt&6ZF{e-9 SJflx6F:%AIOeFmty~}%acgE;.;duTV:./HVHp\p(y`dD: bySVP`X0L8< 7  yPmll]MlpAx|6la?\DWrB`OEZ-FLKO040F.2:IU+% 0kR2/*38/!c5rN7G`s: @8 /,cNT ]Q'hOA/fpK /I<|(Ze|2EKa$9ah6@Y%Yvc'}: d"?Pi\q("v s 2  s qB n"vHkkaS&f:9A{xEU55P)a 2C+o;w~[  o K # L ~  Pm:8qWF5 m '  \(I~SAitpD?gd.v&LNHOR85M0 5]t89F] JF<& Vrx 7zH"9\TT| E_\O{/C$RJycahD,e  iR#1kL/GVU?dfd1{wDD|ug]O@fu s*l\QE%2{}df^79)><&-*%>& )X +pAn^YQdZPyYy).S9)nbtptj]UqN=9?A:Y^,F<oMj8X)tn<9N@^QuO,zLt9ApxXfJ-75WM\vF tmt :N`F!m )v |(No*;C=D:L^=v`yo]ev{g 0 4 K O F ^ZE]RmRd+x_d;\ $:bEU6fDVe>Y;>,T"R{,Hu~5Id R  B 3 1 Mg)eR6K)>Y![]IG%2_cA "\UEq w<|VgޓjQ:ۣڍeA1r> ֐p1վՁ՟tVz$v/1`Uv!nH+YY2 p   5 q * 5j, ~t5@wUMTIa rQ  F  w [ H u c O M  % {BClBuH5 y22r$'z7N& G :  J 29_D#nKE O;o\#NG/@!pd.0~~fc[szZq)1>gRb 9\k6<@["Leo9 a_ f8pDe M A i   2 n L p  Y G S s i r  } | e w K j E # &   % e 9 _ 4 sFyqI.=];cl/xi=T1& }!_[pL GU$X`- fE!3kWh|FDH # *D.A@.qp<:>8BP\U7!7> 'iR:B[)py6{]$vp~ \:CK/:6yw^1;p1H]>L *M} ;] J4z<0/]FzY{1NTw3X$Z "[W5&V1n > r d T = 0 3 3D,`_=S<EOQiEi{EuEBbh _`)JEDl5  L v "  Z   3 % ] ($}nxxq(uKvFyGK fyA0u$Sl6YI P[2ޠݮ\ܾ=NڋQط ףJ֗B,Ս՗V.ԹԲ԰nԷԗwԼԳԠ"^իՈ4N֥D׃+؁yٻ0ڦ0uܱl2J`/84~120BtCZyw1d*B tp]jr2u  !W"@# #$F%&%&e''(L()}**y+ ++,- -a-._../U//00g0|01%01E1x1Y1111111o11v11100z0]0///V/..J.!--,,K++l**R))}((B'&&w%%J$$ #l"" !t! >ng(pUB-]  b ` *|Hd,@h>(99)1>vJ } ClJyvs3߽}ReA/2*,&*[Xߗߧ^R> pnrVj'LL<alv1`G c9uBa 6 2 q >vHa_h!h#Qivb  ^ !c!"""#O##$>${$% %1%%%&"&w&c&&&&&''' ''(&'&&'&&~&l&&%%%O% %$$>$,##X#""l!!}! 7f. ^UX Hz,k4 n ,  d ,WSI-1 :0Eh3{M_-1QrK$qNvWUb/,N<DU.8ikU 2ma=q,6T4n 4/y1RmG([6mNdz,*q 'Ce*W H , $ %  ]  d # Z 'bR4<XQykgT#sy[q# /  i g   : [ j;$BRx^ o?PVJ>8`? W)F}$8(F }; $ v8DU40kw(Ze#M& DlS~c9Z3%- _A1|hQJ90uwU]H`deXrq|o3=e K "|g)4A$YoP;b];`b+t0\J-@Sdyj#k  M 8  ~ B * E } iD&YJ{X =j_F ?S A n N Y   ~ =  A M 2 2ryGdGzwT,IgqHCTQ#N )k+nmH0GLa ^[;r1?@ >C,nݰ5u:ڢFِخأ؝GצwAT0  +Uy׮׸0Aء?}"ڝ "ۓܙ@UߚOam%)wDG/| {.WT gXB$0o   ~G7.]0(\40 l!f!"j#n#$}%$%&g&'(()N)*P*++,9,x,-^--.N.[./  ] 6}IPTG !r""c"#a#$9$%%L%%&o&&'E''((K(=(((()%)5))?)N)`)|)\)I)c))5)(((((t(($''r'7&&&O&2%%V%$$Y$#v# ""8!!G PB<c5,k^x@~L$ l V  C EmAz/_KaV&c)p =z&6>Vo K*d#O. f3%pCJs(0cO| R&tP i!Ab N(r Zn6e SD!g m A c  n . [ s ' s 1W#R -h3df  vpQ/`@6mkbxrnrGOO?2 k}-*v`eR @ #   I 1f}08{Z%0$@,L\V#r@h55_sA6[0@2O11$$B+M6}="p(f$;f$ eBAH-B2N+&]HxQFr:8Q>"4JY*oS~p!tGiPg b,3l ! D w 0 . # g 9|8^GQX`DSVyKh:cPW(a$WJZ4 E #  A n o 'g&fUg ] {!oW}!:q)WNo4@=G0`)I qd<(y.Dt# ߽W޶r ݣ%ܓۯnڻh9٣:WY ׎׉<ַֺּּֿ֥֜ -MR׫׼u؎ث} ړ%۬fݨrPn!H#sT"wkL*8pw_D hI5 e ,   ?$$)s]& !!"#$$%t%&'%'([()T)**+-+g,>,k,-3--...//9//00<0600001001011000000W0@0///u/!...e.---,,w, +_+'** ))O((\''@&&"%%$##""!+ ,a>q,`k0k:5U  @ ` NrUQ|n n|.Dk)Z:b FqB}Y Zmߧߙ'ގXݳ݌:'ܙܬܺkgcgOMU4WPdfܺܭ6$Qݖ?ު޶x߭j+rf i&, kLXdt\ A wm;SfS r ? > w.l/djHF l !*t*o***+***++++****`**V)*$))n)W)(((('j'R',&\&%%W$$$##1"",!!3 1zEkD;m]q_Z q   !,#,Z'+Y)lkV8) [ ""#:$@%%&R' '(W)9)*1+!+, - --.//0001a12J223P334T445>5b5\5656A6636n66{67666666e66L6(60555s5E444r433N222 1100 /..--2,,3+**O)((^'&&L%$$0#n"!! j-j~*?xu-08 _ a P"^y"7#u )$&pECjHY} wOv޹G݀ ܈_۽w:|!ٮٯjؠgv׋׻pׄfHsdshs׺ן@R؝ؿ,مZڵE۹zRޱߔ{>+S`&N: Mi5VIP3`<C z . & [W h$:$x3"NJ_L !O!"#+#$y$%|&6&{'<''()))*a*++++,S,,-a--.+.p../ /*/_/~////0V0?0@0b0{0~0z00}000l0p0R0M0////...--[,,++**t))8((0'n'3&m%%\$##""! )K L:@~ Ge+c 5 h  co*-^$pW-s'[/ UY|XB'@5f;* K[p;-f9M,- &"VR={\nB^1FHO#RR m9PEUqv]t)vF0R2 +yLF r J > U I 0!zt/d,nP{9u$/ub`;hxw\p)qbW3sGR$'z~ 1 G a  2 0I  :y*av*FyKQw`36]kM;F967|Ty0`7|ߋަ>ݹ݄ ܲ܄8ۼbE*کڥڊb`N(,50&94+DUQtڢڌ >H{(ܔܪB݊ݔ":StJf qϯv%;ΒΧVO;/qΥΟϝϮ6pZ;g3Ӷԗԧ)֕/Zfچ(܆ވ+-M'}tDZbE&y[[y]E ? J J F u1o.1 a}[ !"p#K$$%&['?(&()*?*+,),. .1./001q12334 4_45D56D677:778=8899N999::::;!;Y;;<4<[<<= =V==========6<!F u8^vml $ HbN5so~.aXb?s4!y<1>ݦ$ܩی#ڐ'EإןR%֚Xռմj:ԯbq>; )1UԚ=ա{Yנfؽ"LVb7ގ޻ߎ RpAMIOX3^9 y8]'7ZiAqaX R D C >T/|:!a8 V!'!"b#6#$d%%&_'-'( ()B)**+L,,/,-6-g.G.j./#/h/0 0]001P112.2@223g334|45F56)67#7G788l8899&98988_8X77\66P55473210/.-,++)((&& %1$#p""! rZi`.H wSJY^  d AbeEB^= u<8,LDjYKhL 09?M&f0oߎ,^= FKc߫(Q9gNaf?v)B r2Gr~V8 [DQj"!!!!5 } /beDupNg7!bIL8 > ] 3 ?E.NLQzSu]";iS;BO]BYfY ~wp.ؐ"B֯XկԲ}ҡѭbХU{?΀"͜73~[>˲wn_ "$iT^˭Y̊-͖ίQG jӭen֑.jK kV%ޠߕyj-^Ye6IV &< * 4#@ . F  D T1/KRI3A@*D0_ !"y#j$\%%&'(Z)g* *+,x---./h0 0122344e5556 67I78h8999:T:;;;<[<= =>>m?0?@\AoBBCD EFFGHIJK?KLM5MMMN,MN&N&MMM5LLRKrJIHHFERDB@?u=;:B8H6h420/C-Y+*@('&$$$"!  >,' ?  {l[umGt#/_=%E3 ^DIuFNF*RO߻$އݺ ܜ۹2ڊٌVn{yԡRe_HѧxБe(ZϏϸϻϷ.1H^м^}ѻ\ҊҟhӃRԢ_[ֳ<@cٹuۣ<܏xނFBm 6Z-:i-mT$&muMg&#Yb [ ; +  o5 %"/V D!!"#;#$%;%&'/'()1)*3*+*+,Z,-}..G./R/00a01;122{23[34W55]6?7789:;<[=|>?D@MAABC&CD7DDEEBE;EIEDDDCC B A@?>=va / x zrw8`&w*R)Wp;V`h ^}wr-ݗ;~ h6wNԌeY<|ϑ#Εp*}P {i*˰ˬ_ʷ|o%4ɼɤɺOL|ʯ$=|˵>̠͸!?4ϒggѥқ m)Թm֖Iر`ڟۗ.nOyd?(_RLo/KL&NNSKb\@.sgU| 1( !"#|$u%M&!'+( ()*s+X,,-.v/u0012234.55667q88h9!99::;<I>?|@<@BBDEoFHxIKaLNWOQRSUVdWkXTYLZ:Z[J\\.\O\\x\}\0[[eZYXWVUSRPOMBKEI4FDBu?=O:8553:0-+)a'2%#! s-[ P A G !E[b7)7/UMb݈?w(ُ9׸\SMXҪDсК8Ϩ2Ψ\tͥSJ̷̶̰t̐̚yv̊p~̷̓ 3͍͔DΓο=vϥ%qЫ%ѯҔҾ@#Ծ[>תضOڮV܂^ޡSF4_k pZZ[80Ss<\N! Y ^ <(TM?jf43 . !"p##$%7%&'Z'()%**++,1,-P-.8./f/001B1123 3|4L556789:< =>?ABCE(FG{HIJ`KELDLM#MMNIN]NqNhN*MMLLlKJJIGFETD B@?X=;98631/-+)'%#" }{G&9T]- t ?HWePX~Qf _soLIY.p  Cu$t~CYHU<1-KWd#bWedW'wh\$q   6|KF+n2p2qWSGd.A) hJFBߤ;QTܨۃIڈ i_6טA֦|,#ՒձՋ%fԬԳ51&eCwռՋb)tֿ֟0Iײ``[!ۑ'Plݵ:߭(wmX^^h*DAc cqsxERgX tO`gS    s  thFq2lr-88/(bpM !N!""m"###u#$-$O$$%D%L%%%&I&P&&&' &'&''4'''&'''&&'&&&&e&u&5%%%%G%#$$$-$$#x#3#"_""!!C Igs) 16  e DSJuqs"3h{b&`U(n ߠbܐ2\$>AրTԿӯҕuy&ϲ"Κͪh̴X-˄z-B&ɛɆɹɞɩ-wmʲc{r ίχ1`Tӡ ԧ1`$`UڂzܸݮA$wr67aEH4  +&D/1!r U Y @ sYvv]] f!x"#P$"$&&'()*D+,#,-.j/ 001t2F234(456@67889E9:^:;c;<5<=A=>`>?+@!@ABCE-FH)IKMLNPRT0V WjXZu[]^@_8_a)ab%bbc/czc!bbaal`_^]\*ZY9WUSQObMJsGE~B?=4:#7<4=1.+)I'$"! 7\?j5 M ` ] '!isfP% >Q]%ߘ޹3ܬ٭k{ `X<ү[IϸσΑ ;U5̗̏Z9˱˻ ;6oy̻cͲ"΄ϗ5Вe\ҜMӽԨc)k ؼ4ڐ)ܡhz+F"s7cyBYT jaR(+! v p D1Mk:%UVZ) 0 !"K##$%E%&''(()*f*+,,-f-.^./L00U01^1223G345e6#7m8m9:@ACDFGTHIKKLMNGO3OOPbPPQ$Q PPPOONIMLKuJI GFDC]A?=<97531/$-"*(&$g"x 305WMv# e K ]dg08vRD'jTo(zGI}? Uddy ~Sܜ^|+m0yB;شpj ׮׌fF2ֹֺ֏֣ֈֹ֢֦֝1g1e׶,m5كEڍm~ݿ-LMߛ<|LVuze]\vBmp"fi5qR\p%. ( ` B 5 | m YU81^9SP|i7PRnRHFi fLo/ukm "8 Y 9 i T"Znrln{; y5!6h}@3nIv[>o(pc?=ߣ?@ܨ`ڳ*٤=bלFM֥֌r_պՆմՇZՂZlՑqzզաՖ*e{,7׆:؃ط >َUګۇܯ#}\X߭G4Hm~2 _I[GWqnqnkq1u;f+q  G  po'$B$Cp4!d 2 !!!"8""#H##$&$X$$%%%%%&V&I&y&&&&&&'''+''''8&&'&&&&p&.&.%%%%t% $$$0###.""k" !r! ?}Yj)Zfs8 ) b z  "U`B}~|h̻̀@Y |6KЈџҒ+ӜS:֪Dإ7ںOf/Hi%oxE$s~    -  !"#h$k%& '(?()*+5,0,-./P0B012t334K5J56K7&7m8=89!:::;;T>?u@&@ABDEFHJWKMOQ]S:TVXY[\H]^_`ab bccCcwccRc(baa`_c^]-[Z}XVURPNpLIFD/A[>;8520-;*('%#! \G\?<s' + hd1,zymk^j`GHY^@sq*_cU^ޡa۸St s}֒B?ӗY8tnR[!͑N̍hH!ˬ˜˭˭h@WACDEGHIlJzKLMiN6O OfP PmPPPPPPxPDONNiMLoKJI>GFE2CA@'> 3!v! O޷ݳQܝq۸jڼM nR؏63׵}׀a֣֙x֣֡֫JKj׺?>qX٨BژێܷDޙMB? "2Dc@8Y2> ~[P,lK, $Z6Lf d # (  4,{L7}"_#%o XBd<XCG<t#o@6Co$s$R#@ O'C % v I  X y|tS\N;fL4UDYS jLQ5b>g*Lop:SO`ݬܢOj3\ ً! ؗj&%׀gֶևց:cC''4i֥ևNדלbةOv2;^ܤi+ߐ^ 9RpBO$& s+kVH\cLv? Y0W r  %HICEoz=ah ! !f!"2"p"#%#c##$H$$%%E%^%%&&@&L&&&&&&&'''&'&&&&&x&D&J&%%%%6$$$n$##_#""!! g e\o{Uc\O#LG B  +y{[!#6WdUy&DtUj!}z E޳ VAR~tԹuӾ9FjЕ&~^ }>ͧ=̑N˼W˘L&?(xˈ˒@{a{ͼMΕ\ϭЂxҁpԘAթ;ׯن{ ݹ\8\l!y~Vto>?@\ABC4D}EGpHJLN4PQS6UVXYZ[]N^.^_`aaOaaaaaaP`j__^]<[ZMYW U_SQFOUM JHVEB@8=R:a741/M,U*'%/#!y':ON<4  _;60QzPLlpݢ@h-ٓKע2ցՁԲԐ q(ҏ3дG ϝn Βe1~^>- ̿&' g͔͌ͭhE.ϘϱС+х_6ӯ!ԛ՘]֕NJٜVg"d@;] :B|J(!yZ<0:9F b l C  v; YjS/ !Q!"#$C$%{&b&'(F()**+f+,V- -. .//e/0p0112X23>3450617898:;=(>~?A-BvCEFAGvHIJK\L!MMrMNsNNNNNNNZMMqLLKJ=IGFEwCBm@?=J;97531n/L-0+)&$"!Wx$Jy A N k 17r,:i!Tv~!NN2@O<T!f/X~=ݪTfD۾c(p,-ٓho؜ZU׵ןq]]PD1KBpE]k׊׍׳ ?~وّ!Vڷ5|۶%S݉ަߊ2? |")b ](T](b'jis.G:e#"C m ?% v ' 8}^:buw/]=WHyKsrxd,0qc,L7ylNb>w_6zF  =  rriQ5?xvTL9ߍ޴ݿwܠGۖڹs?ر؜>׭׉YA 7ֱֳy֐֨֒ )y׭!`ؤ؟ -يWڸXۥN݄,9߈gkTZt?UnP~lq+Xu<4]>v*X\ M 9 `s[:h*o2Xe3Kz > !!q!"""#2#X##$,$$$%)%d%%x%%&&&A&p&b&l&&&V&&&Q&W&V&.&4&%%%%V%N$$$$ ###""!!y!( O6Bl/wXj$ZJ:Q | 4*#HDjt ,$=4;r9rQ-7Fޓf۲'\٩~<־ ժGӂҿq5~S~mhKͷ_.̧́?F1˅y˯Dmr{˜bˮ˽˧8L̑3ͣͥ΄ΐoϞ-Х ]Xrլ֤M؆p܂-ާB?)8I/ w`R0OA  L{] =!)"#2#$%&='P(U) )*+i,D-%-./I001L2=234345667A78n89U:*:v:;;<=<=S=>;>?d@>AB$CSDFGI=JLVNtPQZSTV7WXZ[\F]]^^___`__w_^]\\ZYXXVU-SMQOpM;K%HFDCA,>s;86:3q0.+n)>&$#5!rzY\!!y  M P !hJe*/q>'H$SDP[Sx n8Lߧ aܦ LG7|*UՇԹԄӾxv4Ѭ_ЛMρ`"͘ͳ͚glX"-3;yc͖;Ͳ /aSϏ=q Gc6d՞ \1׳5تth<۽r/ݫw߲Y) uEgl&dr~I=-  d  7=Xk:{~_(- U!V""#$M$%&|&'(@()**+D+,s,--../a/0401m1123 34F4567a89:<=X>?A^BCE FG(HdI9IJKL4LLMMMMMMMZMLKK6JyI{HG]FECB@r>=;W97m531/-f+w)t'p%h#! $F}] 7= [ F - )t't93T} /z"3cFRAj2buߪ5ނoi$S_ڂQy8/ئVs#$׳׾׳׍ײםלױ4M؝ةSGوPzڜnېܗ݅N߀߼DMsjRA}'VF$O[P*!F ;,j|&]S\ ` c -    orF#}};?YX3/eh_#,-Y{vsm4L)-A A P=Px xr   v  Tea(R!8r2M U-}sv I ? @  SI*$E\ ~!e"##$$%&'_(d))*+,Y-"-./`001g2H23f4?45:6 67,78(89K9:f:;(;<<<=`=>e? ?@ABDE^FHPIK`M4NPkQS7TV(WRXYZ[\@\]p]]^ ]]]]0\W[ZYXWVTSQOMQJHFcCA><7964>1.,q*'%#"- $0p<P ,  9 ^k1w:+$'&69MOdS7U'ޙݽ#R,ڀGأ5ףփ!t Ԩ(i{<ѵс!вО4OU'ζ΍ΎJ5\+ B_VvΜι6'ψϷ0Ё (Ѥ1ZUӇc^3ֵנiB2ڟ.yކ ߩ*M<qBIL2M4`ZaTJp  b S ^G@&YA;%+ !F""#z$6$%&1&'(+())*t+=+,E,,-././>/0001d12A23034a5<56789;5<+=>?AWBMCyDEFGHjI$IJwK KxKKL LKKKKKJJIpHGFEDMCKA@+?=(;|97664320W.O,J*D(c&q$#!,DI{Md   ] y "+`[b w2soMiL/| p{iq8ߙYނdAY ڰgMٔ[Hش،ZؚGJi,S4t؇5Pإؖؕ[2~ٷ^ڇ3ۊ܁ܵbݺIiG-7'YbH},?)?I@ABzCE#FHIKeLNP"QST|UVXYZZ[i[\{\\\\\\2[[*ZAY\XQW UTgRQOKMFK/IFDNA?l<:3742W/-9*(&$#/! 6jnhAa" xOb"&1A(Pf Yhߢ=w   AΎaεQϭϷrj[jѺҀ҈ӂTԵ$՛ ֻ"׉1kڒ ېJݰ!ߺ*I/wvp.8`!>6,ZNW z^a*  ^ NgS,g;)W* !4!"#j$g$%{&F&'(()*)*++,],-s-.A./M/0X01 112Q23$34556789:<*=^>?AB,CDDEFGSHyIIJzJK9KKLLKKKK#JJ%IfHGFEDC^A@>=;98B6342o0~.,k*(&$#:!X| uf#1 V YhR?H;JOcSgUgOk-my/` E߱Gށݛ>x! ۨiڹڤZٴY[اؓ؛tHMM%0'A)\TNxؚ%قٗٲyڲګ2t۔ED|7ޘH?~UJGj]Ap'lnuBX4}WBGXIK'q0Hm#= u  | " `h/Mg3Tk}P__-F ie_.UjDuPNOS- M9Slf ;8v%Kx@ M A *1'v#R)KTv f5Z;qS#*lQ }ޡ"ݼ\ܓۚ?ڏa_وU؟oW<עׂ׍AsK+GL_A`^W׃qי1'Mأ.ن١BڂiەEܩ%\ސPFRp,TK|i.D{`L"|9,d{l9mMd~  L K  K` =R Yg*kaTCq O !\!""J""###}##$:$Z$$$%'%m%K%%%%%%%&%%&%%%%%%,%*%$$$Q$##y#C""o"j!!^!+ %.;Aiv>t+I Q r j *b:@u5+/n]y'JsMR,uZ /܎mڢR׉9>UӞQKѠ КcϛYΏΗ͡;*5̨s5Z'˸˱ˮ-]IQ̤̽OʹͰ=ΐAϦЈФ-ъҌwlՋ y&׼v٨3ۗ8ݫW)tU&{C#gP;I, % exmcT_4  !"q#\$}%.& ' '()*,+ +,-U.&./r0\012C334F45u6*67+78N89Q9:&:;X;;<<=E=>??@ACDZEG1HJpKMOmPRcT U&VuWXYZ[z\&\]]w]]]]9\\_[ZYXWVPTSQgOzMoKaIFDwA?k<:,7n42/-;*(i&R$"!DKX;5  C i *5-wj=^]dWQllGdvy$nw3B;޵# W?.|+Ն-ԩ5|K4' \R λ΢`?%; "C1,ΥcθHkЙЮѓыiҮ9yԇ6ֱbקO|ڴ8Z"K{,V{G/{O)\M's{BjfR)=]O"  Cq9iNI(>H!!"*"#$%%&''(p()*"*++,--d.A.z.//010112 2g33h4545Y6?7,8S9Y:;<>"?@AC)DOEBFJGnHNIIJJKQLLLLALELKKKJII HTGQF3EGCBAF?> <:875D31X/L-*+])O'N%#! Wi'[v)D a `J>_9BFals("O3r8@i6Ds YpۨnڜX$هpt'حإؓbkG1f.-G+*TtWjث؎ز(bف ?ڇڭ.nQܨHݗZލ@x߰SF%"@52ZOrK|^Q5tOu.Z)euPY h5<gs  , ) W 8  YGMd(K)RgK 8l.)-XpYa{tlf$9 om,DD2E `~B 2 :  KPK!w\=#|'5R%D% $$$u$###C""""!! $p~gRk() tfg= i i 6?l[Yk Y9GoEK[A15c+ޤݤ[۵-ه.a׬R֌Վ^hҊђIТЀό]Ξ[͙ͤ=̓̂'z˳˫ˊ˩ˋ˛˼,@U̟KZ^ms=Ъ"LxVyu֭״tٳ8۰rެ t6R1?<*_G_>ZX$<e!9A(1E+# W ?  c > N/ )*BJ j!"T#!$6$%&'a(x)M**+,y-:../r0%012Z234D456"67?78S89w9:U:; ;?i?@B.C1DFGIJLyNOQaRTUW1XsYZ[\Q]/]^^s^^^^s]]\[[9Z$XWV@TRQNLJHcF Cw@>G;863T0.'+)B'%U#=! oOLI2( rf9-$uSjS:gV2j]Rvl@`wLߞUݏzxNס ֊{xӛҌ4IOϳkεΆOͩzs1g,I53C\:y͞͵2SΔβOυϣUЛiҋPMԣ%ն%փ8$ٗ%ڜMfOk`Z0_hmXvR4" mhO%M0[  TcS=$jM"m t!%!"#<$$%&G&'(4()h*(*+X+,5,-f-.r./g/0011[22a23~345p6&7I79:V;x<=?`@AC} - ? H 9 WMd/)W:N'N8SeQVfO[hs. \%F(`'SDLC O = i ]  L BgW [ HDT$1kJ>AFO"EW~4uH9;?ޥݴ(vAڸR~)#د|؉q}aJּcִ֫zւֱִ֑֚֟"\sx3Tw?نmgb݅%ޞ/ߛs@S #=kYs,9Tvb*K9i8z5H q ; | 4 |2U&}g+._uoNL 5 o !.!!"K"Y"##I##$D$$%%%>%%%%%&-&&7&d&<&n&a&B&n&K&1&2& &%%%%b%8%$$$$O$##b#""f" !! Kb7tX"a)e!UI= " 8 k Y\ 8\\u,@2kW6@J'p#TߒSܲEڊBؑ^־Q՞Ԝ ӈ ҋђ>бYχ=Έ6͒Ǧ̅4˕ˤ˅.DO-;D&]buˣ˹9y̏9ͧ)Κϙ2юby~\կ7 ׮ىۆ!ܾ݄!JN1t*J4_msAf,K2!^5 ai53683, L ;  l )Y9&X:W#Z!: !}"#^$J%!&&'()}*E+ +,-.5./0u112z3:34556h67s8899}9::;g<<<=?=>??@ABCEbFHJ%KMOPRTUWXwYZ\\]^g__}_`L__`2_y_ ^|]\[ZY=|`IV;JGP  6Q.pl G C߇޿8@ܙڜS؛2׾w9a[ҁ&$Еeχψ ΋ΈH͇ͧͅ=F0.B$ 3FU?͜p;,TΠ]ϧ,К5уg9Ӆ1Ԋգ֔&פ>lڙ#܄ _. X_dn(5=m 0aO[5* zW? 0 ?  PP?KBB}`0 !""#$R%%&''(x))f*X*+>,(,--..//0!011`12/23y34z5S5678:;j<=?e@AC^DEFHI+IJKLiLMMNNNNkNFN/MMFLLNKJIHGF0DCB@U><;T9,75^31/$,*(&$"!1g4L3 # T r QLF8g"BqYV]T4{G:YN~_7^bYw5ݻE܂۝ڜ++٤R؆؆=׿ררqב`X׾ׄד׏׼׾H؉ثص Ph<ڱڔ/U[FܣLݟuސ,ߣ߿L%EC|9B.2fSbZU=P'`?-5n'gDef  t w ^ 6 8L88]#!YzaZXgN4||^UWxX>Ir0)hIB<G o e / ZK`o6v\j%gjh7&k%M$G S&jE{dE6bQdt)ܵA|P\ّD/إ؂Gחi_ ֱ֗քR~>?-PkRSKk֎֯%Sקר6>ة M'ڳHۙT܏ynR1Sb|@zv[ZzNO Tf\I$a"}a #fWFQ5E Q_sc*9 z !C!!"="#)#)##$$x$$%"%X%%%&&(&s&F&u&&&&&&&&&&&&&|&e&2%%%%k%M%,$$$ $##""!!!T g SV-},d?80 q ]  */?K^|}%.7m`f%'J9OW.ܬۜ%e٢w)֮Mcӡ- ѧPпlϒ2ξ΋̓A̘W!ˬ˼qW,ʣʶH_H˞2̰͉ͮ΀Ύ\nЀО%ѬKҔ*>@֝nٻ] ۮ܈Gݿ/oRpXJ#humQnce{Bux,yRg q owI K!="##$%&:'().**+,-=-./0L0123"345&66n677899:Q:q;<;<<= ==>?!@@AC;DmEGkI!JLUN]PQSwU2VXYZ\ ]F^._1_`aa[aaaaa?a3`__^]\[yYXrVTRPNLJG\DB ?\ڍAؠH1ՐԅӀ ҍEѤ>[ϽHq ͿF/̫̞mo1 J# 6/>ni̹̊SIͭm7ϰPрHҸQӬB=ntسOڎ1qTބ;/TXIMgX}qP1+KeG  t{ > 7 \   i[WY G!!"#d$$%&=&'(Q()w*D*+h+,q--.#./Y/0D00112w23o3456 7 8/9,:;<>?ADBCETFGHJKLLMNNOlPP"P@PRP=PVOOhNNMLLWKIHG}EDBA,?q=|;9753v1-.,*(&$f"o L<$6<>|7a J A NLj+j}nq{ nTymgUޔ݌UX۴Aړ.ٵي!؂y ׎׉YDH#  !NDxב׆ssحxٙ[cW&b]޳Mߠ1} kx|&s"SIqE%i> |UfaJ1mZ= ( N ]  z |d`+oGRnngHK/)d(}k.YW=&FXlP*D  m ( m gZTNMy 6k];&W{vbq|:u&[G'}Hް ss!ۘ:z%sMؼla\z;֤jpJՎծեyՒ]՜հKՑՑ7Rּ֙'Tׄ@؍W`Jl(ۣdܳ4ݴf__Rl!9oy&9(S4fm|?g% dY`bS _ T A NbtYOy6mSF{$v + !!}!"/"##'##$$|$$%A%]%%&& &W&s&&&&&'&'',&'&&&&&&{&W&]%%%%[%'$$$l$###%""h!!`!" !qm2 is LWA. S U 7UPXhg$ }?.e &'D} ܂۠GٍO׀2տ0ԀCҌ[cϙ8θΒ͛q̫̑ˊ#ʾʶʃgf`"*I JJ8ʠʉʇ]P˘*mI}μ&ϕ НъuKԷ4և׫lٙ['۩S߶DP!x(L}u;[;F/ P!J j_H n z u e !X" #Q$%$%&'()|* +., ,-.Z/00112'234%456+67H78o899:;;;<$= =r=>N? ?@`AJBoCDFH7IKMTOAQRTVWYZ\&]i^_`aarabNcccKcscbbaa`_I^9]8[ZX]VTRPEMKvHFXC@=;>8$5L2E/2,*'k%<#!S-:ZS1 9 4 NyDLK =Tt3n}y4ߏތ!_nٝ}װ!ւh 2ҵ_TmS'?tj̋?Yˬ˺Xb~̸ D͋ͻ vβ_ϓ*mЫ'њ)xӁ}է֤h؏@do s5"~0 mQ4m&GA5%(irUPCF=  o>tf,]b9f P !"##$%J&%&'V(Z()n*<*+l+,j-'-../+/0K01)1123>3l4O556789;;<=?YABWCE#FHIJMKkLdMINNOPPQ QQIQMQNQPPOO ; z&'.)>NGGl,#- @wݥ2c:@ؙ\֛Ո% ҊmМ Ϯ+λWͽ̅͘ ˢPʟʂpɺɅcɨɔDyɑkɀɱɨEʕʴgK̦O͹uβπ@Ш5Hv{vճ֐;ץؘ.ڝ@ݣV }G&TcWW=??@(1VFAWiho  726< $!!##$%&'()C*#++,-.K/&/01l2234>456B67889r9:|:;X;<=<==>>?x@&@BCDMEGGHJLaN(P*QSU#VXY[1\]^``ab[bc4cmccccPbb@a`_^]][ZkXVUS$PNKI|FD1AM>;~852/-6*(%#w! t1cmd/2 f f<m+A|qVnxkj+tj%Qܔ_ٻFרMդ0ԠӋ:IЗϳ@οΆ͏ ̽e7˥dkJ!9:bYˊ-̘̊!h]δ=ύbcѺ2A_f֔=tٿk۹ܐ*[.ADeqBZSH Nkj(N<     };dFU2, !","#$~%D&&'(6()*7*++,-X-.h.//0`11a12\23S4%4p5S6L68+9:[;<>?ATCDaEG HIJLDM+N?O&OPQ QQRCRRnRtRKQQQ-PbONMLKJuIGEDZB@><:8{6j4/1/-^+(&$" f=l 8;pe   # d}Pmi ),tc$wI90v*m+@I{(~߉ލݡܽ]ۏi,]3آ؅0״׾לfN֡ֈ{֜Jp~JsAK~{փ֫!ךׇת"_٣پ3ڲ4E۱?z5s0ޏX_J^gbk -YbdRH9QUURMx Z.R  ; j x%< 7&X.`Ht ^{l\40|pts<nC/)8v~HtC26-G_uEh ' 'r6^3XIH\g~wmIWoKUX޸ރݿ/zuړDًרׂ֧fձj+$ԞԌS[T6 #,#VUxԀԞԛԷ41|:֧urn"Psi٘ڣڿۭ&܌ݑlhZv!FZOCMWGi/]t/z!>KA+s_,s . #x rL)Vy~k v I !S!"%"p"##|#$,$x$$%>%m%&& &z&r&&&&'1'/'1'n'K'F'm'R'o':'&'C'&&&&&&8%%%%}$%$$$$##y#""Z!!!! K<EE$LXl{  g eS2^]|wr 36df|w>>q:~v ~F`٦'J״Jչ!i)X2ѢsПϱYS̻̏͡1yUʂʛʅɏm\p5 & 8;+ZɜɈ" uʿ7˟˹̛éΨWGчҊӊKz*ּ׌ً89V߿zPFrjT.C2 DGF'7,2~Sz  ;N:VY p!"#B$s%C&='='()*+,^-../0z1!2"23L4J45^6W67c8 8q9G9:P:; ; >??@yAZB;C}DFGIJL7N3OQ"RTtUWLXYZ[\]^{^_)___`>__z_@^]\\K[YXVUCSQOMKsI)FD0A? zYBF)rW? }A  !"}#V$$%&b')'()A)*+ +,L,-../4/0.01)12B2v31348456T7]8*9=:;=>?A:BDEDFGHJ5K LLMzN@NO!OOOOOOmON~MMLKJIHGNEDjBA?x=;x975831Z.-+ (&$"!  kJ( QOF)^ Z W "whp,#Susd0o$^B|Qn)=Ikވ uI܏C ۓjuRD٘ٝ]ؓؑ[#׿ײץs׀pS׀Z~tuױרCwVArښڢ%d۫hܮ݅Mޯ1hi~P7cOq3 l6bX^$]$MNhTc5> z B m u rvklJxBcQl&z :#gtzdlAT#CZ^V't-!Tn- 5 u 3 9W 6VEQ=G%ZDN6g)6".%$ߢނ,ܹ݊2_ ڏف _ r ֛NXշP[ ԔԞptԂԕfԍԇfԷԺ& yՄտY֌֢Kן6؏ؽ8ٱ^ۂܞZ/g߮aR#n$]pU2*</}9 T$rtRw-]n  9 2 eJ|"xdI_s%zX ` ! !m!"2"u"#6#Y##$4$x$$%3%D%v%%&&&#&+&J&N&m&k&~&&S&l&z&9&$&=%%%%%%%$$$T$##y#k"""Q!!!] T 8Bf?:bZ$]6\ x ! ` {:Ei(1Ops @-7mX.4+`~9kވ܂۱fْaןaԢMDLТEMΕͱ́̐̃ ˣˌ=ʷ,>ɨɩ>ɖh6Ƀ:tɣ~ɦɽ?)wʩ c ?z-gͲ=Ξ"ϙbqұ*OeצL+ٷڏ9v]EBP2Ry9+g3c+WIEQp7 , N / I |Fs|n !"#{$%a&y'!(!);)*+m,w-H-//y0Y1!123345&56q7 78P8969:?:;?;< <<=Y=>>?_?@ABCE F3G:HIKLMNPPQSST(TUJUUVVV UUU"TSSRBQ>ONMLJ2HG"DCKAF?=:8k6W4,1/-+* (>&%E$ "! btjgCgQ5G* zc)''t{JmhF^S0OHM_^yUh߄޹3݂ܣYڐjؗ=כO3TiѲ3ИY ϸτ!-Γ΄81+͖ͭͿ9j΄γFVϊ*Ѝ zKҊ,}ӾԒ<]{ؐ ۿNny3Gv$if3G{J.b_9`D=@248 {qQ. n-5 V!E" "#$E%-%&'n'())*+K+,--.U./5/0D01=12)233q34d45{66789?:r;?AABDDEFRFGGHcHHHHHHH4GGZFEEFD8C$B@?>%<;498@643-0/O-+)(t&$#"E!C o`sy  / N nnw S[Y-LX ,"UHkG߮%ޅLbWweCۿۮە0xڟjN7F=$1M(Qrڟڲڪ Rd۷p{\h!ި8E߿)>URLu,#VTrt*r fY1) fK( f b   XTOaC5h\-|'|W^ ABv :Jdy0!wMdG Y0,GWVp2},Dxd n z g &^"hbha*RW Ft(?;:AXXkRV5 +gު|ݘq#b@bګoٍk*ؿآ:װU7֨}|նի&ֈ֓֊+fk بغفٍwکQۦ7ܦY?Pߨ42H8'Ah%g d]v%yF&p4u &q/ ! N g#N1x,Q}4Tif4 c3c  : !\!!" "\""# ##M###$#$+$$$a$'$4$$T$,$_$*#$ #####X#'#"""I" !!!U d1!j(:h?>y,|P7I c v  1 7ape(sHu[+rz2M`&?| r>ޑܕ۩4j>x&KG՗Tԑ5Ӂџ3Ўr~@Ό,͜J̍G> ˳ˣF_S3= -VCdˎˠJt̔4]1ѭҭӱVԗ]ֆד؄٩T6yKަ߶S(f_(KHI??D #,.,,-H5JO>sv[ o ~ExI !g!"#$%&l'Z($()*+,,-./6/015123034`5 566r77788929:,:o:;+;7;< >,>??@A=BBC*CDvDEEFFFoFFFfFoFEEIDD C4BA@?>=I<:9i8 659321/.-+*)('&%$$""@!| q~> :<%L "  B%EyW4c.]RߚOݮ)eDXٓ@@׹=~ S(ZDӭӉ:ҐҟҔ,{,R*4I0^dҞbPӄYԧr y׆b٫E/nܵ'ݜhߓC<`}] u>H7Q(WT.O o >XC-ro/7D9Y A !"u##$%.%&'I'()()*++V,,,-. .//}/0F011|2 2 2|23 334T45 5667h78}89`:A::;<)<=<<<=1=<<<<';;:::29:876543210J/B-,+*y)S('1&%-$2#>"! /t^Y+0 i * a _  =bz/~:2n XYgs: f_ j7D]D ߒh<އނkKADJ >H9BޅQޅި3hr߉-%YE~ct&]<6pOt~bE-sc.U G2=U2_17"R\6  F v _PMsT ;\;sNV>"* e]QCCJ3,a 1lS+G{#f [ q Y ^ PNb\;"o3C20|5"zi/cU],%q/~8+,NW)[ߜ>^>xMܛS۶ےcڻLKـmpF  2εΈId&>L4~θ=Sϟ+_BcZ6ԡ+լ5ֺYn٘_ڽۀU݈5ߴX2sMGiX* yuoqYdr c ] ^ 6KZLD8qa - !"#P$@$%&'X(()*Q*+,--.R/ /001I12[23A3434y45j56*6}67 7O778 8>8l88899W9@9^9999:9999:9999N93888J77a66t55B433T211+0w//.R-z,,!+9*))(|'&&l%$##2"Z!  9$-=d%OM h m { !^:_.[|`7PtldA Re'u^(,ݨkFێ1ڶ^$ِ"^2ןvA֌o* Ւղ{ՏձՃ՞լ F]֡&v׾ggvٕ6r`Pܗ`ݧ#ޱ:;lRM`%V^7m- ud;]F I 6 ^E*CbZQ G!!"R# #$r%%&o&'P(&())**+)+,6,,-R-.).c./N///0r0011U1f1122F2j2l2223'343R3?3[3q3I33?33&22v2K11_100//..-:,++I*))~(''O&%%'$##K"!!) tn1X}!#w}l$l 0 z S~g#D|eA#q&jn7l[Nce%PZNGb)b@uzVP@>|KW&NJs"{ N[`F }`-J\c+=DUq]q h x  w  Pc|T$M#XcRbW^+9B[T8d_slurhbc;&~6&R,Q@'qL:Z|)y4  { " #?44p2man|~l2w+6"iU_p)EBdv(Us<@qhRj n%\ .ޤޘqݹݎݒ_܈v܊ܓD[LLKܗakܓܓܴ܏>ݚݏݶ!vށIߨdhe%lu1#t(^tg n* hi.Ev:m'8yb @ o l U)T uROV 0_)^{_y}ns3:0t%Z9S --yR_ V=Ij # 9  X N''V<P3Up&'L'(+()&))*M*++\+,+,Y,,---{-...J.U...............3.E.A---z-,,,0+++**\))C)(|''' &n&%k$$d##""!j Hq7v--=th0x ; ^ Dwy7<P@akv+~ rh"t}+] T4US_n{iI1B4I51!:a^~sZAy ;c HHR](M zoS"/!*>M;U^h 0I1yH8Y J   t ! B ]  :L=t#r0e(_8}>)9":zy72|h9f{RgH; K \ 8 %  X iL XuD.^=/pz3KIo j(f<|9j[393LI_L8fSFnxt7 wE!mFs\/?,D>"A/1tpU i#0!bW9!|J][' }mq e0]Fdu}a&7i)#}[   i  J B+!Jv$W5%$9u1Eh_1wk$lDiEe5j+hn* b 7 U  ZX p1^Hl,;3IB+W U7a<qRy 7'LS)sXPwކvܤ/۩>n.m ؄P׎_֣_AդՊE3ԻԖԐg : ,cSԑԝuՄչ0֣ i%؊6<ڌJۦ܎ݥ7ޟcw>}wscJTdY`L}~><9^TV3 pX> {Fn \G ]@ !!"#$ $%6%&''(n()~*#*++,,,--.2.//V/0"0B001 1111222T2z2_22222222E2o2C1111|1K00002///3...%--?,,++q+ *))L)(b''o&& %$$C##"r!! z\8iA>f'\w " k  #RP5b*dWK7\ Y#!Y'Y{R&Dh)߮߄'ިi8ݻ݂[x:NۻGe^#Aڽ>~N۬ۊH5܌aݲDޗ 2߾BGB/d"@c%X.Ur0=y2sEK8(il a S >  R7]Fn9;c$ !!""#d#$v$%w%&A&&'((O())[)**!*h**+E++++,,A,*,d,,U,,,,,,,Y,:,K,++++@+4+***E)))=(((''S&&&%%$$.##(""! ]6AVfu6(:? 5 h y f `8unk ]"bH]( < n , t h nH%>]wYn{Q{BNQNGKNG3bEy))NIbQK>.bI n4"W, |Di_OkavY%Lx]S6ahRw{K9S&S16?ryM.304Jx(OLAwnJ>^DJ9~8emON4bhjP_D~ s  d = O  [|EIfK?hM /<MhAFRDFb <3 ,  ) 7 O "7)Lp=A   dOAz /M?\_OTk:LH,@$=`0^gM>L@8;wޤsZ܌PۧCu_ي2ز^Iיׅ;-ֱ֮UQ4ձ'kQֳ֤־C+ׂ؀r[ل8ڡU6ܰFݬ4ߴU_afd&B^xSsZ;`u+!pgE; w 9  / uw^ /C-l-"V  !"("#$$%%&{'7'j(7().)*F*+:++,t,-.--...//\/X///0E0K00000000000}0t0w0V/0//j/k....'---,,n+++D**G))((W''m&&k%%)$$#""X!! j K_?C8f3d?0$ \ 9q2_G0H/ bJNT8SUgA/!mc4tf]ߊyzޡ4 ݨݭݠKa9)) )M7yݣݦݾ2އz-1}qg dZo!` 6g9i@>8b=Dm!#fs(j<cSc i n L x`F,pF V_>\A=$G g!!Q!""#G$$K$%%%a%&X&&'I''(0((()l))k)***O*X*m**********~*g*D**))))U) (((=( ''O&&&i%%%$$e##e#"U!! [QFec-Z1Wkje n p w>YKYS/1}!R($AS%fS/4P:"V@Nh/X=Zelq#H"4dyP8R &;kTU6P$E]).A-!6Lc I d  * M g"cxam 2c1 b`<=`k(c!;4  ( % &   J z Vk<al5\P r9q'%;SANP_P4"r|%Y/2kb Q^N_6(ST)< w+3 jieGIq_9i/i " o=*Uc}+Hcfi},_'Q8 8w},cUq; m5rd+G#pQF'n4!:pX/wT = )  7 3 C B})!Qc!nWn*.B=9&P:-? C /BIB M f19 k   <  f  B  +D>2~&> lb 7$h[oV}%#x-e3~&wpqA=6E'!$WQߒxy^?"ۨG ڥAٸـ\ؐJY}[ן2':'  k!)""y#!#$k$%s&P&''(F()f)**++i+,e,f,-W-^-..?.b../=//Y//l////////l///./-...z.k.E----,,~,++t+**.))((o''&&n%%Z$$9##1"!!I gG=-Q}:jXz$B % k A1 ?k I+qC29S~>&uOXN6-DCP߸ߌ= nY]ݺ .=B}޷eDߛLK\H<;_xIv j`Q]O'wM6@{v> L >  :)TWbZm^Ett'( 5 !6!" ""##$$%%u%&&y&''E'''(.(x(((()8)V)I))Y)h)))))^))f))%((((Z(-'''|'0&&&]%%%7$$$##\""h!!x! tWj2y PF~B+tKim\L 8 1 OFbxK O0&]OE@ 1r1Ol&o9aNL{uJCL8 # 2Zc BU+ h6?RP VNe1`!xVQxzc>5 LofZ :  a 8 d 4 y . q Y:J=bR> .1a)P'EH6a S14%>t4[V w s K2xGyd c, W ^0^1wQd8Ut@L&d7O0?dF"XZ5v3Qs>IH9tsL;fP\}jeޅݬv܀Sz4ڌg ف6UآؒwHם׮k׼ׁvײד׀׳׳Fle9j9ڏ@ۢVܴJݧދl] m0Z B\ j(,']N TRX x x j 1  8GsF&qNR7A ! !"#-#$}$%&P&''(?()V)*M**+\+,;,L,--D--..X..../ /E/"/ /c/l//^/./ /,.....u.. --u-',,},/++++**V* )(((''L&&"%$$$#a""8!!. dY .v Xky R ] * 0Vg fVs*Q!x>`ayGlsu'h3Qv0^PbXhDF$M &ߑ߸yQNC 6`Do߁ߥz }|62sXa)TPI(cb8g, nap.pG^ 0 C : s8{.} #P.7 $ !!~!"V"#&##$A$$%&%i%&&c&&''G'q'\'''((.(0(/(F(V(c(S(A(P((&'''''T'4' &&&Q&+%%j%0$$$$###"".!!U! r+u{9KWPb z/l, 6 r > u>/Eb710?_erx/|uJ>g&P/_299vS5A# JZM?ao?o9\U{ 8=W YD4%hUgBz] _,> eY  Z  C : = m < . M9.WB3Ele]A0b=X-N$ 4    C  x " t|TYV y `!,-Hn,hEUGFeh8XK!}F)RK6$ w|uL`)Nq|g G i{f5A&}Jw@%@- !;Q:HT /h~+FHeGj za`\z8kQ+OvLj0uDwloW\9aQWB: Z   e ] S " q * w %,P*l7Lhr,eL: g \  \ m  O  @ v ~diMs,m4EKqKQ hW$W_U}d[p6(M@T)oj< 2z *Tߑ Mݙ/s,ۼ{ ڈ gGؐ؍OךצׄfoYvץט׆ם%ZTؤؿ`n*7 f:xvݳwNIbpPt&u3v&>6A`?c%r   b Y + F  Zs6_VPw !"="#$/$%1%&''e(F(x())*^+++,,A,,-S-z--...X.r.../,./?/T/ /S///&/ .....=.---d-,,y,D++}***X))c((n''&&&%\%$@##B""!h ,.5V/| E>'A   ?p!|Dh{6Bbo-X x5,|>4ߢ߯ߛ]i߃ߖ1q߫jߋ߳:U4#$UT,T,VjCB-Z !""Z_%T,O:y g !!!"O"#)#q##$q% $%%%&8&[&P&'&&'`''L't'p'm'u''#'l'r' 'R'&&&&&}&#&%%U%9$$|$|###m""":!!4 y1#y3Ei=n5\ T t  s i wX ]N .9pZF -}t[ I[d.sY LBCzCAL.?-7*5;@ss7EySM!quX>295:6jQO Ib"% Xd B   5 ' U / N doKe&Vuu0#jsE/}? 32 z  B -  ] % g : `N |*}y\hLw5B/T+_SwaJ h'>]QLb9u 5  d , g X y   1 { )$V~S!.FtswvPU8!f"  " O  \ - ^ Y a U IF#p-N IY7~K"?fq$jbBe!|' T88[''oGZy6LmEWݽ3t5ۘOکv.٥ٓ\ءKׇדhU0:*' GMIvףל DPٞ:O l9d_Xq*C/}R `%pt ~?*wzdm  z A C 3 VEM?-- !P!"#F#$s%1%&c&'k'(h()s**l*+[+,,S,-'-X-.. .h..//7/0/W/u/j/j/k////b/@/$/ ...g.n. ---2,,,?,++**Z))q)9(O('&&&%M$$E##"e" !X Eb9Qx#gQc z G v &ec!U[i4n.J:hke;LARde.WTWy~V@.[,a+PIu(O`$Wm9x&x:USq{=?[G2f\F5 |>sGl=} x   @ + wbL nhm%=uJ { !!""4""#A##$T$$%%"%{%%%&&<&=&b&Q&L&&m&&&f&&&_&Z&q& &"%%%%O%$$$w$ ##}##("u"&!!`!' yx_= @mM'U+ j w (td%Cif3u;\b0ZhSXb0]Gj%w5~P@PTK5RR>[oPw/\h ~<+>f0l)m 7[2r:E&gFq9U/=}RrGr 8 g  P 9 b  & r u r  DQ^f ao/k=  y  { U + Z W z !l>}-]  oJD{0 >c-eg~f(|Db Ko}X'VOF4>.  B$ P1?ObRNmRYd~\zMqXHe43/8qvW75}`@?A=e,PoqQe~QjP C" ( -T3biX|u6GFH \9 P h 9 t Z - N 2  e P +}M-]&hl4>z2wWW>Y1a^aVZuf*= nfnBf  >K=2jLnj^bJ3aV6SH lJ!m[) H$r/h| jUO-|qxEc1mLY)9{&GY 'ޥAPa'ۧ@ڢ&٪0h@רץ5֢֯_hk.IMJ;I{U֭֟֠Eפ[ؠޙ;]!w*PmA+"X+|I[ Q3c`  VlCr^O^ 0 !^"T"#$5$%&&'5((Q())*c*+K+,+,,-8--.-.j.///>//|///0//////////&/ ...`.--Z-&,,P,'++>**W))((a('C&&A%%*$$#j""!y kR*3O|<~mz9_ g J o<:N9{aEtNARbNV93F"?#[O o$7h=A q?I1UVh5bO>$AL.]mr3w5Kiy_]{uN52jl<W+?+0E;dU Q!5q@/7~}U((  <&:o}?EY6>cZ3C}UF)j%i*Do!ora:ECF/92Ec  j f @  i  U n Q5@d B]$DbLV5P;)/rZI$` h <  ' 7 5 8 - V 'w?Q$C2)z, `nlwF;hhTOwDI6>#zPCK^&b~}@>&n#o ߏ޿ދݐ)0yڰHFضU׊Rָ֩VM5ճ NA֌։ ׀Koظ=ٛ4ڤCۃu݅R y.$'kIh${t$ge4(hNy#0m s 5 7   swS2R: f3  }!?!"#A$$%]%&l'''k(i()3)**+0+,,b,-/-n--.U../,/;/`//////////////M/I/...g."---D,,,++*** )) ((L''E&%%$$3##"^!!(  [["i`lG^v 3 S % L 'j Nm4f_H34{?Rb X5JQLU(qNo k5;Y8h'2y4eOZt|'Va.ihb&@PNGLQ5l_ ^. \ c A wxh F ([@ Rha9 u !w!"8""##L#J##$$v$$$$$%%<%,%7%a%H%A%L%Y%1%$$$$$$i$*$(###X# #""?".!!>!- v 5u [10NFHKSn$js X =  S xNd~)4-@uGM4; {u1lT<*B5*yVO?"/(?#)"560y-qQQr$9c:`+N6ZbPb t (["a") bU:D 2  g  F 2 T D [ 8 h  $<#snLx~zhcPF  T   g G < ) o g  e VP.3m"?}2OZCevEUyd ofyM]liq(w;90&zconLgWL+j\[P"PMG:WE*D:@^-3D0S, <*2`B=`_,xk*bDjV;O!Cyw6{upHnvxBW"y"(l~ &~E!pBdZD;4dJt[)gflTz~Bd)I^C>z6|Ea 8 m  g > s K w  _ ? qjFI~~ N"2rqv7\xD]%eD/ { [ P x  - g  % > k :oYI~,z;y,Z,[ca3k*q9}/K{k? s MC.VYx@OߟbfP_ۦp ٳEؾy*וg)ַ֊֊O3 ջհ ;lֲ֙L_ץF؍/ٕRڛ?۟ܢqކ߾9m:V&(]qe&G;j}Ye,&' Z q p(1Zm=ty< !o""#$Z$%c&X&'J(())***+w+,D,--_-..4.../K/x/{/////0 00 0/0//r//-...z.h.--,,,n+++$**@))n((J''K&&j%$$$#C""!L aQ, PbF  i K N#ZMSkU4lQq+_ a)?_lKx=|2ux=LEu]dn;e` a=%Z;[QY.k:Y 0/'&T/"e3s7e = s l  Wq .#`! f !!J!"""2""#.#D###$D$/$Y$$s$$$$$% $%$$$$$$$j$G$'###|#3#""|"X!!!n ?Sk$%x]H."`n   M 5"wM<5 q,}|pG!0w*b`a=pU?+ hmsi5M@ IeS5# :BM.k-?8/q4a6+Wov\w_  h u  N i M 0<'1(&.='2 | v 6 >  c  , W  o } " \ ; TKr9s=Cgi%G_[3r44mkKL<%j,6dAG:8.7}}g djP ;*!\N)V+"3!Uo TT{"x9+87/}Y.)EkXqdcXR}-07y"J]z=kN]#P(!apd?ET!" dTz'sRHYqN ;M}O ) { / n  < ` s CGrZf|\OP s3Q ]?Aph ^ 3 7 ) y c    b B !zD4^0.D 0Uz5U1P^t~hW5@/hPj&;r L޾ZݱAYے ڶ]٨SؗL׭כ6ֱH+ջնկ՟}ՏՑՊsչժbքּ*p׾ .1<٪ڊw۷1:ހߤ[8Ei"}>o]fG7 a^:D"# d)GBU>PoH L !"h"#$x$%&4&''() )**u++++,,,--..M.../G/[////0/00 0///////(....'---},,,Z++r+*v*7));((T''<&&%%$/##"|!!+ -+zI,9g  l A x OV9'< ;5U?5mR6G _Ntbu=\#W92I;]Jz' _6nV5|+)H^XA7sh0z}xfF?&M`> }  4Gt>v\~P%uc4 R !*!?!""L"z"##B#y###$+$A$H$k$$|$$$$$$$$$$f$w$X####{#}#F""""!"!!W \dhA8BT)/2$qv& n > ?}aPkYBv:'yY49bVIZbG]eH' -&Qic!cg"`UiixCQ3FV321*?0J7lU y;x & M z *  P # z 4 4   :(D s b 5 '  ` ) # S 2  U . 6 Pq!U <w`iF=Txa,a p.,OFH+=W !guf?J[8 ,0T@y3!>ib#:S^=hzTj[;jYT5 ?{` 9DYuLwx2n,$&zzXcLpc|*@9kDX&<$.=BK0/LL;MK# D $mT;j2#'-~-5#eO auS? |5Uh  I  E b \ /  D 5Oih#.@xb#LNy&dSpt n * 9 x :  5 ) C9H;F( (h5N(CR6B)e ?Ol:j:$gM}nI ud#Sߦ.6e`۠ ںC٠ؓL gM֕fP, ՋՄ՟rղ՝DHֻG׃׹&؊ض_7ڀ۔)!,އMA1RP1]6ZC Xt9sdf>:; t ] _ T :d\@ gDm>  !h"N"#h$X$%{&9&'_'(c))***++,B,- -r--.S.y.//#/N////0//////////R....U.N---d,,,J++***))(([''&&7%%'$$#C"!!p S+F[,h" b z . N S7p1!7bnyu*<|O"7SX>Xr [!'^wNnNr4vwSrvq~= 2c3pWt YjQKrWcQVtss'a@'Z C &  L) 4f Nnu>: n !!q!""B"""#j##$$ $O${$$$$$$$$%$$% $$$$$j$<$(###o#C#D"""\!!!C! h c[]8K?.y-1|7} _ q P;zk'+ O8-Ew&y\s+%Ak\nK%sX#|l9rn{3yn>J;fTrZrN%0z1wWhl5>56<2E3K 2m Y ? w  L }  , H  6 u l  ( 1 g O W ) $ x P 5  V D _   E d .WI@/g.SW6&1:*rV7qD-qF4`,=P($oY"d-?kJaP@MS0C $9<2lV@6 n.;,~T9wb#jphu9C] q,7 fWT.?~bnqwLrScap,bP4mK/G\!>IxV&HN$lPf'|Z r0^34RU8  B R $  < j 9 "q|1j|<yUpQa'(W@  ; % c L K { | aT rTad.k0k!/d1?ZIL5~CsS{Kv+sd~;8_ug#?߸ޭݷ ܷu۷jڲ/ٽّ؋"י56֓C0"ջՑՑյՀ՜Պ|ւֺ0nד/عD٧dR۞8܏ݦޢFYtR(hevBNE_(/!eBkP[   aXZ+ I$D B !"n"#$?$%&L&'z'())v* *+ +_+,P,,---.W../ /"//////0////////w/4/....?---Z-,,N,++**d))((l( '[&&q%%"$$#+""!c /6p4m983oL | \S)" cS9.LdL::7S* #HGS 0`lt`k6y5 ;oN5m8]'k6jn?AWo%+kZx27X&9a+=Y' F  s  JP]w=Mj"] !B!!"P"##.#9##$$z$Y$$$%%6%#%h%c%>%%%3%|%q%$%.%2$$$$b$$D####E#3""s">!!v! i DH~D%/)k=H   m [ r2Y\{_|ofE<=P9Y@o'#Y!M|}rDE  ,>5Zy(aB>zUo%)GhN~*ur7W4e7d+54c6oA'w"b;| b  e | 9 W ; j 5 Z 5BYmwSPf  < t , _  + Q } / l N  L )u.Ttg-U)#tD>g&bb[DbkSkzE JHQ,xk_=u|Wm[{{WF~/#,ZO*l>uW]iZj|8uU pfDyXA_]iOzb)T=RI`Fep28swty )]75F~UcF:f~*<&[FB PJN@$1sbOnLJ  59L] Qzj>h8=:Iyjq+20,`'sL` K  , - 6_"t 7(~U P !@!r!"A"L"#@#Z##$E$f$l$$$%5%l%%%%%%%%%%%%%%%%:%&%%$$$$4###;##"Z"F!!f!4 B v33MpG$).>Bo+  jM5~Q-jp w20UzCt>[4T-0<^ FjFGklo\tfN{lg~SM55^S|e g1dK<3)}}5!z={mDg OIt C z  C A  `   t } L$Av{Yzf&c  }  / y  f ' m 4 N r Fr u]/Js f<4WEQn i0;264f nZ%jTGuh`>G691846),LM8fza,6t0m oih=$/tN*1{c0u@d{ I r  Z ) X   3 9T &bi1]B[fXHaN?4I%; XlGc^  _ I D +  z & g 63y-C ongt o/hs4T (OhXZiDb[7r/IIz|1, Kxߜ|ݰܣjoښqoE؆s׼״]>n֩I2a:,I7/b֌_0kפ׼R؇!:Din8ܨݦޤ4߱5 x-\QFc#SJ`0ki<9GbZsW-#  mjE#]CkM&_Q !r""#l$)$%<&-&''(I()8)*X*+++,H,--b--.3..../R/B/g/////////w/g/t/M/...c.Y.:---d,,,>++++**N))Z((s''T&&0%%M$$#h""!y!  qe/g4~h$^ - X > xJh*1Iqsk)v>m3N"vNfWan q(QD+PSC GT= L?~Nj,[X EGGgG%b&D'aX~W?[ ;N)  e P $ &*_.u$S+|`z*ax$ ^ !!""c"##{#$$Q$$%%j%\%%%&V&)&p&&X&&&&&l&&w&M&&0& &;%%%%]%"$$$]###~#9#""$!!o! 4x-qU9uxyg* = m5U;pp)I>?zAT{Yy 5l?enEY+lhipx|AJU7%~ dNZJ$Sj"s*!9c 6m 2(@Pc{B ` C u  >  " r ,I]& b(|`~~`d=/n+ B S  ]  I -  W CSq4H](u #9ae3[Yz!$Z7"iek9r_> sO"%v #A4PjORtU}xLldX?U+aM; zJ# }wX!vI>JvWT8 p>[5*#,<^F3=*t 2Q(I 9EA2:M:>Y0Y'TH6>gok=  k M _ z * ' E J g ,VC V y~swuO4K^VU g u ^ p .  e # C ^ WAoD w(>_xJq6s 3YK]{&AwE""i4gA>U"-|rޕ!c܋۴vVb+~g#nJuְֳִ֖֔֬֞2n]פJ_ص =ٔ/mNے!ܓ݂gzy+HP7Sg/pfRO+[I V 9  lO2Vp$lG  !N""#s#$%v%&n'0'( ())z*J*y*++,2,,- -l--.....//*/ 0T,Z:-$ aK}6~iG>I :0WUDXuKm4( `@@:kTM) e>bsT]#0WVI %2=g_r&DXx@kQv( M d M  ) O 9;r 2NgMwcCS l2+ = 4  A *  E } p $ y ? g 0#suX \TgtQ,nTowv jlqF *R?1_V)*ߗީ6ݶdfIڷN}O؟؄/ן׏P=f=NNxוט-hp ٓڑ1b`{ݙކ=u Jfw)f\71nB:fJ9 x2C whX{`U  nTO C !p"I"#Y$B$%V%&{&'(7(y)))*q*+N++,n,,-M---.W.o...///7/7/L/2/G/j/)/F/./....i.---H->,,W,~+++@**h))) ((''8&%%%$R##Y""! bSIIoe/X [ ' NY?z0M%qr<:&&&w&%%%$$|$r##s#0""%!!V Z\qCU{\ Qjh-L  z  c#b2R bnvw1K<qs(k_9 `.#j8F " )1/W89r$9\FGN qjLjCZm Z?Lg%}B@q*c5~q 3 _ 8 ( v  c 0<>E@~"6Tfp|8FI zt^(\<zoA p c  4 4 V ,`B_3a yU@~Qd`.B5p6dBCCqkZ&'\'(I() )*'*^*+7+i,,,i,,-9---.4.G.E.`..............G.;.---s-_-,,,H+++A***"))k((D('r&&]%%]$$R##""!!b CvyW'V4- xQN D~OZ;fyktI-0r;,%UI:JI8~;1!bߕ}ߙ.ޖzވwL{bvh|ޣzPro%f^lw:S(kk& *c(5u=j<;4  Lg3M"Q?c?gi  !9!"D"#-#$$Z$%R%%&g&&';''((g(t((()/)i)c)v)))))))))y))d);)((((t(.'''L'&&I&Q%%W%3$$i$##A"",!!W a. ss:F3f<Z<< k Y W i ^^2i^" jmm'Nl}%K rLQBN'Odd}|TgNb2EsiO_/;`8Fdg !MN}/m 8K~l0h!WI!]H   5 q  , lF=YbtE)IK_ZQJMK\B5,< h :RP39R x 0 e  * O @ v<i<H?0{;PG "1E_B,_EW-X \)O9%~d3{W,cnj11y1TjS']y" hYb k@2nbK0>K g{:OU%A7 2 .a?Dl)7FqJhHhB`pQL$c[%WaH\ ib{!C `_<[";ydth A   l t $ C h T  |ay/8=~@$X5qcDh*IxK? u F 8 0  [  @ .~O]!pD~)|5$Zu%Hhd{FF(-tz8Xd0GEP/^ߑަހݒ@ܸ܀k1ڂkSٮ٪ & خ؝آpE. !4i<=ؙؔD3ٔNڰڕ*q|Z7cZޝX#/pZ:U@+/HnzqZGTaVgr=lF y { U + laJ-~n(b;? O!!"D"#\#$%%&&'J'(=()M)**w*+-+Q+,I,,- -a-|-.. .`......./.../....a..g-.--_-p-,,,H+++M**L*7))O((q''u' &%%%$K##C""K! L-4fN><jITY ] 8 ! 45>c.S Kh $p=?*?8^e3UAg.:y#T~ߨ߳~ށU&ݸ݌ݕݒp݆5rdthݰݻݡ0*e޾IqT*.`=%7R`oA3:w;yNX,)088|1 M H 1:5^g?fDm!Uu ! !""#c#$!$$%y%&8&'1'['((T(()9)Q)))*6*C*l**************v*Y*!*))))<(((b( ''_''&S%%% $$##`#!""#!! j8dQ{'_"z7b G = OI#A(m2%_ !nB5x%F9EwVo)q(@5a$C#F1 %kLd!I[Bss:O7P&8V`7xX yX( `-K" Y>4( xh_+wG m X r  { 5 ~ FoI8rn#Z|"WYyYkwIS_ wh6*Of^ _ 2 m > 3 I e8sEV:s8+/=lD,:y XW!$ tMOP>|Va0plB5^l+i&(Xc-E\3% S0)kaztDK5,[mj)ޱd|ܬs۫ڲڞ[ ٞٵpnVU"׵װ׮׸ױרפחט׾03kؑػ)gSڱںۉ"܆ 4Fb;u74Wf_1g qW!fU9W $y(  x :  2 }G6i[PS  !|""#U#$%%&+&n''($()))*9**+W++,A,- -,--. .+.=..././J//F/p/v///?/X//I/&.....Y.>---m-,-*,,],++S+**B))^) ((''&&&1%%9$##j""J!!/ IKfD:nk ] P o . 2fg:d\/?U(P0a%)viI%  :o1;!9ߛeފW8ݸݽTjLBܥܿ$=ho[h[߲:h) E~.ir]d,cz8h_hT=sv h4e D `K$ya-0V=Z:2 ^ !";"#K#$M$%%%&&')''(f(()^)w)*#*K*^**++Z+X+Z+++++++++++s+b+`+ +&***|*3*$)))e(((O(''V&&&+%%M$$##~#""! y]E(\cr^mP+ F X %H' @BuV fIeGkp:S&=Ri d84 7`QVzofonl9u%[:q1oX11& eJx _u'rt+K2NjM,.nrj%0s\ ; k < k  { ;Y@8 +Q*vI`1[:~|qpjl4J G{"1XJW 4 P Q t a  lI!!q7y6HuD,8"s80])?X|+T&QKJbZSI-\W!@GmTRg(Xu(P61|`YE='N6*by Y'Y 3|)u#8-J Jn.4'`WUY_2]PL/xflcO]KMM* {rT! / V  X  - R ot@m8@G!IVzBbb_s]F(>[ %Tu=DO Yw  9 5 . N - 8d'i^An_$MyLE\@ vMK.[~$#gcd! Q It*pu}ޣ1iA۴3ڵRzL;ز؅ؑ/׹נ׋hO./ @>׏|׊ת_؏ؙ_:ڕڰ!}&ܙݍ]1-=_Z{N[F0nAtrKor#Q+VV 6 c S&>i I,uBo#i 6 !c"1"#A#$b$%%&'''(Y))=)*/*o+#+9+,',,,-/---.-..W.../$/I/Z/u/y/g/a/W/// /n/A.....v.;---l-a-,,t,++@+ **8))I(('''<&v&+%%$k$7#p""`! xCyc= OG[h  ;t#oX/W5H*Z+k'US PcOU2=Zp-oM߾߄3ޣo݅`x܁܏ܛvs܋܎܈ܫܯ Eݐ݌ 1nM;6BlsbdNi`;Yc zYMG}L;;  A x p + 3+u#H<x l !""###$p$%L%&1&''a''((()R)P)***%*v****++R+'+B+y+k+C+c++ +9+&*+1***** )))8):(((S(''O&&&%%_$$d##"""!! g<,/mp*6zE_ h  B JXoif9 Dm"PEp -6P b?4`3tzgdG$/nuU:Dc`J2 l7 ZH-jz=1+lB ) `  # U K 7:OF)xB1fKP3I6 /wd.5]Vf g n R  | o L U < G"3XGt A)kOAL*wR;]+g n M ]hX7B DVS4l7?>X!\S;vz\6L:& 3(mZi$({igK|4E`K?CH)b;{|X5_ lLF:)GP)T"P*7@,,(tW M  [  p : 9M;-JCtiDT^v{YdI)gP\uLe 3}47 E  G w 6 w\EvaqF]B O[ZB;B&m)m`1A{G^Q~%;mn\ݝm#g.۔k ڱF>ٹ٥;rA?4 B5K٫h @iڳMۮ7ܫݖ&ާ`߻8fZ qCo< 2hQb7 K=(iU3 . Q ' 1.Ftun`pR\ " !n!""#F#$-$%-%&1&c&'Y'((K())P)**W**+3+G++++,),{,2,,,,,,,,,,,,,r,M,6,++++7+9***N)))e)((Y( ''3&&Q%%$$$##2""1!!& xF6{`,?4:haW 8 c  @ d<SO2}/d]NaIs gdR{'OXpt_,r:pOGީޯޞީ ]pߍߴ"UVd2`{6SJPJR[Ai2z:)s|n+s%y0 Q}Ex4 n 6 g wzDBF=mLy ,*D  !!h""`"#,#j#$B$k$%(%^%%&.&|&&'' 'i''m'''(('(1(.("(>(K((%(('''''v'x'&&&h&b&,%%%>$$$##"""g!!M!! K ]:l}_NJ f&U ) D D f-AF[+|Oy)py*Tq?8 D+a4IIbY\?8 &@MPRx~H4a-&l7a)6v_ I\ ]oi+Q+| {[n`3/o:4Q 1,c]Af  x  {  ; ( q #^6@j3?u <i+2&U6!a76$a_4 `%<|M@hb ~ E W w 9 { L p M SM[JQ|@HiHy*~{bRMCo ^3 U%s64+?(_i Z8y2D"p]g/}Q6fW&QnN;G5"JLX/ wO;-85xzoqHB;s:U  X 0 u ) j :BU*F6e!oAC Vq{$-Q7,FJ9>7\KC%GQKNA9`^` & j ' s . e & j t`l:^v%F dW9BJ..=@p fn\v\gDzkk~$du,F2~>w3PߋL ޞtJ ݌ݙY69ܠܷܤܡܳܒܔܼܵ(OBݴݿ&.Yުk߀+Vdxg.c= /?kALjR:o7~b`a!T/YI`_n + 5 6 kBi0R@ ^[uz}{a \ !%!!"Q"##N##$a$$%6%%&&&|&&'''+'h'i'''''''''''( '''''''C'('&&&@&&%%[$$$###^"""!!!2 \}2+98fJ> z/T ! 0  5 ?^pQLY=Di{,T2`?>iqHTZBEqAv-^*(}wPoe?pv} 'f >h(f9 3*`=8dOx%=`n )Qq?+%S8n% 1 p E_'I/TVJ*2z_ KTl C !@!T!!!""%"J"j"""""#"##3#&#(#4#<##,#Y#("#("""""W"!!!f! T{3Kpi0S_da mo~Z> j O &veV=.qnN]BtP}5u/oFL h*I^"fd2Gxfk!&n|~:?Y0hPp`]Ho]`khE^`Y;!.!cR }069rO% N $ ^  ` 8  >  Y +l&q%lJB`K$MZb`]MRl#_Uu9} )]@i]5M h~K9w7U\<|I/; $"PQvRd\ 5lM))AwL\KC Hd 0*2^v VSl!,E_  6 $ [ ;FT$1!KS.m(qU`8r!P)6s   O ` w  ! !4!(!H!z!{!!!!!!!!!g!k!B! FEG+^Qt#Cfe!&K<^]E O K G  ZP(zxx1G9".775cyK_=4CT!hL=x;}R|<@E ''U%mvz 0dyM\PF_Tfir5k+j=(xJ7932  ${ plsc F ?  o  g 6uL!CFe_W7vAh [l"Io=Gx"Cs%NLl|g{u]=,D D #U^_Xs$G~TC b  * Y e ' <A/QM[t(M|"DO3#y@x=~$n%x0R1iH<]'A t[c\X`I_`[h9]b?])OlCnU+p(AnM)^@){N%nG:}WK#x3gBDT Hy_ $ 8 {  3 O - 2 P  > 1 Q n ` c A 0 ,  f B 7  S .  } j 7 w:#I h=d$e1k(lV 9a %VEl,Rq'S t;ilY/jC_3cHf7.hU1pf_@T# (:#K8Ifz4CLi*TE5v2{>}LhD/zc[2+y)e%a eSK<!nH,n,W F  7 , a  / _ y H O |  K8h 9)ETGWkc[sqVf\XW?={p\0' R  R $ C  ~ J Q #f0nU|"H \jWf`H5)o VIEF@ETw_ =!RtC\@ d4 ]n;}r$Iau";q#L HK|Ak7y##7o&Ru@qHn@X*Y"{Cn5 _ | * ; I UWS+e?JDz K$Nx+5T(pb<u Hg$"l&-WsoR S6(I} m Q 2  Q#Z%c4g:]-oJz^:4)+>T{+QH bb mV{ZA0umkhlVh^muo !;V2l>n1xLQRtM*sn[NZFVSPWa]JDF<u  G (  Z ( z 8 n c7b5Rt&Ei*:JJe!m2u'GO:,]_{h\Y ` u  L J R o7mBz@e0_|Y~0iS"l"f8W.U!fC~I8HCvc]9>;  " -:VYboz&%IXv Wd5_ [l0Hp2zU?"L~Kl :u4i S!>v3P9Tq$Fp;S{5NVx1B@cZRtrojyz|}x|irwZ]YDA:-jaO. yXKX0yK.f"}>W-\,R1PSpY$TT!m0I( Y' d[6 uE0}rX9:yvhxwcq_vh#!7L_t*Bj+Cq6W"c 7l#]a~Y$i2dHf8~8w=c3hR 4Z"Vv-M~6@`  ( 7 = X i { x f Q S .  aL5 WC\0U, qD8x; k#zGd!t:Wb-:hB^%s<E[e,s(wIeyL `6g1f>e8|G)~b>& vWE5}wuuhfc[e[b`kgpzx$7Va{ (G_z 8cKg5_}:gKo+gO?{ ,p+`R}8pHtNzDr%?v3Hm  ) 7 O j u   + I _ $ Q = d  6 f  )9DNQQK@/ f 4 D _ c E&wv[!b0e;v=~P&^2 nGfBeC)}iI*v_R#uZI?wvhUMO>48%( $)05@OMWgit2;Qi{1D]u5Nb{0Ou~ 1@^ ( u]4rZ?" fT8xgM5( v^I@-}qfaTQB9:/#'   $*37;KOYbpv|"/ATax :G]x(?[r9SkAYl%@`u6Ic5Oh/ATp 1@Wp| &9AS`l|"4Li;hC]{  w]8b-A@z=V-jP5lY= z\E/tVA/~lPB, |gPI9& si`TME>1-'  #'-9>EOXcgs|!,:HWcs (=L^k}%5J\j| %:G[nx 0;MZm{ +<HS^iu %,18=DIQYaju.?Uew{fP>% ^@vR4|hVH8) sh\KC5&vkbVLA5-"{vpkb\YQMGC<94/,(%  $&)-157>@CLKSYZafiowx  '.6ADILPUX[`dgkptw| !%)-/47;>BEHLPRUY\_behjnpsvy{}}|yvtqnkifc`]ZVTPMJGC@=:520,($" }|zxxvuusrrpponnmmlkkjjijiiiijiijjjjkkklmmnnopqrsstvvwyz{|}  !$%'*+-/024579:<=?@BDEGHIKLMOOQRSTUVWXYZ[\]]^_``abbbccdeeeffgiikmnqsuxz||zwsplhea\YUPLHC@<852.,*'&$"!   kiki/sound/gate_warp.wav0000666000000000000000000053105607645053536014356 0ustar rootrootRIFF&WAVEfmt DXdatam  $K1*9HNRNlmS'?qxt+ 1)fra{j]dRdS=UQe"F ~b"\B}zE7 t i  l:K tP x Z i " # x i e C Z K    x 5 : )  ) ~`u,5}\=d|;R!cDq'[ME:~0O0P >c)Efp6E5l$QQh"Gp SRL[H)X~,0mXD5IQG;O[r*+5?Y`oZq  ( 56$*79"8)((;8#I* !uzU4;\4 ?myJQ[?=688 9}?MUt /Ϡ~@Ҭmշդר٘S܄8ޗJuu@Q/%}1s:b1`>p7F8j5v7g&9fik jA fst+-v~5u +Q 7;;IGSL"Srm0 )   > f U j   E  O M @ ` s z w  %  f   Y H $ ] O W m j R s   4   N  )  F U Q 4 K e > j ; w J B z K # : 2 _ k C r z ` [ N f h ? Y @ 8 b < W H E : Y   ,  2 R t >  )~=MeE,5=VI2c>c? <(l*?+iMx-Jk6]} Bvt52 _G8]QzE;i^)</lGs&:9IiomUt ()$t3GZCqb}^iyw|r~wv{OHS^rdfQgXQ8@3"K$1C0(0%(~}`hFWw&YbYE=-to?xa?e%!L5=(5PFb$`9s-{zx9 \hfJc;0DO~*\y\q-A5 <0?Y(S 8.21,"!&B,*6uFpex5E^.@ $ZDShI6"-w`sSPwe.AY-6!.% `\pbmK[dV1ZlJ@42C".0 q*]Tf mׁɸ;wfO,r s1/jjZ'8p@)5}aZsVCuE }@{/}"r[-R[y]Ll+]u N |}f`_Qi@vM"D;J2,]-SztSzϼW;̽ulӯazJ٢|=-ݞym;\2rYP4`q6\z1 V;;)>`LC>ltG,Z;Ah+I>x MPs,R`6NTo J]g K 4 M L z q ) K & 8 e ^ c 6 $ . L 7 G W O r 3  H E  S { ] u s  : <  Q = ( ? P . 7 G N + : c Q \ ^ O V C c E ? I B K V = N : ( > T ' ! C   G   { @ ` R " O E ُ3^a9H,PzqCvp$.zX tm/!|77$ H.D@xxwwcIeTK/K$?Ps<H>kr:6ATd}':cymj}/RG<[n|m    >  , * + /  7 @ / 4 - J h = d F Q g q u ^ d u P } u _ n x m i ` G * W > , v G $ u C < F    7   m_^t7F_CUHxp[l<SFDV!! TqZ6U-iY'x ;2  CoEgb AIvo/7 #{Qd4 *H.V#V=)5Z>LZ2F'II_+\g5#J?n%B F &1)$ml^Cc;/c,5~]{j;aQIZ)W( /*XoT4yji:-J;%D 2 %H$~|Q(eIMM&>CD/ / yWwmYDeR7=7:!49ZW͏3p%^"/f|٠ct6GV{6B5As0F4 'w](^((dz$vc mbGO HDk)Ip$Ne0c;q]bU{ HGw 0AQjtp(%0o$BdWSkk^\gsxjt}p_k>h7AN: =fcRlLkkJYLu<[>;!RJaEgejx̯Ųd̙ذEpy9~d kǾͯӬ[ &@c<ک(2"q$x1="lY1-D~C9uXQz*$o9Vm'|)A?$e0`)c*aN4Z@C![h*Q|ko}? F  L X i K Z d E @ B (  S y ! Y < c B Z f I Z F H d N K        2  3 %  } 8 u u {  8 G : ? > *  R #  L `  # M + r  # P , 1 + 3 N 2 * ? D =     T : { E W E H  ) kb\\#jRdgbf O"@A\2<&[4A64)K3;t6#>@UqNx2G<937y< C J { . 1  zj@ ChEt/ R y ~ l N &   N h + : P "  N   y  q[}6`~~bx;O_NRO;oe{Eb10$GDE+BpW/GZ46}m Mc +#n~eb+JTj-qZZ!.5R-1i-4-vM>!-Cvw0^D= ^udHZi|-CgZE~HQ+y95F,P16zwG;C huV<=1'N98D62O+=P W 6ro;zN.^A/4T#]3 1C+ju< 5h< ֔DђϓaE$ҙU=Ad@duhDsn Q}g~JYK0^Cnl P]l8,7C]d^!_.6+G6 V@w=Hr\Yv1:Cd8i_Y-M1R?}^,=?KGjg}Zbeuw;4t x0A8/?Kk(X|0sU}~rq{LA?*B#+BvSpNJ y|SX<b"B2187Fnd|TC/ KܐIYƴD_Ƿռ`9%-[غCK %E9)y!؂d۔ !!}`}1yl .9<]N IERa4p S n Jod<,)BbW(ibg } J  ,@ i  | = 8 0W$_W6. ^ 5  M# v n  g tqE  n h j ( k a>|twC_  {  8 } y L O Y ` I g  ! j ;FiP l C [ 9  g ~  a e u O *F!_EcvRc޶ݮsނ߽fM`jPT3-( h &  i | O 4NL|y;;3S2}J)cTU8I L % w + C { , p S  n?fB/F0&>b.L 9  .X17 . n " k >hQX`_M6{:(9}U p ` Q Q V h ? ' O <  eUl.$XVb3}2e2 k D ] ] v ^ ; i  < g?*v|B"{3 $ V k c [ I 0 A ' loP@Ptl} J+h{ ~d[5g@p0!|OV#zg`M4\ oE* -L_ cED's'X[a212^yd :^c|%v4OjrxfnK<6"lr} {z'G <@SP/><.*2u<.L<qT7wU_q:O#,-<@Ib>bnefo5}=8O[g|D-+0 S2"h>wlܪf $ӓeeҙeW9O2ܲ 2X{,:VSU$h'r}X%E"\kh;7c)6`g3(HDx=FI36Nq5Kt#^ gvjl:Zs  fu]PA t  # pl<JqC"I !g 4GoQ6=u[.8x  2,PKd [6SXj~:vy ZgoMl9Fg@FtP#_d0ۿתњfƻE00fܻg^&ɯ:uX(ߕ{'{s0!W = !I7  K swg-tzG - F&Y*,9Bn  !xr|y'o  N@kjRxFJn S | n ,y3?m#Xc)Jz 6 F i7{\s@%k" ; 5 # Zat&@)(S_qT%(o,phq  J : A &  i}LEni"N3 '4;4QH.O\TLPT)jx&$9@:  $vj)y  Z n 2.F=U@@#&d L iNjZ h  sjF>Gzu5aSy# y 1 G;,;w s3u{d  1 \  5 FYL`~]cp  p  ~ Q P m @ q`^+~;^0BSR; K r   : ^ @ ? ; ;   z `  jJ]?8u0xYP':yzR=k4$Yw%vC2M/VL]l~-l`q  ? i e ! G J x |H!t`eK;zfM#cN[{X YiAE!,a;)F2wj9ND~.<`r Mp$Uh*@L~ytlT_A;.&`J^Y9&qgqpQ@jLlN^06([?2\4P,yC$rb8p|f.KmڦA٤Lתא|׸י;ؗٓS1ݱj^=`4AL>[E S = ` X V 7  f~2vwn]D4}5)^gm-~e"$o?ska :  { i .;iR^: d    " w^$*KT#/{?AkK+TI~X  nq`*Z*<lL s p *  6 I 4 I Z 3 X T y5wrOc!e>dE lg>r"_Z"bڨCբ̑rʖȳ&Dz&ƾŘQlłłFƌA ]8̄_[ֺ؝XxޗI.~8X&F z :n `yllynNJ)3 \is* U # T~Ky gW@YlGAR^P6LhgSq3g6E\p. \ $Bb}PW\C<F40"yD$j7oq4M g " R -sJ=wP|etk F7xJB 9 k  U8h/orYj(6OIg:6Y2h , . nPo1Z8dm{Gz PtT5zTR* ;ޅެq'^WN6Ma  A !cDcK)@Qi&Wlwx+ g ]a7NEAhX d tfn4x/oG-c"E}A'^  R I 8Hn{Wce+fEw ?@ ) 1 U  QSK:_ [1~CW>4"?Y_Tt?1ZJku-P~>6  @ , \  I Y ?y{G|jD ] S  & F vZMz;j (h W)fkC}8nk+Qw[ T\ N N C _ , i K /  V U  7c RXV]ho%ddn`#r|Drzs5J*Ca#jdutEL{H<cV;,B@B%6r8x5sj$gR)Q: a95@+}v;pwdkQwg!t&dEWM;Be.q(1,{iZqj=7T9h\w m|߰i޶|q !K݌>hh߅~=5)9HKtn&ILQ  1 L k g&ll&S :  o    * ! AO,A 7\Hat#S* u7C==_2L kp]@E  YI j  B 6 ( a '*-UPkPA-% ? Y -  { l S D (}{:NwB V(G2 WK=|P"yBft"v|t'!IER ޕݽܞۣړ|ؑ׺_ԳGҤН6СhΒΖ΅\Υά$hϳЕѷCwxJ YU<ښۙAu$euO{??6E  Y>-;/uC5f!;W] v bH e;n *6ccP:bv &Wu- \tV(1K7dV( r < >  A `sS59Hz:T"FOIf4"wN^<)2>]~:Q= l  " } O 3JdR$fKN{:[bp)bUBP>7igC$ GGnAy1Q`~u-o"Kxu+@((7Q  s  @#Vas s&j_]bV^3l9HJ'&@I  p y 1    uRbAQ kCdUY_Iw=72!)O-"Fan4 m  h _ g $ ` ILPC$B`9eUxN37 n+*P5I q V  a X g!cWuNUu< :n){S!l>$wbwU?Q"ccA0S n hWLX+3mvfGBY6[)GJ>*00GP 5=[{DNw5Rt 2goR ==Vms`gt{]^V33(sF9aCO ~x)4@$v)Q\ ޤ ޡiݸܤyX.3*UW8܁ކ Fk("L ^)GLxdmC9s +B5lSMJ%*( ]!*""j#H$$"%%A&&&X'''(,(V([(~(L(\( ((''v''&&%%$w$##"!7! &zI?&e~_bo]s ~ 4!o~xh4C3WR5)R]DNTkOt>\mx.`+Wm'pVd8 ^ K FU*r!AUgSd+a[\yyH<)]    m 2 #@$>Q,Jl%+TIr0^gOmL6kap3Fw2bK[4G8ZauAfXD,ukmk:0O d  l &  E , C 3?R=YYT]m$ z 1  ? V L  5 d$7s*dy^1u| \;{DmVs`S~OQ7o;;M$2< p>Lm9fF @=uUNj<<~]C$s!Sg6Yv:m*tQ+Y&K"_N%e@mxq *$q)PIC [hS r&[C@ g"eXd' G u E  zQ1Bw>,zQDB,J{A@"v< ;  2 K = 0`FW}|m/u UX0\q8-QS6h% 8 2CVCX*sI=fiI}"O1/WNaDP4?kWje?_Zq"]W2[j:F 9J\݁ܲW۞ڰ1Sرmֿ֝, ֟ճը՘մBL֧}66ٵ?ڕqd+݊d xLI-3 )_mQ w t )<8cy3> 3!""?#$$%%P&&'''U(z(((0)>)J)O)))g))I)7)j)((}(1(''a'&8&%%$Y$#P#""! hggGrx3K  T XM14k2JV4KZ` m7oC5N^!53,T,BrZ risD,MW"UNv"-H i6!zDE : K < ; F\K ~B%X Ks8<{l{nYGM<:^u/`%q T?Fe| E E  , M  Kb0_LQQ4\9ypU]}&P +iY:| ;%g  z( ^\eV7pm0Z8 >QIy#+O'W{+eUkcnj}Sj]WN4W82"p`P5&~wVV/! Mg_zr@" bcX|(%}]uy[KGR 9)3 (G9C"ia`uDwQ|,<;DWcMLUg?@5`Ds!\fas3yKu]tFh+N?mZB.Q$*'i}uArJKXb> rD&u\L6s+Fa:s0H~ :A(W4~:/a4y}vZz.R onB9 9 3 I : U r]42-QBlk.T*q:T 0KU!#m] .:c-\r|7Oe: UH4eHEG`fHNBGy~jzr|%@ee{k^&ݨ_bA /aeL݂^ޘ@}bK+3exgl?V2idFD< =R ` `   t){:[,+Cf+ jcYl\MljMogyq%_Q@'Dot0@} { M  h , % )  |& C&X|&qE&nI#.MxOIoB1< 8@3L%8>MH9MUmYF]{jzxu}{`]O\atjXU`YKS\f:2[OG8!B;M/-/5#* 28 ?"0*   =  (&1 ~ziZJCiKZ9'pz`ZBG+<8"j~Y7b9D: ~kyJNdKEV?#0'}qHJ6"wm!{ RI[i Sw(=pQt{0EZ,P3V9kQ#T93j^z0(OE>vVMO@<'azI7k3z_,K\'&s G N 1 + ?T<.`Z2];+'s%]]O!oWW<oopM )W o + ~ ) E c9FKw5>M gD @iwDf.4; EW>U&pXM O=iN l%@Yq_y*WE~;KRAGR7ߋޅbݴݟz.#-ܟܴܲ1A|ݰݸ%gޭ4ߣC2i\x)[oK'$`fFfFT/0/P;`, q e 3 OG1eLd+w6GJ v &!!!W"";#^#}#$$k$$$"%;%C%%%%%%%%%%%%d%k%e%$$$g$c$###4#""$"!! g hcwS5\t2k6X!j+ A   h  R_pCIU,L pKQkGk])nS_+"bFB gTPqHm5 !}X`{bLXv.&]t7rcw[k=c(LiXttk)b~K`m&ET1 h  U l j K Wh&HB+ jvF;ro&fY#y^F@ VrOf. U :  _ N 2 7cwH.j9"d$&7 ^;k;4uKfV&w%P,J-&:Z3GNC^chqt&6ZF{e-9 SJflx6F:%AIOeFmty~}%acgE;.;duTV:./HVHp\p(y`dD: bySVP`X0L8< 7  yPmll]MlpAx|6la?\DWrB`OEZ-FLKO040F.2:IU+% 0kR2/*38/!c5rN7G`s: @8 /,cNT ]Q'hOA/fpK /I<|(Ze|2EKa$9ah6@Y%Yvc'}: d"?Pi\q("v s 2  s qB n"vHkkaS&f:9A{xEU55P)a 2C+o;w~[  o K # L ~  P m:8qWF5 m '   \(I~SAitpD?gd.v&LNHOR85M0 5]t89F] JF<& Vrx 7zH"9\TT| E_\O{/C$RJycahD,e  iR#1kL/GVU?dfd1{wDD|ug]O@fu s*l\QE%2{}df^79)><&-*%>& )X +pAn^YQdZPyYy).S9)nbtptj]UqN=9?A:Y^,F<oMj8X)tn<9N@^QuO,zLt9ApxXfJ-75WM\vF tmt :N`F!m )v |(No*;C=D:L^=v`yo]ev{g0 4 K O F ^ ZE]RmRd+x_d;\ $:bEU6fDVe>Y;>,T"R{,Hu~5Id R  B 3 1 M g)eR6K)>Y![]IG%2_cA "\UEq w<|VgޓjQ:ܣڍeA1r> ֐p1վՁ՟tVz$v/1`Uv!nH+YY2p   5 q * 5j, ~t5@wUMTIa rQ  F  w [ H u c O M  %  {BClBuH5 y22r$'z7N& G :  J  29_D#nKE O;o\#NG/@!pd.0~~fc[szZq)1>gRb 9\k6<@["Leo9 a_ f8pDeM A i   2 n L p  Y G S s i r  } | e w K j E # &   % e 9 _ 4  sFyqI.=];cl/xi=T1& }!_[pL GU$X`- fE!3kWh|FDH # *D.A@.qp<:>8BP\U7!7> 'iR:B[)py6{]$vp~ \:CK/:6yw^1;p1H]>L *M} ;] J4z<0/]FzY{1NTw3X$Z "[W5&V1n> r d T = 0 3 3D,`_=S<EOQiEi{EuEBbh _`)JEDl5  L v "  Z   3 % ] ( $}nxxq(uKvFyGK fyA0u$Sl6YI P[2ߠޮ\ݾ=NڋQٷ ףJ֗B,Ս՗V.ԹԲ԰nԷԗwԼԳԠ"^իՈ4N֥D׃+؁yٻ0ڦ0u۱l2J`/84~120BtCZyw1d*B t p]jr2u W!@" ##F$&%%e&''L((})*y* +++, -a--_...U///0g0|00%10E1x1Y1111111o11v11110z0]00//V//.J.!.--,K,+l+*R*)})(B('&w&%J%$ $l#" "t! ! >ng(pUB-]  b  ` *|Hd,@h>(99)1>vJ } ClJyvs3߽}ReA/2*,&*[Xߗߧ^R> pnrVj'LL<alv1`G c9uBa 6 2 q > vHa_h!h#Qivb ^ c!!"""O###>${$$ %1%%%%"&w&c&&&&&&'' ''('&'&&'&~&l&&&%%O% %%$>$,$#X##"l"!}!! 7 f. ^UX Hz,k4 n ,  d , WSI-1 :0Eh3{M_-1QrK$qNvWUb/,N<DU.8ikU 2ma=q,6T4n 4/y1RmG([6mNdz,*q 'Ce*WH , $ %  ]  d # Z 'bR4<XQykgT#sy[q# /  i g   : [  j;$BRx^ o?PVJ>8`? W)F}$8(F }; $ v8DU40kw(Ze#M& DlS~c9Z3%- _A1|hQJ90uwU]H`deXrq|o3=e K "|g)4A$YoP;b];`b+t0\J-@Sdyj#k M 8  ~ B * E } iD&YJ{X =j_F ?S A n N Y   ~ =  A M 2  2ryGdGzwT,IgqHCTQ#N )k+nmH0GLa ^[;r1?@ >C,nݰ5u:ڢFِٮأ؝GצwAT0  +Uy׮׸0Aء?}"ڝ "ۓۙ@UߚOam%)wDG/| {.WT gXB$0o  ~G7.]0(\40l f!!j"n##}$$%%g&&'((N))P**++9,x,,^---N.[..  ] 6}IPTG r!"c""a##9$$%L%%%o&&&E'''(K(=(((((%)5))?)N)`)|)\)I)c))5))((((t(($('r'7'&&O&2&%V%%$Y$$v# #"8"!G! P B<c5,k^x@~L$l V  C E mAz/_KaV&c)p =z&6>Vo K*d#O. f3%pCJs(0cO| R&tP i!Ab N(r Zn6e SD!g mA c  n . [ s ' s 1W#R -h3df  vpQ/`@6mkbxrnrGOO?2 k}-*v`eR  @ #   I 1 f}08{Z%0$@,L\V#r@h55_sA6[0@2O11$$B+M6}="p(f$;f$ eBAH-B2N+&]HxQFr:8Q>"4JY*oS~p!tGiPg b,3l! D w 0 . # g 9|8^GQX`DSVyKh:cPW(a$WJZ4 E #  A n o ' g&fUg ] {!oW}!:q)WNo4@=G0`)I qd<(y.Dt# W߶r ޣ%ܓܯnۻh9٣:WY ׎׉<ַֺּּֿ֥֜ -MR׫׼u؎ث} ړ%۬fݨrPߋn!H#sT"wkL*8pw_D hI5e ,   ?$$)s]& !!"#$$t%%&%''[((T))**-+g+>,k,,3---.../9///0<0600000100101100000W0@00//u/!/..e..---,w, ,_+'+* *)O)(\('@'&"&%%$##""+! , a>q,`k0k:5U  @ `  NrUQ|n n|.Dk)Z:b FqB}Y Zmߙ'ߎXݳ݌:'ݙܬܺkgcgOMU4WPdfܺܭ6$Qݖ?ު޶x߭j+rf i&, kLXdt\ A wm;SfSr ? > w.l/djHFl *t*o****+***++++***`**V*)$*)n)W))((((j'R','\&&%W%$$$#1#","!3!  1zEkD;m]q_Z q   !,#,Z'+Y)lkV8)[ "":#@$%%R& ''W(9))1*!++ , ---.//000a11J222P333T444>5b5\5565A6636n66{66766666e66L6(60655s5E544r443N322 2110 0/..-2-,3,+*O*)(^('&L&%$0$n#"!!j -j~*?xu-08_ a P"^y"7#u )$&pECjHY} wOv߹G݀ ݈_ܽw:|!ڮٯj٠gv׋׻pׄfHsdshs׺ן@R؝ؿ,مZڵE۹zRݱߔ{>+S`&N: Mi5VIP3`<Cz . & [W h$:$x3"NJ_L O!!"+##y$$|%6&{&<'''()))a**++++S,,,a---+.p... /*/_/~/////V0?0@0b0{0~0z00}000l0p0R0M00////...-[-,,++*t*)8)(0(n'3'm&%\%$##""! ) K L:@~ Ge+c 5 h  c o*-^$pW-s'[/ UY|XB'@5f;* K[p;-f9M,- &"VR={\nB^1FHO#RR m9PEUqv]t)vF0R2 +yLFr J > U I 0!zt/d,nP{9u$/ub`;hxw\p)qbW3sGR$'z~ 1 G a  2 0 I  :y*av*FyKQw`36]kM;F967|Ty0`7|ߋަ>ݹ݄ ݲ܄8ܼbE*کڥڊb`N(,50&94+DUQtڢڌ >H{(ܔܪB݊ݔ":StJf qϯv%;ΒΧVO;/qΥΟϝϮ6pZ;g3Ӷӗԧ)֕/Zfچ(܆݈߁+-M'}tDZbE&y[[y]E? J J F u 1o.1 a}[ !p"K#$$%[&?'&(()?**+),, .1../00q11233 4_44D55D667:777=8889N9999::::!;Y;;;4<[<<< =V==========6="F!u 8^vml  $ HbN5so~.aXb?s4!y<1>ަ$ݩ܌#ې'Eإ؟R%ךXּմj:ԯbq>; )1UԚ=ա{Yנfؽ"LVb7ݎ޻ގ RpAMIOX3^9 y8]'7ZiAqaX R D C >T/|:!a8V '!!b"6##d$%%_&-'' ((B))**L+,/,,6-g-G.j..#/h// 0]000P111.2@222g333|44F55)66#7G778l8889&99898_8X87\76P655743210/.-,++)((& &1%$p#""!r Zi`.H wSJY^   d  AbeEB^= u<8,LDjYKhL 09?M&f0oߎ,^= FKc߫(Q9gNaf?v)B r2Gr~V8 [DQj""!!!5! } / beDupNg7!bIL8 > ] 3 ? E.NLQzSu]";iS;BO]BYfY ~wp.ِ"BׯX֯ղ}ӡѭbѥU{?΀"͜73~[>˲wn_ "$iT^˭Y̊-͖ίQG jӭen֑.jK kV%ޠޕyj-^Ye6IV &< * 4#@. F  D T 1/KRI3A@*D0_ !y"j#\$%%&'Z(g) **+x,---.h/ 0012234e4555 66I77h88999T::;;;[<< ==>m>0??\@oABBC DEFFGHIJ?KKL5MMMM,NM&N&NMM5MLRLrKJIHHFREDB@u?=;B:H8h6420C/Y-+@*('$&$$"!  >,' ?  {l[umGt#/_=%E3 ^DIuFNF*RO$߇޺ ݜܹ2ۊڌVn{yԡRe_HѧxБe(ZЏϸϻϷ.1H^м^}ѻ\ҊҟhӃRԢ_[ֳ<@cٹuڣ<܏xނFߟBm 6Z-:i-mT$&muMg&#Yb[ ; +  o5 %"/VD !!";##$;%%&/''(1))3***++Z,,}-.G..R//0a00;112{22[33W45]5?67789:;[<|=>D?M@AAB&CC7DDDEBE;EIEEDDDC C BA@?>v=M<;9:86O531X0.-t+)H(&\%#"g!4 N&*ZMXi5A ] ;mWhkxa;(6e%oI"Gy/1^x67}߬߉~ރݲc|V7ۨz^=&ڭڥhڄڅ #څpې6\ܴu@< `ߣAZ5j=Kx["+cn$B =I#Pfx3D$kG`,"v ? n g  OQR"J-O[|Hb5k+0Lc Ex`*`S}MF U@BatuI f 8 & So*cgSUwEVe"96*q#w)NGP~*RQߡ{^6݇NnS۫=Cڷma / x zrw8`&w*R)Wp;V`h ^}wr-ޗ;~ h6wNՌeY<|Б#ϕp*}P {i*̰ˬ_˷|o%4ɼɤɺOL|ʯ$=|˵>̠͸!?4ϒggѥћ m)ԹmՖIױ`ٟڗ.nOyd?(_RLo/KL&NNSKb\@.sgU| 1( !"|#u$M%!&+' (()s*X+,,-v.u/001223.45566q78h8!999::;>|?<@@BBDoEFxHIaKLWNOQRSUdVkWTXLY:ZZJ[\.\O\\x\}\0\[e[ZYXWVUSRPOBMEK4IFDuB?O=:585:30-+a)2'%#! s-[P A G ! E[b7)7/UMbވ?w(ڏ9ظ\SMXӪDсњ8Ш2Ϩ\tͥSJ̷̶̰t̐̚yv̊p~̷̓ 3͍͔DΓο=vϥ%qЫ%ѯєҾ@#Ծ[>֪ضOٮVۂ^ޡSF4_k pZZ[80Ss<\N! Y ^ < (TM?jf43. !p"##$7%%&Z''(%)**++1,,P--8..f//00B1112 3|3L4556789: <=>?ABC(EF{GHI`JEKDLL#MMMIN]NqNhN*NMMLlLKJJIGFTE DB@X?=;98631/-+)'%#"} {G&9T]-t  ?HWePX~Qf _soLIY.p  Cu$t~CYHU<1-KWd#bWedW'wh\$q   6 |KF+n2p2qWSGd.A) hJFB;QTܨ܃Iڈ i_6טA֦|,#֒ձՋ%fԬճ51&eCwռՋb)tֿ֟0Iײ``[!ۑ'Plݵ:߭(wmX^^h*DAc cqsxERgX tO`gS   s  t hFq2lr-88/(bpM N!!"m""##u##-$O$$$D%L%%%%I&P&&&& '&'&'4'''&''''&&'&&&e&u&5&%%%G%#%$$-$$$x#3##_"""!C! I gs) 16 e DSJuqs"3h{b&`U(n bݐ2\$>A׀Tտԯӕuy&в"ΚͪhʹX-˄z-B&ɛɆɹɞɩ-wmʲc{r ί·1`Tҡ ԧ1`$`UقzܸܮA$wr67aEH4  +&D/1!rU Y @ s Yvv]]f x!"P#"$$&&'()D*+#,,-j. /00t1F223(445@66788E99^::c;;5<>+?!@@ABC-EF)HIKLMNPR0T VjWXuZ[]@^8__)aa%bbb/czc!cbbala`_^]*\Z9YWUSQbOMsJG~EB?4=#:<7=41.+I)'$" !7\?j5M ` ] ' !isfP% >Q]%߹3ݬڭk{ `X<ӯ[IиσΑ ;U5̗̏Z9˱˻ ;6oy̻cͲ"΄ϗ5Вe\ҜMӽԨc)k ؼ4ڐ)ۡhz+F"s7cyBYT jaR(+!v p D 1Mk:%UVZ)0 !K"##$E%%&''(()f**+,,f--^..L/0U00^1122G334e5#6m7m89:A<=>@ACDFTGHIKKLMGN3OOObPPP$Q QPPPOOINMLuKJ IGFD]CA?=<97531$/"-*(&g$x" 305WMv#e K ]dg08vRD'jTo(zGI}? Uddy ~Sݜ^|+m0yB;ٴpj ׮׌fF2ֹֺ֏֣ֈֹ֢֦֝1g1e׶,m5كEڍm~ݿ-LMߛ<|LVuze]\vBmp"fi5qR\p%.( ` B 5 | m YU81^9SP|i7PRnRHFi fLo/ukm "8 Y 9 i  T"Znrln{; y5!6h}@3nIv[>o(pc?=?@ܨ`۳*٤=bלFM֥֌r_պՆմՇZՂZlՑqzզաՖ*e{,7׆:؃ط >َUګڇܯ#}\X߭G4Hm~2 _I[GWqnqnkq1u;f+q G  p o'$B$Cp4!d2 !!!8"""H###&$X$$$%%%%%V&I&y&&&&&&&''+''''8'&&'&&&p&.&.&%%%t% %$$0$##.#"k" "r!!  ?}Yj)Zfs8) b z  "U`B}~|h̻̀@Y |6KЈџҒ+ӜS:ժDץ7ٺOf/Hi%oxE$s~    -  !"h#k$% &'?(()*5+0,,-.P/B001t233K4J55K6&7m7=88!9:::;;Q<>u?&@@ABDEFHWJKMO]Q:STVXY[H\]^_`a bbcCcwccRc(cbaa`c_^-][}ZXVURPpNLIF/D[A>;8520;-*'(%#!\ G\?<s'+ hd1,zymk^j`GHY^@sq*_cU^ߡaܸSt s}גB?ԗY8tnR[!͑N̍hH!ˬ˜˭˭hW@ACDEGHlIzJKLiM6N OfO PmPPPPPPxPDPONiNMoLKJ>IGF2ECA'@ >e<`:?8E6241/-s+('$"! tBphH"4b  X eU Usjt,g_hY~4>3!v! O߷ݳQݝq۸jڼM nR؏63׵}׀a֣֙x֣֡֫JKj׺?>qX٨BژێܷDݙMB? "2Dc@8Y2> ~[P,lK, $Z6Lfd # (  4,{L7}"_#%o XBd<XCG<t#o@6Co$s$R#@ O'C % v I  X y|tS\N;fL4UDYS jLQ5b>g*Lop:SO`ݬݢOj3\ ً! ٗj&%׀g׶ևց:cC''4i֥ևNדלbةOv2;^ܤi+ސ߄^ 9RpBO$& s+kVH\cLv? Y0W r  %HICEoz=ah! f!!2"p""%#c###H$$$%E%^%%%&@&L&&&&&&&&'''&'&&&&x&D&J&&%%%6%$$n$$#_##""!! g  e\o{Uc\O#LG B  + y{[!#6WdUy&DtUj!}z E߳ VAR~tչuԾ9FjЕ&~^ }>ͧ=̑N̼W˘L&?(xˈ˒@{a{ͼMΕ\ϭЂxсpӘAթ;֯؆{ ݹ\8\l!y~Vt>?\@AB4C}DEpGHJL4NPQ6SUVXYZ[N].^^_`aOaaaaaaPaj`__^<][MZY W_USFQUO MJVHEB8@R=a:741M/U,*'/%#y!':ON<4  _;60QzPLlpޢ@h-ړKآ2ׁցղԐ q(ӏ3ѴG Нn Βe1~^>- Ϳ&' g͔͌ͭhE.ϘϱС+х_6ӯ!ԛ՘]֕NJٜVg"d@;] :B|J(!yZ<0:9F b l C  v; YjS/ Q!!"#C$${%b&&'F(()**f++V, -- ../e//p0011X22>33405167889:;(=~>?-AvBCEAFvGHIJ\K!LMrMMsNNNNNNNZNMqMLLK=JIGFwECmB@?J=;9753n1L/0-+)&$"W!x$JyA N k 17r,:i!Tv~!NN2@O<T!f/X~=ުTfDܾc(p,-ړho؜ZU׵ןq]]PD1KBpE]k׊׍׳ ?~وّ!Vڷ5|۶%S݉ަފ2? |")b ](T](b'jis.G:e#"C m ?%v ' 8}^:buw/]=WHyKsrxd,0qc,L7ylNb>w_6zF  =  rriQ5?xvTL9޴޿wܠGۖڹs?ر؜>ح׉YA 7׳ֱy֐֨֒ )y׭!`ؤ؟ -يWڸXۥN݄,9߈gkTZt?UnP~lq+Xu<4]>v*X\ M 9 `s[:h*o2Xe3Kz > !q!!"""2#X###,$$$$)%d%%x%%%&&A&p&b&l&&&V&&&Q&W&V&.&4&&%%%V%N%$$$ $###""!y!(! O 6Bl/wXj$ZJ:Q | 4 *#HDjt ,$=4;r9rQ-7Fߓfܲ'\ک~<׾ ֪GԂӿq5~S~mhKη_.ͧ́?F1˅y˯Dmr{˜bˮ˽˧8L̑3ͣͥ΄ΐoϞ-Х ]XrԬ֤M׆p܂-ާB?)8I/ w`R0OA  L{]= )!"2##$%=&P'U( ))*i+D,%--.I/00L1=223344566A77n88U9*:v::;;=<>d?>@A$BSCDFG=IJVLtNPZQST7VWXZ[F\]]^^___`_w__^]\\ZYXXV-UMSQpO;M%KHDFC,As>;8:6q30.n+>)&$5#r!zY\!!y  M P  !hJe*/q>'H$SDP[Sx n8L aݦ LG7|*UՇչԄԾxv4Ҭ_ЛMρ`"Θͳ͚glX"-3;yc͖;Ͳ /aSϏ=q Gc6dԞ \1׳5تth<۽r/ݫw߲Y) uEgl&dr~I=-  d  7 =Xk:{~_(-U V!""#M$$%|&&'@(()**D++s,,--..a//400m1112 33F4456a789:?^ABC EF(GdH9IIJK4LLLMMMMMMZMMLK6KyJ{IH]GFECBr@>=W;9m7531/f-w+t)p'h%#!$ F}] 7= [ F - )t't93T} /z"3cFRAj2buߪ5߂oi$S_ڂQy8/ئVs#$׳׾׳׍ײםלױ4M؝ةSGوPzڜnېۗ܅Nހ߼DMsjRA}'VF$O[P*!F ;,j|&]S\` c -   orF#}};?YX3/eh_#,-Y{vsm4L)-A A P=Px xr   v  Tea(R!8r2M U-}sv I? @  S I*$E\~ e!#"#$$%&_'d())*+Y,"--.`/00g1H22f3?44:5 66,77(88K99f::(;;<<<`==e> ??@ABD^EFPHI`K4MNkPQ7ST(VRWXYZ[@\\p]]] ^]]]0]W\[ZYXWVTSQOQMJHcFCA>7<96>41.q,*'%#-" $0p<P,  9 ^k1w:+$'&69MOdS7U'ߙ޽#R,ۀG٣5أ׃!t ը(i{<ҵс!ѲО4OU'ζ΍ΎJ5\+ B_VvΜι6'ψϷ0Ё (Ѥ1ZUӇc^3ֵנiB2ڟ.y݆ ߩߑ*M<qBIL2M4`ZaTJp  b S ^ G@&YA;%+ F!""z#6$$%1&&'+(())t*=++E,,,-/..>//000d11A22033a4<5567895;+<=>?WAMByCDEFGjH$IIwJ KxKKK LLKKKKKJJpIHGFEMDKCA+@?(=|;9766342W0O.J,D*c(q&$#,!DI{Md   ] y "+`[b w2soMiL/| p{iq8Y߂dAY ڰgMٔ[Hش،ZؚGJi,S4t؇5Pإؖؕ[2~ٷ^ڇ3ۊہܵbݺIiG-7'YbH})?I?@AzBC#EFHIeKLN"PQS|TUVXYZZi[[{\\\\\\2\[*[AZ\YQX WUgTRQKOFM/KIFNDAl?<3:74W2/9-*(&$/#!6 jnhAa" xOb"&1A(Pf Yh=w   AΎaεQϭϷrj[jѺр҈҂TԵ$՛ ֻ"׉1kْ ېJܰ!޺*I/wvp.8`!>6,ZNW z^a*  ^  NgS,g;)W* 4!!"j#g$${%F&&'(())**++],,s--A..M//X00 111Q22$334556789:*<^=>?A,BCDDEFSGyHIIzJJ9KKKLLKKK#KJ%JfIHGFED^CA@>=;9B8364o2~0.k,*(&$:#X!| uf#1 V Y hR?H;JOcSgUgOk-my/` EGށޛ>x! ܨi۹ڤZٴY[اؓ؛tHMM%0'A)\TNxؚ%قٗٲyڲګ2t۔ED|7ޘH?~UJGj]Ap'lnuBX4}WBGXIK'q0Hm#= u  | " ` h/Mg3Tk}P__-F ie_.UjDuPNOS- M9Slf ;8v%Kx@ M A *1'v#R)KTv f5Z;qS#*lQ }ޡ"޼\ݓۚ?ۏa_ڈU؟oW<עׂ׍AsK+GL_A`^W׃qי1'Mأ.ن١BڂiەEܩ%\ސP߬FRp,TK|i.D{`L"|9,d{l9mMd~ L K  K ` =R Yg*kaTCqO \!!"J"""##}###:$Z$$$$'%m%K%%%%%%%%&%%&%%%%%,%*%%$$Q$$#y#C#"o"j"!^!+! % .;Aiv>t+I Q r j *b:@u5+/n]y'JsMR,uZ /ݎmۢR؉9>UԞQKѠ њcϛYΏΗΡ;*5̨s5Z'̸˱ˮ-]IQ̤̽OʹͰ=ΐAϦψФ-ъҌwlԋ y&׼v٨3ڗ8ܫW)tU&{C#gP;I, % exmcT_4  !q"\#}$.% & ''(),* ++,U-&..r/\001C233F44u5*66+77N88Q99&::X;;;<??@ACZDE1GHpJKMmOPcR T&UuVWXYZz[&\\]w]]]]9]\_\[ZYXWPVTSgQzOoMaKIFwDAk?<,:n742/;-*i(R&$"D!KX;5  C i * 5-wj=^]dWQllGdvy$nw3B;ߵ# W?.|+ֆ-թ5|K4' \R ϻ΢`?%; "C1,ΥcθHkϙЮГыiҮ9yӇ6ֱbקO|ڴ8Z"K{,V{G/{O)\M's{BjfR)=]O"  Cq9iNI(>H!!*""#$%%&''p(()"**++,-d-A.z..//10011 2g23h3544Y5?6,7S8Y9:;<">?@A)CODBEJFnGNHIIJJQKLLLALELLKKKJI ITHQG3FGECBFA? ><:87D53X1L/*-]+O)N'%#!W i'[v)Da `J>_9BFals("O3r8@i6Ds YpۨnڜX$هpt'حإؓbkG1f.-G+*TtWjث؎ز(bف ?ڇڭ.nQܨHݗZލ@x߰SF%"@52ZOrK|^Q5tOu.Z)euPY h5<gs , ) W 8  YGMd(K)RgK 8l.)-XpYa{tlf$9 om,DD2E `~B 2 :   KPK!w\=#|'5R%D% %$$u$$##C#""""!! $ p~gRk() tfg=i i  6?l[Yk Y9GoEK[A15c+ߤޤ[ܵ-ڇ.aجR׌֎^hҊђIѢЀό]Ξ[͙ͤ=̓̂'z˳˫ˊ˩ˋ˛˼,@U̟KZ^ms=Ъ"LxVyu֭״tٳ8ڰrݬ t6R1?<*_G_>ZX$ N/ )*BJj !T"!#6$$%&a'x(M)**+y,:-..r/%001Z223D445"66?77S88w99U:: ;;Si??@.B1CDFGIJyLNOaQRTU1WsXYZ[Q\/]]^s^^^^s^]]\[9[$ZXW@VTRQNLJcH FwC@G>;86T30'.+B)'U%=#!o OLI2( rf9-$uSjS:gV2j]Rvl@`wLUޏzxNء ׊{xӛӌ4IOϳkεΆOͩzs1g,I53C\:y͞͵2SΔβOυϣUЛiҋPMԣ%ն%փ8$ٗ%ڜMfOk`Z0_hmXvR4" mhO%M0[ TcS=$jM"mt %!!"<#$$%G&&'4((h)(**X++5,,f--r..g//001[12a22~334p5&6I779V:x;<=`?@A}- ? H 9 WMd/)W:N'N8SeQVfO[hs. \%F(`'SDLC O = i ]  L  BgW [ HDT$1kJ>AFO"EW~4uH9;?ޥݴ(vAڸR~)#ٯ|؉q}aJּcִ֫zւֱִ֑֚֟"\sx3Tw?نmgb݅%ޞ/ߛs@S #=kYs,9Tvb*K9i8z5Hq ; | 4 | 2U&}g+._uoNL5 o .!!!K"Y""#I###D$$$%%>%%%%%%-&&7&d&<&n&a&B&n&K&1&2& &&%%%b%8%$%$$O$$#b##"f" "!! K b7tX"a)e!UI= " 8 k Y \ 8\\u,@2kW6@J'p#TSݲEۊBّ^׾Q֞՜ Ԉ ӋҒ>ѱYχ=Έ6͒Ǧ̅4˕ˤ˅.DO-;D&]buˣ˹9y̏9ͧ)Κϙ2юby~\կ7 ׮؉چ!ܾ܄!JN1t*J4_msAf,K2!^5 ai53683,L ;  l  )Y9&X:W#Z!: }!"^#J$!%&&'(})E* ++,-5../u011z2:33455h66s7889}99::g;<<??@ABCbEFH%JKMOPRTUWwXYZ\\]g^_}__L`__2`y_ _|^]\[Z =|`IV;JGP  6Q.pl G C߿8@ݙڜSٛ2ؾw9a[ҁ&$Еeχψ ΋ΈH͇ͧͅ=F0.B$ 3FU?͜p;,TΠ]ϧ,К5уg9Ӆ1Ԋԣ֔&פ>lٙ#ۄ _. X_dn(5=m 0aO[5* zW?0 ?  PP?KBB}`0 !""#R$%%&''x()f)X**>+(,,--..//!001`11/22y33z4S55678:j;<=e?@A^CDEFH+IIJKiLLMMNNNkNFN/NMFMLNLKJIHG0FDCBU@>Ir0)hIB<Go e / Z K`o6v\j%gjh7&k%M$G S&jE{dE6bQdt)ݵA|P\ّD/٥؂Gחi_ ֱ֗քR~>?-PkRSKk֎֯%Sקר6>ة M'ڳHۙT܏ynR1Sb|@zv[ZzNO Tf\I$a"}a # fWFQ5E Q_sc*9 z C!!!="")#)###$x$$$"%X%%%%&(&s&F&u&&&&&&&&&&&&&|&e&2&%%%k%M%,%$$ $$##""!!T! g  SV-},d?80q ]  */?K^|}%.7m`f%'J9OW.ݬܜ%eڢw)׮Mcԡ- ҧPѿlϒ2Ͼ΋̓A̘W!ˬ˼qW,ʣʶH_H˞2̰͉ͮ΀Ύ\nπО%ѬKҔ*>@՝nػ] ۮۈGݿ/oRpXJ#humQnce{Bux,yRgq owIK =!"##$%:&'(.)**+,=--./L0012"334&56n6677899Q:q:<;;<< ===>!?@@A;CmDEkG!IJUL]NPQwS2UVXYZ \F].^1__`a[aaaaa?a3a_`_^]\y[YrXVTRPNLJ\GD B\?h<9631-+C)&$"6!P xIfx/ Y dF nL:"QQxu"IXvݚ>ۍA٠H1֐ՅӀ ӍEҤ>[нHq ͿF/̫̞mo1 J# 6/>ni̹̊SIͭm7ϰPрHҸQӬB=ntسOڎ1qTބ;/TXIMgX}qP1+KeG t{> 7 \  i[WYG !!"d#$$%=&&'Q((w)D**h++q,--#..Y//D00011w22o3345 6 7/8,9:;<>?DABCTEFGHJKLLMNNlOP"P@PRP=PVPOhONNMLWLKIH}GEDB,Aq?|=;975v3-1.,*(&f$o" L<$6<>|7aJ A NLj+j}nq{ nTymgUޔތUX۴Aړ.ڵي!؂y ׎׉YDH#  !NDxב׆ssحxٙ[cW&b]޳Mߠ1} kx|&s"SIqE%i> |UfaJ1mZ=( N ]  z |d`+oGRnngHK/)d(}k.YW=&FXlP*D  m ( m g ZTNMy 6k];&W{vbq|:u&[G'}H߰ ss!ܘ:z%sMټla\z;֤jpJՎծեyՒ]՜հKՑՑ7Rּ֙'Tׄ@؍W`Jl(ۣdܳ4ݴf__Rl!9oy&9(S4fm|?g% dY`bS _ T A NbtYOy6mSF{$v+ !}!!/""#'###$|$$$A%]%%%& &W&s&&&&&&'&','&'&&&&&{&W&]&%%%[%'%$$l$$##%#"h"!`!"! !qm2 is LWA.S U 7UPXhg$ }?.e &'D} ܂ܠGڍO؀2ֿ0ՀCҌ[cϙ8ϸΒΛqͫ̑ˊ#ʾʶʃgf`"*I JJ8ʠʉʇ]P˘*mI}μ&ϕ НЊuKԷ4Շ׫lٙ['۩S޶DP!x(L}u;[;F/ P!J j_H n z u e X! "Q#%$$%&'(|) *.+ ,,-Z./0011'223%445+66H77o8899:;;;$< =r==N> ??`@JAoBCDF7HIKTMAOQRTVWYZ&\i]^_a`raaNbccKcsccbbaa`I_9^8][Z]XVTREPMvKHXFC@=>;$8L5E22/,*k'<%#S!-:ZS1 9 4 N yDLK =Tt3n}y4ߌ!_nڝ}ذ!ׂh 2ӵ_TmS'?tj̋?Yˬ˺Xb~̸ D͋ͻ vβ_ϓ*mЫ'њ)xӁ}է֤h׏@do s5"~0 mQ4m&GA5%(irUPCF= o>tf,]b9f P !"##$J%%&&V'Z((n)<**l++j,'--..+//K00)1112>3l3O4556789;;<=Y?AWBC#EFHIMJkKdLIMNNOPP QQIQMQNQQPPO ; z&'.)>NGGl,#- @wޥ2c:@ٙ\כՈ% ӊmќ Ю+ϻWν̅͘ ˢPʟʂpɺɅcɨɔDyɑkɀɱɨEʕʴgK̦O͹uβ΀@Ш5Hv{vճՐ;ץט.ٝ@ܣV }G&TcWW=??@(1VFAWiho  726<$ !!##$%&'(C)#*++,-K.&//0l1223>445B66788r99|::X;;=<<==>>x?&@@BCMDEGGHJaL(N*PQS#UVXY1[\]^``a[bb4cmccccPcb@ba`_^]][kZXVU$SPNK|IF1DMA>~;852/6-*(%w#! t1cmd/2 f f<m+A|qVnxkj+tj%Qݔ_ڻFبM֤0ՠӋ:IЗϳ@ϿΆ͏ ͽe7˥dkJ!9:bYˊ-̘̊!h]δ=ύbcѺ2A_fՔ=tٿkڹې*[.ADeqBZSH Nkj(N<    };dFU2, !,""#~$D%&&'6(()7**++,X--h..//`01a11\22S3%4p4S5L66+89[:;<>?TACaDE GHIJDL+M?N&OOP QQQCRRnRtRKRQQ-QbPONMLKuJIGEZDB@><:{8j6/41/^-+(&$" f=l 8;pe   # d }Pmi ),tc$wI90v*m+@I{(~߉ލޡݽ]ۏi,]3آ؅0ش׾לfN֡ֈ{֜Jp~JsAK~{փ֫!ךׇת"_٣پ3ڲ4E۱?z5s0ޏX_J^gbk -YbdRH9QUURMx Z.R  ; j x %< 7&X.`Ht ^{l\40|pts<nC/)8v~HtC26-G_uEh ' 'r6^3XIH\g~wmIWoKUX߸ރ޿/zuۓDًبׂ֧fֱj+$ԞԌS[T6 #,#VUxԀԞԛԷ41|:֧urn"Psi٘٣ڿۭ&܌ܑlhߗZv!FZOCMWGi/]t/z!>KA+s_,s . #x rL)Vy~k vI S!!%"p""#|##,$x$$$>%m%%& &z&r&&&&&1'/'1'n'K'F'm'R'o':'&'C''&&&&&8&%%%}%$%$$$$#y##"Z"!!!!  K<EE$LXl{  g eS2^]|wr 36df|w>>q:~v ~F`ڦ'JشJֹ!i)X2ҢsџбYS͡ͻ̏1yU˂ʛʅɏm\p5 & 8;+ZɜɈ" uʿ7˟˹̛éͨWGЇъӊKz*ּ֌؋89V޿zPFrjT.C2 DGF'7,2~Sz   ;N:VYp !"B#s$C%=&=''()*+^,-../z0!1"22L3J44^5W66c7 8q8G99P:: ;;N>??y@ZA;B}CDFGIJ7L3NO"QRtTULWXYZ[\]{^^)____>`_z_@_^]\K\[YXVCUSQOMsK)IF0DA?M z YBF)rW? }A !}"V#$$%b&)''(A))* ++L,,-..4//.00)11B2v21338445T6]7*8=9:;=>?:ABDDEFGH5J KLLzM@NN!OOOOOOmOO~NMMLKJIHNGEjDBAx?=x;97853Z1.- +(&$" ! kJ( QOF)^Z W  "whp,#Susd0o$^B|Qn)=Ikވ uIݏC ܓjuRDژٝ]ؓؑ[#׿ײץs׀pS׀Z~tuױרCwVArښڢ%d۫hܮ݅Mޯ1hi~P7cOq3 l6bX^$]$MNhTc5>z B m u rvklJxBcQl&z :#gtzdlAT#CZ^V't-!Tn- 5 u 3  9W 6VEQ=G%ZDN6g)6".%$߂,ފݹ2_ ۏف _ r ֛NXշP[ ՔԞptԂԕfԍԇfԷԺ& yՄտY֌֢Kן6؏ؽ8ٱ^ۂܞZ/g߮aR#n$]pU2*</}9 T$rtRw-]n 9 2 e J|"xdI_s%zX` !m!!2"u""6#Y###4$x$$$3%D%v%%%&&#&+&J&N&m&k&~&&S&l&z&9&$&=&%%%%%%%$$T$$#y#k#""Q"!!]! T 8 Bf?:bZ$]6\x ! ` { :Ei(1Ops @-7mX.4+`~9k߈݂ܱfڒa؟aբMDLѢEMΕά͐̃ ̣ˌ=ʷ,>ɨɩ>ɖh6Ƀ:tɣ~ɦɽ?)wʩ c ?z-gͲ=Ξ"ϙbqұ*Oe֦L+ٷُ9v]E߳BP2Ry9+g3c+WIEQp7, N / I | Fs|n !"{#$a%y&!'!(;))*m+w,H--/y/Y0!112334&55q6 77P88699?::?;; <<>_??@ABC E3F:GHIKLMNPPQSS(TTJUUUVV VUU"UTSSBR>QONML2JH"GDKCFA?=:k8W6,41/-+ *>(&E% $"! btjgCgQ5G*  z c)''t{JmhF^S0OHM_^yUh߹3ނݣYېjٗ=؛O3TiҲ3јY иτ!-Γ΄81+͖ͭͿ9j΄γFVϊ*Ѝ zKҊ,}ӾӒ<]{ؐ ۿNny3Gv$if3G{J.b_9`D=@248 {qQ. n-5V E! ""#E$-%%&n''())*K++,--U..5//D00=11)223q33d44{56678?9r:;O<=>?AABDDERFFGGcHHHHHHH4HGZGFEFE8D$CB@?%><4;9@864-30O/-+)t(&$#E"!C o`sy  / N n nw S[Y-LX ,"UHkG%߅LbWweCܿۮە0xڟjN7F=$1M(Qrڟڲڪ Rd۷p{\h!ި8E߿)>URLu,#VTrt*r fY1) fK( f b   XTOaC5h\-|'|W^ ABv :Jdy0!wMdG Y0,GWVp2},Dxd n z g & ^"hbha*RW Ft(?;:AXXkRV5 +gߪ|ޘq#b@bګoڍk*ٿآ:װU7ר}|նի&ֈ֓֊+fk بغ؁ٍwکQۦ7ܦY?Pߨ42H8'Ah%g d]v%yF&p4u &q/ ! N g#N1x,Q}4Tif4 c3c : \!!! "\""" ##M####$#+$$$a$'$4$$T$,$_$*$# $####X#'##""I" "!!U! d 1!j(:h?>y,|P7I c v  1 7ape(sHu[+rz2M`&?| r>ߑݕܩ4j>x&KG֗TՑ5ԁџ3юr~@Ό,͜J̍G> ˳ˣF_S3= -VCdˎˠJt̔4]1ѭѭұVԗ]Նדׄ٩T6yKݦ޶S(f_(KHI??D #,.,,-H5JO>sv[ o ~ExI g!!"#$%l&Z'$(()*+,,-.6//05112033`4 556r677788299,:o::+;7;;,>>??@=ABB*CCvDDEEFFoFFFfFoFFEIED D4CBA@?>I=<:i9 8695321/.-+*)('&%$$"@"|!q ~> :<%L"  B %EyW4c.]ROޮ)eDXړ@@ع=~ S(ZDԭӉ:ҐҟҔ,{,R*4I0^dҞbPӄYԧr y׆bثE/n۵'ݜhޓC<`}] u>H7Q(WT.O o > XC-ro/7D9YA !u"##$.%%&I''(())*+V+,,,- ../}//F001|1 2 2|22 333T44 5566h77}88`9A:::;)<=<<<<1==<<<'<;:;:2::987654321J0B/-,+y*S)(1'&-%2$>#"!  /t^Y+0 i *a  _  =bz/~:2n XYgs: f_ j7D]D ߒh<އނkKADJ >H9BޅQޅި3hr߉-%YE~ct&]<6pOt~bE-sc.U G2=U2_17"R\6 F v _PMsT ;\;sNV>"* e]QCCJ3,a 1lS+G{#f [ q Y ^ P Nb\;"o3C20|5"zi/cU],%q/~8+,NW)[ߜ>^>xMܛSܶےcڻLKـmpF  2εΈId&>L4~θ=Sϟ+_BcZ6ԡ+լ5ֺYn٘_ڽڀU܈5޴X2sMGiX* yuoqYdrc ] ^ 6KZLD8qa- !"P#@$$%&X'(()Q**+,--R. //00I11[22A3334y44j55*6}66 7O777 8>8l88889W9@9^99999:9999:999N93988J87a76t65B543T321+1w0//R.z-,!,9+*))|('&l&%$#2#Z"!  9$-=d%OMh m { !^:_.[|`7PtldA Re'u^(,ިkF܎1۶^$ڐ"^2؟vA֌o* Ւղ{ՏձՃ՞լ F]֡&v׾ggvٕ6r`Pܗ`ݧ#ޱ:;lRM`%V^7m- ud;]FI 6 ^E*CbZQG !!R" ##r$%%o&&P'&(())**)++6,,,R--).c..N////r0001U1f1112F2j2l2222'343R3?3[3q3I33?33&32v2K21_1100//..:-,+I+*)~)('O'&%'%$#K#"!)!t n1X}!#w}l$l 0 z S~g#D|eA#q&jn7l[Nce%PZNGb)b@uzVP@>|KW&NJs"{ N[`F }`-J\c+=DUq]q h x  w  Pc|T$M#XcRbW^+9B[T8d_slurhbc;&~6&R,Q@'qL:Z|)y4  { " # ?44p2man|~l2w+6"iU_p)EBdv(Us<@qhRj n%\ .ߤޘq޹ݎݒ_܈v܊ܓD[LLKܗakܓܓܴ܏>ݚݏݶ!vށIߨdhe%lu1#t(^tg n* hi.Ev:m'8yb @ o l U )T uROV 0_)^{_y}ns3:0t%Z9S --yR_ V=Ij # 9  X N ''V<P3Up&&L''+((&)))M**+\+++,Y,,,--{--..J.U...............3.E.A.--z--,,0,+++*\*)C))|('' 'n&&k%$d$##""j! H q7v--=th0x ; ^ Dwy7<P@akv+~ rh"t}+] T4US_n{iI1B4I51!:a^~sZAy ;c HHR](M zoS"/!*>M;U^h 0I1yH8YJ   t ! B ] :L=t#r0e(_8}>)9":zy72|h9f{RgH; K \ 8 %  X  iL XuD.^=/pz3KIo j(f<|9j[393LI_L8fSFnxt7 wE!mFs\/?,D>"A/1tpU i#0!bW9!|J][' }mq e0]Fdu}a&7i)#}[  i  J B+!Jv$W5%$9u1Eh_1wk$lDiEe5j+hn* b 7 U  ZX p1^Hl,;3IB+W U7a<qRy 7'LS)sXPwކvݤ/ܩ>n.m لP׎_ף_AդՊE3ԻԖԐg : ,cSԑԝuՄչ0֣ i%؊6<ڌJۦێݥ7ޟcw>}wscJTdY`L}~><9^TV3 p X> {Fn \G ]@ !!"# $$6%%&''n((~)#**++,,,--2../V//"0B000 1111122T2z2_22222222E2o2C2111|1K100020//3/..%.-?-,,+q+ +*)L))b('o'& &%$C$##r"!!z \8iA>f'\w " k  # RP5b*dWK7\ Y#!Y'Y{R&Dh)߄'ߨi8޻݂[x:NۻGe^#Aڽ>~N۬ۊH5܌aݲDޗ 2߾BGB/d"@c%X.Ur0=y2sEK8(ila S >  R7]Fn9;c$ !!""d##v$$w%%A&&&'(O(()[))*!*h***E+++++,A,*,d,,U,,,,,,,Y,:,K,,+++@+4++**E*))=)((('S'&&&%%$.$#(#""! ] 6AVfu6(:? 5h y f ` 8unk ]"bH]( < n , t h  nH%>]wYn{Q{BNQNGKNG3bEy))NIbQK>.bI n4"W, |Di_OkavY%Lx]S6ahRw{K9S&S16?ryM.304Jx(OLAwnJ>^DJ9~8emON4bhjP_D~ s  d = O  [|EIfK?hM /<MhAFRDFb <3 ,  ) 7 O " 7)Lp=A   dOAz /M?\_OTk:LH,@$=`0^gM>L@8;wޤsZ݌PܧCu_ي2ٲ^Iיׅ;-ֱ֮UQ4ձ'kQֳ֤־C+ׂ׀r[ل8ڡU6ܰFݬ4ߴU_afd&B^xSsZ;`u+!pgE;w 9  / uw^ /C-l-"V !(""#$$%%{&7'j'7((.))F**:+++t,,.---.../\/X////E0K00000000000}0t0w0V0/0/j/k/...'.---,n,++D+*G*))(W('m'&k&%)%$$#"X"!!j  K_?C8f3d?0$ \ 9q2_G0H/ bJNT8SUgA/!mc4tf]yzޡ4 ިݭݠKa9)) )M7yݣݦݾ2އz-1}qg dZo!` 6g9i@>8b=Dm!#fs(j<cSci n L x `F,pF V_>\A=$Gg !Q!!""G#$K$$%%a%%X&&&I'''0((((l))k))**O*X*m**********~*g*D***)))U) )((=( ('O'&&i&%%%$e$#e##U"!! [ QFec-Z1Wkje n p  w>YKYS/1}!R($AS%fS/4P:"V@Nh/X=Zelq#H"4dyP8R &;kTU6P$E]).A-!6LcI d  * M g"cxam 2c1 b`<=`k(c!;4  ( % &   J z V k<al5\P r9q'%;SANP_P4"r|%Y/2kb Q^N_6(ST)< w+3 jieGIq_9i/i " o=*Uc}+Hcfi},_'Q8 8w},cUq; m5rd+G#pQF'n4!:pX/wT= )  7 3 C B})!Qc!nWn*.B=9&P:-? C /BIB M f19 k    <  f  B  + D>2~&> lb 7$h[oV}%#x-e3~&wpqA=6E'!$WQߒxy^?"ܨG ۥAڸـ\ؐJY}[ן2':' k )!"y"!##k$$s%P&&''F((f))**+i++e,f,,W-^--.?.b...=//Y//l////////l///./-/..z.k.E.----,~,,+t++*.*))(o(''&n&%Z%$9$#1#"!I!  gG=-Q}:jXz$B % k  A1 ?k I+qC29S~>&uOXN6-DCPߌ= nY]ݺ .=B}޷eDߛLK\H<;_xIv j`Q]O'wM6@{v>L >  :)TWbZm^Ett'(5 6!! """##$$%u%%&y&&'E''''.(x(((((8)V)I))Y)h)))))^))f))%)(((Z(-(''|'0'&&]&%%7%$$$#\#"h"!x!! tWj2y PF~B+tKim\L 8 1 O FbxK O0&]OE@ 1r1Ol&o9aNL{uJCL8 # 2Zc BU+ h6?RP VNe1`!xVQxzc>5 LofZ:  a 8 d 4 y . q Y:J=bR> .1a)P'EH6a S14%>t4[V w s K2xGyd c, W ^0^1wQd8Ut@L&d7O0?dF"XZ5v3Qs>IH9tsL;fP\}jeޅݬv܀Sz4ڌg ف6UآؒwHם׮k׼ׁvײד׀׳׳Fle9j9ڏ@ۢVܴJݧ݋l] m0Z B\ j(,']N TRX xx j 1  8GsF&qNR7A !!"-##}$$%P&&''?((V))M***\++;,L,,-D---.X..... /E/"/ /c/l//^/./ /,/....u.. .-u-'-,},/,++++*V* *)((('L'&"&%$$$a#"8"!.!d Y .v Xky R ] * 0 Vg fVs*Q!x>`ayGlsu'h3Qv0^PbXhDF$M &ߑ߸yQNC 6`Do߁ߥz }|62sXa)TPI(cb8g, nap.pG^0 C : s8{.} #P.7$ !~!!V""&###A$$$&%i%%&c&&&'G'q'\''''(.(0(/(F(V(c(S(A(P((&(''''T'4' '&&Q&+&%j%0%$$$$###"."!U!!r +u{9KWPb z/l, 6 r > u>/Eb710?_erx/|uJ>g&P/_299vS5A# JZM?ao?o9\U{ 8=W YD4%hUgBz] _,> eY Z  C : = m < . M9.WB3Ele]A0b=X-N$ 4    C  x "  t|TYV y `!,-Hn,hEUGFeh8XK!}F)RK6$ w|uL`)Nq|g G i{f5A&}Jw@%@- !;Q:HT /h~+FHeGj za`\z8kQ+OvLj0uDwloW\9aQWB: Z   e ] S " q * w %,P*l7Lhr,eL: g \  \ m  O  @ v  ~diMs,m4EKqKQ hW$W_U}d[p6(M@T)oj< 2z *T Mޙ/s,ܼ{ ڈ gGؐ؍OךצׄfoYvץט׆ם%ZTؤؿ`n*7 f:xvݳwNIbpPt&u3v&>6A`?c%r  b Y + F  Zs6_VPw !=""#/$$1%%&'e'F(x(())^*+++,A,,,S-z---..X.r....,/.?/T/ /S///&/ /....=..--d--,y,D,+}+**X*)c)(n(''&&&\%%@$#B#""h! , .5V/| E>'A   ?p!|Dh{6Bbo-X x5,|>4ߢ߯ߛ]i߃ߖ1q߫jߋ߳:U4#$UT,T,VjCB-Z !""Z_%T,O:yg !!!O"")#q###q$ %$%%%8&[&P&&'&&`''L't'p'm'u''#'l'r' 'R''&&&&}&#&&%U%9%$|$|$##m#"":"!4! y 1#y3Ei=n5\ T t  s i w X ]N .9pZF -}t[ I[d.sY LBCzCAL.?-7*5;@ss7EySM!quX>295:6jQO Ib"% XdB   5 ' U / N doKe&Vuu0#jsE/}? 32z  B -  ] % g : ` N |*}y\hLw5B/T+_SwaJ h'>]QLb9u5  d , g X y   1 { )$V~S!.FtswvPU8!f"  " O  \ - ^ Y a U I F#p-N IY7~K"?fq$jbBe!|' T88[''oGZy6LmEWݽ3t5ܘO۩v.ڥٓ\ءKׇדhU0:*' GMIvףל DPٞ:O l9d_Xq*C/}R `%pt ~?*wzdm  z A C 3 VEM?-- P!!"F##s$1%%c&&k''h((s)*l**[++,S,,'-X--. .h.../7/0/W/u/j/j/k////b/@/$/ /..g.n. .--2-,,?,,++*Z*)q)9)O(('&&&M%$E$##e" "X! E b9Qx#gQcz G v & ec!U[i4n.J:hke;LARde.WTWy~V@.[,a+PIu(O`$Wm9x&x:USq{=?[G2f\F5 |>sGl=}x   @ + wbL nhm%=uJ{ !!"4"""A###T$$$%"%{%%%%&<&=&b&Q&L&&m&&&f&&&_&Z&q& &"&%%%O%%$$w$ $#}##(#u"&"!`!'! yx_= @mM'U+j w ( td%Cif3u;\b0ZhSXb0]Gj%w5~P@PTK5RR>[oPw/\h ~<+>f0l)m 7[2r:E&gFq9U/=}RrGr8 g  P 9 b  & r u r  DQ^f ao/k=  y  { U + Z W z  !l>}-]  oJD{0 >c-eg~f(|Db Ko}X'VOF4>.  B$ P1?ObRNmRYd~\zMqXHe43/8qvW75}`@?A=e,PoqQe~QjP C" ( -T3biX|u6GFH \9 P h 9 t Z - N 2  e P + }M-]&hl4>z2wWW>Y1a^aVZuf*= nfnBf  >K=2jLnj^bJ3aV6SH lJ!m[) H$r/h| jUO-|qxEc1mLY)9{&GY 'ߥAPa'ܧ@ڢ&٪0h@רץ5ׯ֢_hk.IMJ;I{U֭֟֠Eפ[ؠޙ;]!w*PmA+"X+|I[ Q3c` VlCr^O^0 ^!T""#5$$%&&5'(Q(())c**K+++,,,8----.j..//>//|////0/////////&/ /..`..-Z-&-,P,',+>+*W*))(a((C'&A&%*%$$j#""y! k R*3O|<~mz9_ g J o <:N9{aEtNARbNV93F"?#[O o$7h=A q?I1UVh5bO>$AL.]mr3w5Kiy_]{uN52jl<W+?+0E;dU Q!5q@/7~}U((  <&:o}?EY6>cZ3C}UF)j%i*Do!ora:ECF/92Ec j f @  i  U n Q5@d B]$DbLV5P;)/rZI$`  h <  ' 7 5 8 - V ' w?Q$C2)z, `nlwF;hhTOwDI6>#zPCK^&b~}@>&n#o ߿ދސ)0yڰHFضU׊Rָ֩VM5ֳ NA֌։ ׀Koظ=ٛ4ڤCۃu܅R y.$'kIh${t$ge4(hNy#0ms 5 7   swS2R: f3 } ?!!"A#$$]%%l&''k'i((3))**0++,b,,/-n---U...,/;/`//////////////M/I//..g.".--D-,,,++** *) )(L('E'&%%$3$##^"!(!  [["i`lG^v 3 S % L 'j Nm4f_H34{?Rb X5JQLU(qNo k5;Y8h'2y4eOZt|'Va.ihb&@PNGLQ5l_ ^.\ c A w xh F ([@ Rha9u w!!8"""#L#J###$v$$$$$$%<%,%7%a%H%A%L%Y%1%%$$$$$i$*$($##X# ##"?"."!>!-!v 5 u [10NFHKSn$jsX =  S  xNd~)4-@uGM4; {u1lT<*B5*yVO?"/(?#)"560y-qQQr$9c:`+N6ZbPb t (["a") bU:D2  g  F 2 T D [ 8 h  $<#snLx~zhcPF  T   g G < ) o g  e VP.3m"?}2OZCevEUyd ofyM]liq(w;90&zconLgWL+j\[P"PMG:WE*D:@^-3D0S, <*2`B=`_,xk*bDjV;O!Cyw6{upHnvxBW"y"(l~ &~E!pBdZD;4dJt[)gflTz~Bd)I^C>z6|Ea8 m  g > s K w  _ ? qjFI~~ N"2rqv7\xD]%eD/ { [ P x  - g  % > k :oYI~,z;y,Z,[ca3k*q9}/K{k? s MC.VYx@ObfP_ܦp ڳEؾy*וg)ַ֊֊O3 ջհ ;lֲ֙L_ץF؍/ٕRڛ?۟ۢqކ߾9m:V&(]qe&G;j}Ye,&' Z q p (1Zm=ty< o!""#Z$$c%X&&J'(())***w++D,,-_--.4....K/x/{////// 00 00/0/r//-/..z.h..--,,n,++$+*@*)n)(J('K'&j&%$$$C#""L!  aQ, PbF  i K  N#ZMSkU4lQq+_ a)?_lKx=|2ux=LEu]dn;e` a=%Z;[QY.k:Y 0/'&T/"e3s7e= s l  Wq .#`!f !J!!""2""".#D####D$/$Y$$s$$$$$$ %$%$$$$$$j$G$'$##|#3##"|"X"!!n! ? Sk$%x]H."`n   M 5 "wM<5 q,}|pG!0w*b`a=pU?+ hmsi5M@ IeS5# :BM.k-?8/q4a6+Wov\w_ h u  N i M 0<'1(&.='2 | v 6 >  c  , W  o } " \ ;  TKr9s=Cgi%G_[3r44mkKL<%j,6dAG:8.7}}g djP ;*!\N)V+"3!Uo TT{"x9+87/}Y.)EkXqdcXR}-07y"J]z=kN]#P(!apd?ET!" dTz'sRHYqN ;M}O ) { / n  < ` s CGrZf|\OP s3Q ]?Aph ^ 3 7 ) y c    b B ! zD4^0.D 0Uz5U1P^t~hW5@/hPj&;r L߾ZޱAYܒ ۶]٨SؗL׭כ6ֱH+ջնկ՟}ՏՑՊsչժbքּ*p׾ .1<٪ڊw۷1:݀ޤ[8Ei"}>o]fG7 a^:D"# d )GBU>PoHL !h""#x$$%4&&''( ))*u*++++,,,--.M....G/[/////0/0 00//////(/...'.--}-,,Z,+r++v*7*);)(T('<'&&%%/$##|"!+! -+zI,9g  l A x  OV9'< ;5U?5mR6G _Ntbu=\#W92I;]Jz' _6nV5|+)H^XA7sh0z}xfF?&M`>}  4Gt>v\~P%uc4 R *!?!!"L"z""#B#y####+$A$H$k$$|$$$$$$$$$$f$w$X$###{#}#F#"""!""!W! \ dhA8BT)/2$qv& n > ?}aPkYBv:'yY49bVIZbG]eH' -&Qic!cg"`UiixCQ3FV321*?0J7lU y;x& M z *  P # z 4 4  :(D  s b 5 '  ` ) # S 2  U . 6 P q!U <w`iF=Txa,a p.,OFH+=W !guf?J[8 ,0T@y3!>ib#:S^=hzTj[;jYT5 ?{` 9DYuLwx2n,$&zzXcLpc|*@9kDX&<$.=BK0/LL;MK# D $mT;j2#'-~-5#eO auS? |5Uh I  E b \ /  D 5Oih#.@xb#LNy&dSpt n * 9 x :  5 ) C 9H;F( (h5N(CR6B)e ?Ol:j:$gM}nI ud#S.6e`ܠ ۺCڠؓL gM֕fP, ՋՄ՟rղ՝DHֻG׃׹&؊ض_7ڀڔ)!,݇MA1RP1]6ZC Xt9sdf>:;t ] _ T : d\@ gDm> h!N""h#X$${%9&&_''c())***++B,, -r---S.y../#/N/////0/////////R/...U.N.--d-,,J,++***))([(''&7&%'%$$C#"!p!  S+F[,h"b z . N  S7p1!7bnyu*<|O"7SX>Xr [!'^wNnNr4vwSrvq~= 2c3pWt YjQKrWcQVtss'a@'ZC &  L ) 4f Nnu>:n !q!!"B""""j###$ $O${$$$$$$$$$%$$ %$$$$j$<$($##o#C#D#""\"!!C!! h c[]8K?.y-1|7} _ q P ;zk'+ O8-Ew&y\s+%Ak\nK%sX#|l9rn{3yn>J;fTrZrN%0z1wWhl5>56<2E3K 2mY ? w  L }  , H  6 u l  (  1 g O W ) $ x P 5  V D _   E d . WI@/g.SW6&1:*rV7qD-qF4`,=P($oY"d-?kJaP@MS0C $9<2lV@6 n.;,~T9wb#jphu9C] q,7 fWT.?~bnqwLrScap,bP4mK/G\!>IxV&HN$lPf'|Z r0^34RU8 B R $  < j 9 "q|1j|<yUpQa'(W@  ; % c L K { | aT rTad.k0k!/d1?ZIL5~CsS{Kv+sd~;8_ug#?߭޷ ݷuܷjڲ/ڽّ؋"י56֓C0"ջՑՑյՀ՜Պ|ւֺ0nד/عD٧dR۞8܏ݦݢFYtR(hevBNE_(/!eBkP[   a XZ+ I$DB !n""#?$$%L&&z''()v) ** +_++P,,,---W... /"///////0///////w/4//...?.--Z--,N,,++*d*))(l( (['&q&%"%$$+#""c! / 6p4m983oL | \ S)" cS9.LdL::7S* #HGS 0`lt`k6y5 ;oN5m8]'k6jn?AWo%+kZx27X&9a+=Y' F  s   JP]w=Mj"] B!!!P""#.#9###$z$Y$$$$%6%#%h%c%>%%%3%|%q%$%.%2%$$$b$$D$###E#3#"s">"!v!! i  DH~D%/)k=H   m [  r2Y\{_|ofE<=P9Y@o'#Y!M|}rDE  ,>5Zy(aB>zUo%)GhN~*ur7W4e7d+54c6oA'w"b;| b  e | 9 W ; j 5 Z 5BYmwSPf  < t , _  + Q } / l N  L ) u.Ttg-U)#tD>g&bb[DbkSkzE JHQ,xk_=u|Wm[{{WF~/#,ZO*l>uW]iZj|8uU pfDyXA_]iOzb)T=RI`Fep28swty )]75F~UcF:f~*<&[FB PJN@$1sbOnLJ  59L] Qzj>h8=:Iyjq+20,`'sL` K  , - 6_"t 7(~UP @!r!!A"L""@#Z###E$f$l$$$$5%l%%%%%%%%%%%%%%%%:%&%%%$$$4$##;###Z"F"!f!4! B  v33MpG$).>Bo+  j M5~Q-jp w20UzCt>[4T-0<^ FjFGklo\tfN{lg~SM55^S|e g1dK<3)}}5!z={mDg OItC z  C A  `   t } L$Av{Yzf&c  }  / y  f ' m 4 N r F r u]/Js f<4WEQn i0;264f nZ%jTGuh`>G691846),LM8fza,6t0m oih=$/tN*1{c0u@d{I r  Z ) X   3 9T &bi1]B[fXHaN?4I%; XlGc^  _ I D +  z & g 6 3y-C ongt o/hs4T (OhXZiDb[7r/IIz|1, Kx|ݰݣjoۚqoE؆sؼ״]>n֩I2a:,I7/b֌_0kפ׼R؇!:Din8ܨݦޤ4߱5 x-\QFc#SJ`0ki<9GbZsW-# m jE#]CkM&_Q r!""l#)$$<%-&&''I((8))X**+++H,,-b---3.....R/B/g/////////w/g/t/M//..c.Y.:.--d-,,>,++++*N*)Z)(s('T'&0&%M%$$h#""y!!  qe/g4~h$^ - X >  xJh*1Iqsk)v>m3N"vNfWan q(QD+PSC GT= L?~Nj,[X EGGgG%b&D'aX~W?[ ;N) e P $ &*_.u$S+|`z*ax$^ !!"c""#{##$Q$$$%j%\%%%%V&)&p&&X&&&&&l&&w&M&&0& &;&%%%]%"%$$]$##~#9##"$"!o!! 4 x-qU9uxyg* = m 5U;pp)I>?zAT{Yy 5l?enEY+lhipx|AJU7%~ dNZJ$Sj"s*!9c 6m 2(@Pc{B` C u  >  " r ,I]& b(|`~~`d=/n+ B S  ]  I -  W C Sq4H](u #9ae3[Yz!$Z7"iek9r_> sO"%v #A4PjORtU}xLldX?U+aM; zJ# }wX!vI>JvWT8 p>[5*#,<^F3=*t 2Q(I 9EA2:M:>Y0Y'TH6>gok= k M _ z * ' E J g ,VC V y~swuO4K^VU g u ^ p .  e # C ^  WAoD w(>_xJq6s 3YK]{&AwE""i4gA>U"-|rߕ!c܋۴vVb+~g#nJu׳ְִ֖֔֬֞2n]פJ_ص =ٔ/mNے!ܓ݂gzy+HP7Sg/pfRO+[IV 9  lO2Vp$lG N!""s##$v%%n&0'' (()z)J*y**++2,,, -l---...../*/ 0T,Z:-$ aK}6~iG>I :0WUDXuKm4( `@@:kTM) e>bsT]#0WVI %2=g_r&DXx@kQv( M d M  ) O 9;r 2NgMwcCS l2+ = 4  A *  E } p $ y ?  g 0#suX \TgtQ,nTowv jlqF *R?1_V)*ߩ6޶dfI۷N}O؟؄/ן׏P=f=NNxוט-hp ٓڑ1b`{ݙ݆=u Jfw)f\71nB:fJ9 x2C w hX{`U  nTOC p!I""Y#B$$V%%{&&'7(y()))q**N+++n,,,M----W.o....//7/7/L/2/G/j/)/F//./...i..--H->-,W,~,++@+*h*)) )(('8'&%%%R$#Y#""! b SIIoe/X[ '  NY?z0M%qr<:'&&w&&%%%$|$r$#s#0#"%"!V! Z\qCU{\ Qjh-L  z  c #b2R bnvw1K<qs(k_9 `.#j8F " )1/W89r$9\FGN qjLjCZm Z?Lg%}B@q*c5~q3 _ 8 ( v  c 0<>E@~"6Tfp|8FI zt^(\<zoA p c  4 4 V , `B_3a yU@~Qd`.B5p6dBCCqkZ&&\''I(( ))'*^**7+i+,,i,,,9----4.G.E.`..............G.;..--s-_--,,H,++A+**"*)k)(D((r'&]&%]%$R$#"#"!b! C vyW'V4- xQN D ~OZ;fyktI-0r;,%UI:JI8~;1!b}ߙ.ޖzވwL{bvh|ޣzPro%f^lw:S(kk& *c(5u=j<;4  L g3M"Q?c?gi 9!!D""-##$Z$$R%%%g&&&;'''(g(t((((/)i)c)v)))))))))y))d);))(((t(.(''L''&I&Q&%W%3%$i$$#A#","!W! a . ss:F3f<Z<<k Y W  i ^^2i^" jmm'Nl}%K rLQBN'Odd}|TgNb2EsiO_/;`8Fdg !MN}/m 8K~l0h!WI!]H   5 q  , lF=YbtE)IK_ZQJMK\B5,< h :RP39R x 0 e  * O @ v<i<H?0{;PG "1E_B,_EW-X \)O9%~d3{W,cnj11y1TjS']y" hYb k@2nbK0>K g{:OU%A7 2 .a?Dl)7FqJhHhB`pQL$c[%WaH\ ib{!C `_<[";ydthA   l t $ C h T  |ay/8=~@$X5qcDh*IxK? u F 8 0  [  @ . ~O]!pD~)|5$Zu%Hhd{FF(-tz8Xd0GEP/^ߑߦހݒ@ݸ܀k1ۂkSٮ٪ & ٮ؝آpE. !4i<=ؙؔD3ٔNڰڕ*q|Z7cZޝX#/pZ:U@+/HnzqZGTaVgr=lFy { U + laJ-~n(b;?O !!D""\##$%%&&J''=((M))*w**-+Q++I,,, -a-|--. .`......../.../...a..g.-.-_-p--,,H,++M+*L*7*)O)(q('u' '&%%%K$#C#"K"! L -4fN><jITY ] 8 ! 4 5>c.S Kh $p=?*?8^e3UAg.:y#T~ߨ߳~ށU&ݸ݌ݕݒp݆5rdthݰݻݡ0*e޾IqT*.`=%7R`oA3:w;yNX,)088|1 M H 1:5^g?fDm!Uu !!""c##!$$$y%%8&&1'[''(T(((9)Q))))6*C*l**************v*Y*!**)))<)((b( ('_'''S&%% %$$#`#!#"#"!! j8dQ{'_"z7bG = O I#A(m2%_ !nB5x%F9EwVo)q(@5a$C#F1 %kLd!I[Bss:O7P&8V`7xX yX( `-K" Y>4( xh_+wG m X r  { 5 ~ FoI8rn#Z|"WYyYkwIS_ wh6*Of^ _ 2 m > 3 I  e8sEV:s8+/=lD,:y XW!$ tMOP>|Va0plB5^l+i&(Xc-E\3% S0)kaztDK5,[mj)߱d|ݬs۫ڲڞ[ ڞٵpnVU"׵װ׮׸ױרפחט׾03kؑػ)gSڱںۉ"܆ 4Fb;u74Wf_1g qW!fU9W $y( x :  2 }G6i[PS |!""U##$%%+&n&''$(()))9***W+++A,, -,--- .+.=..../.J//F/p/v///?/X//I/&/....Y.>.--m-,-*-,],,+S++*B*)^) )(('&'&1&%9%$#j#"J"!/! IKfD:nk ] P o . 2 fg:d\/?U(P0a%)viI%  :o1;!9ߛeފW8޸ݽTjLBܥݿ$=ho[h[߲:h) E~.ir]d,cz8h_hT=sv h4e D ` K$ya-0V=Z:2 ^ !;""K##M$$%%%&&)'''f(((^)w))#*K*^***+Z+X+Z+++++++++++s+b+`+ +&+**|*3*$*))e)((O(('V'&&+&%M%$$#~##""! y ]E(\cr^mP+F X  %H' @BuV fIeGkp:S&=Ri d84 7`QVzofonl9u%[:q1oX11& eJx _u'rt+K2NjM,.nrj%0s\; k < k  { ;Y@8 +Q*vI`1[:~|qpjl4J G{"1XJW 4 P Q t a  l I!!q7y6HuD,8"s80])?X|+T&QKJbZSI-\W!@GmTRg(Xu(P61|`YE='N6*by Y'Y 3|)u#8-J Jn.4'`WUY_2]PL/xflcO]KMM* {rT!/ V  X  - R ot@m8@G!IVzBbb_s]F(>[ %Tu=DO Yw 9 5 . N -  8d'i^An_$MyLE\@ vMK.[~$#gcd! Q It*pu}ߣ1iA۴3ڵRzL;ٲ؅ؑ/׹נ׋hO./ @>׏|׊ת_؏ؙ_:ڕڰ!}&ܙݍ]1-=_Z{N[F0nAtrKor#Q+VV6 c S &>i I,uBo#i6 c!1""A##b$$%%&'''Y()=))/*o*#+9++',,,,/-----..W....$/I/Z/u/y/g/a/W/// /n/A/....v.;.--l-a--,t,,+@+ +*8*)I)((''<'v&+&%%k$7$p#"`"! x Cyc= OG[h   ;t#oX/W5H*Z+k'US PcOU2=Zp-oM߄3ޣo݅`x܁܏ܛvs܋܎܈ܫܯ Eݐ݌ 1nM;6BlsbdNi`;Yc zYMG}L;; A x p + 3+u#H<xl !""###p$$L%%1&&'a'''(((R)P))**%*v*****+R+'+B+y+k+C+c++ +9+&+*1+**** *))8):)((S(('O'&&&%_%$d$##"""!!g <,/mp*6zE_ h  B  JXoif9 Dm"PEp -6P b?4`3tzgdG$/nuU:Dc`J2 l7 ZH-jz=1+lB) `  # U K 7:OF)xB1fKP3I6 /wd.5]Vf g n R  | o L U < G "3XGt A)kOAL*wR;]+g n M ]hX7B DVS4l7?>X!\S;vz\6L:& 3(mZi$({igK|4E`K?CH)b;{|X5_ lLF:)GP)T"P*7@,,(tWM  [  p : 9M;-JCtiDT^v{YdI)gP\uLe 3}47 E  G w 6 w\EvaqF]B O[ZB;B&m)m`1A{G^Q~%;mn\ݝm#g.۔k ڱF>ڹ٥;rA?4 B5K٫h @iڳMۮ7ܫݖ&ާ`߻8fZ qCo< 2hQb7 K=(iU3. Q ' 1.Ftun`pR\" n!!""F##-$$-%%1&c&&Y''(K(()P))*W***3+G+++++),{,2,,,,,,,,,,,,,r,M,6,,+++7+9+**N*))e))(Y( ('3'&Q&%%$$$#2#"1"!&! xF6{`,?4:haW 8 c  @ d <SO2}/d]NaIs gdR{'OXpt_,r:pOGީޯޞީ ]pߍߴ"UVd2`{6SJPJR[Ai2z:)s|n+s%y0 Q}Ex4 n6 g w zDBF=mLy ,*D !h!"`"",#j##B$k$$(%^%%%.&|&&&' 'i''m''''(('1(.("(>(K((%(((''''v'x''&&h&b&,&%%>%$$$##""g"!M!!!K  ]:l}_NJ f&U ) D  D f-AF[+|Oy)py*Tq?8 D+a4IIbY\?8 &@MPRx~H4a-&l7a)6v_ I\ ]oi+Q+| {[n`3/o:4Q 1,c]Af x  {  ; ( q #^6@j3?u <i+2&U6!a76$a_4 `%<|M@hb  ~ E W w 9 { L p M  SM[JQ|@HiHy*~{bRMCo ^3 U%s64+?(_i Z8y2D"p]g/}Q6fW&QnN;G5"JLX/ wO;-85xzoqHB;s:U X 0 u ) j :BU*F6e!oAC Vq{$-Q7,FJ9>7\KC%GQKNA9`^` & j ' s . e & j  t`l:^v%F dW9BJ..=@p fn\v\gDzkk~$du,F2~>w3PߋL ޞtJ ݌ݙY69ܠܷܤܡܳܒܔܼܵ(OBݴݿ&.Yުk߀+Vdxg.c= /?kALjR:o7~b`a!T/YI`_n+ 5 6 kBi0R@ ^[uz}{a\ %!!!Q""#N###a$$$6%%%&&|&&&''+'h'i'''''''''''' (''''''C'(''&&@&&&%[%$$$##^#""!"!2! \ }2+98fJ> z/T ! 0  5  ?^pQLY=Di{,T2`?>iqHTZBEqAv-^*(}wPoe?pv} 'f >h(f9 3*`=8dOx%=`n )Qq?+%S8n%1 p E_'I/TVJ*2z_ KTlC @!T!!!!"%"J"j""""""#"#3#&#(#4#<##,#Y#(#"(#""""W""!!f!! T{3Kpi0S_da mo~Z> j O & veV=.qnN]BtP}5u/oFL h*I^"fd2Gxfk!&n|~:?Y0hPp`]Ho]`khE^`Y;!.!cR }069rO% N $ ^  ` 8  >  Y + l&q%lJB`K$MZb`]MRl#_Uu9} )]@i]5M h~K9w7U\<|I/; $"PQvRd\ 5lM))AwL\KC Hd 0*2^v VSl!,E_  6 $ [ ;FT$1!KS.m(qU`8r!P)6s  O ` w  !4!(!H!z!{!!!!!!!!!g!k!B!! F EG+^Qt#Cfe!&K<^]E O K G   ZP(zxx1G9".775cyK_=4CT!hL=x;}R|<@E ''U%mvz 0dyM\PF_Tfir5k+j=(xJ7932  ${ plscF ?  o  g 6uL!CFe_W7vAh [l"Io=Gx"Cs%NLl|g{u]=,D D #U^_Xs$G~TC b  * Y e ' < A/QM[t(M|"DO3#y@x=~$n%x0R1iH<]'A t[c\X`I_`[h9]b?])OlCnU+p(AnM)^@){N%nG:}WK#x3gBDT Hy_$ 8 {  3 O - 2 P  > 1 Q n ` c A 0 ,  f B 7  S .  } j 7  w:#I h=d$e1k(lV 9a %VEl,Rq'S t;ilY/jC_3cHf7.hU1pf_@T# (:#K8Ifz4CLi*TE5v2{>}LhD/zc[2+y)e%a eSK<!nH,n,W F  7 , a  / _ y H O | K8h 9)ETGWkc[sqVf\XW?={p\0'  R  R $ C  ~ J Q # f0nU|"H \jWf`H5)o VIEF@ETw_ =!RtC\@ d4 ]n;}r$Iau";q#L HK|Ak7y##7o&Ru@qHn@X*Y"{Cn5_ | * ; I UWS+e?JDz K$Nx+5T(pb<u Hg$"l&-WsoR S6(I} m Q 2  Q #Z%c4g:]-oJz^:4)+>T{+QH bb mV{ZA0umkhlVh^muo !;V2l>n1xLQRtM*sn[NZFVSPWa]JDF<u G (  Z ( z 8 n c7b5Rt&Ei*:JJe!m2u'GO:,]_{h\Y ` u  L J R  o7mBz@e0_|Y~0iS"l"f8W.U!fC~I8HCvc]9>;  " -:VYboz&%IXv Wd5_ [l0Hp2zU?"L~Kl :u4i S!>v3P9Tq$Fp;S{5NVx1B@cZRtrojyz|}x|irwZ]YDA:-jaO. yXKX0yK.f"}>W-\,R1PSpY$TT!m0I( Y' d[6 uE0}rX9:yvhxwcq_vh#!7L_t*Bj+Cq6W"c 7l#]a~Y$i2dHf8~8w=c3hR 4Z"Vv-M~6@` ( 7 = X i { x f Q S .   aL5 WC\0U, qD8x; k#zGd!t:Wb-:hB^%s<E[e,s(wIeyL `6g1f>e8|G)~b>& vWE5}wuuhfc[e[b`kgpzx$7Va{ (G_z 8cKg5_}:gKo+gO?{ ,p+`R}8pHtNzDr%?v3Hm ) 7 O j u   + I _ $ Q = d  6 f )9DNQQK@/ f 4 D _ c E &wv[!b0e;v=~P&^2 nGfBeC)}iI*v_R#uZI?wvhUMO>48%( $)05@OMWgit2;Qi{1D]u5Nb{0Ou~ 1@^ ( u]4rZ?" fT8xgM5( v^I@-}qfaTQB9:/#'   $*37;KOYbpv|"/ATax :G]x(?[r9SkAYl%@`u6Ic5Oh/ATp 1@Wp| &9AS`l|"4Li;hC]{  w]8b-A@z=V-jP5lY= z\E/tVA/~lPB, |gPI9& si`TME>1-'  #'-9>EOXcgs|!,:HWcs (=L^k}%5J\j| %:G[nx 0;MZm{ +<HS^iu %,18=DIQYaju.?Uew{fP>% ^@vR4|hVH8) sh\KC5&vkbVLA5-"{vpkb\YQMGC<94/,(%  $&)-157>@CLKSYZafiowx  '.6ADILPUX[`dgkptw| !%)-/47;>BEHLPRUY\_behjnpsvy{}}|yvtqnkifc`]ZVTPMJGC@=:520,($" }|zxxvuusrrpponnmmlkkjjijiiiijiijjjjkkklmmnnopqrsstvvwyz{|}  !$%'*+-/024579:<=?@BDEGHIKLMOOQRSTUVWXYZ[\]]^_``abbbccdeeeffgiikmnqsuxz||zwsplhea\YUPLHC@<852.,*'&$"!   kiki/sound/gear_off.wav0000666000000000000000000005502007644706012014136 0ustar rootrootRIFFZWAVEfmt "VDdataY"'    #(.&  )24;M\\]`d^G'    %;Nk\6 %12*#$1?EDB@1 *PkmmpJa3x'O=KK''WzxUJrzU?u~U}iN?A*ofkX DAKr>]n\FndK7X4vzu>2S^ PB|Ein[RBxWWz 6k,E[p3\gCN&QPmu^:~C#L#99* }XSxKjw~yk?|Q\Ia_Jnas 0* Gru`>(( '7G^qy{fK }T86CYy )HRC6' 7B63dfY\\PLNUOLS`bamjYE2%  g[Xg!!(>UYP@7+ !,@Jdxt[*  <XkfSD6%%:B<9'"0NZL*%,TbW07a`91NI1**)69@`dWSW[HBD9)# $FRC-'!*1) $:GF2%,r#CUTGDD8t$" 4ad7 .- 'IXVJ0*A0,70-' sa++,Ls}eAru?H*8/-@JYgG\M%ipF75-H` }3+7_uT;c.T?)zY#M)/) nu%/!oG~6,t,R @*%N9z@UFZngMbyowp6 UE gKb<1@Gc!?v&kKWaO/ o2} -xox &-O- i*Xk*@W!`2ES!*$ Vw*{_I9]x4j]xFYNBKK+)yr$@I|) {cpj{f %wr`pp"f"=MasvzJpM(*]Oq!!+cxnWhvX]~U   X1G a&BEA({W^{}N& ^Psc+}Wy1( Pe}GhERPz>t`spO\1 wftpcK8]3(`k,fa/@5b0)JM2%G~8P< _eiQ ,i.~45i.r< _Bxs*%vs^<@;esZVwFoqR@g[1unlCDk^)Go^6$Atr!-^:E$I\ d ~^S= #r` Qp_}l*LxPP Xl|Dqf,\d@qb?VM{^Kh=2O,<> Lb l\<O0qD/?F cvXBw`6ar!`4Y!Dr$XkLI;1!:!k& n}XI/*?`vK\[F$st]GrM/+ f zwiA1P8i_}GX!a^RF?^;l JNeANgZMin{w6V[fDTzAmp\ 1hYbqhRHNFKu\WsSn}B4|e+H&ur*%n\~Mp\LG<;>6QaI?#TgIBcB)w:k % >)%?C\Y}zC2Dd{2%~p|GmgqG1- 0JX0Iw5}aU/YKsuu3qm-]im 8p7n2=(@`HeIx.;)HHPF!Qt#cO3 >% 1)Z{Oltrx1e5>$K\]d96Oj>'Dokf&NJ]r )W|yH" 9! 9KF72kABr 1qLnkm*:ysP#TM?`]PD5oUTcsTPS>DObI$.:5 )*(%$'G< 0)7LF% 3U]U`e8vSPv|@Je<r!`&U*DB02$I0 0!+R?x]6;'s}zuD :D+2XZF% }}!B_ytb6lm~Gr!j6">g [W)- C[v^E RhdE3[hiiWE<;>/$,+/.rn2.WnjYK,'B_]1 4Iqr4q 86-#";G; Etl\B%(#*97 *EU?AZV0"giO1#7PO6!2<F?Bsth3 Cpf_mf{oUJ (ez|2H95@TZExA.mKn$UG cskg#Sdz-I0/E?>z1N7 {NX4`J'gm>0zx-*RkHPz *F>[sqmMBIi5?HlU p^[ar{}pMd6a% hn.*!dg"q[1& (r2S5JO jsPE|{"DlrL,VBs8krZhC7v;f2?OYN|s?p$%e n8Mk+DJMWMp$jfcb{ K&K<5 =ziG*;6+ jVIjQW EJ OW 6 ` &K<a D>,VaV,lp[erA OSb8 ie$GkAV7]5/=n  pW_w O05= Xte!NfG3h/q^O;4j#6Xtm{1~N$: [7++s3CC#.I`z./][]uH+XWELk3t#NA Fgl"NdV8WB *v~Lm<x Ug{Du@EII/?8F"s_?7g8lsU{M)DJT<{ZiANwq-FYWy`._vjhVF./OY]D%y%\@ >ztkC'.. t "!&  MzwnX1V&DUh&.:)X, ;^#V1I3)M_R (sXD,uQ((E*Yxg4b[CR -vD\3=z.s 21<aa@+!XtjW)2DD(ydt{ CXL5,@[mhG*)Zr~vL+6@-&,).4532;2uah/KejqaT;$vdee+7. AZ^B.38RV8' +. 7pj*@a`9 2ayVp#2+43%1D%!?>* .8=EA0&=\jlhEsv N|{eF! >coij]*v]TrD_N, 8[phK )3:>AFNb\?5PV1qd9r`&0BJ1 ;CB;*   BF+ !.&6<1/6(>qt@$'+7:B`gQ 5OZQ@#sIszoH'-8B8A?( 2OriB$byi2fHe9bbM&BmPkBCKUd|Jp%)9VS`^C1FG#M` <F7! HcR>& 9PjtqsiD !3D`N "+59HLA=94 %!5MVTPRUQ6,E]mhP6!/GO+|aa+NbgK(  166%AJKQN5 "K[Q+ )4% $+(*7:3}^D@CSas4]imR%/:=DXX]hb\J7/;8&*.5BHX\dn]D!   !Gyb0 9`uG" ypw&1M][F58:9(+8BRk}W%$(<=7/,44:JUSV]J1   p>A='Hgn;w63:I% x74_JX2MS|3vr?D oOr4^_IBc Ku1<(m`4cJBh?rl1#)!N dZ #>L >$"2}p`2MTp@#)- 8TjvdB%)#g<$8v & H9_/(S#GPK<tNIoo9y#c=gy:i^q-JuF@y;~{UDDIjP.%3R~~aF!q= JQ{[MOU[TB60<MQU]`RC;5,\9. 8k @WF <`vc4*M^O%emUsF" 2L@GyWV&B)|g;@@|rDHSz$XDbl8TMernF}A1 '=EO@{?#/FCQ3n\(  `ߙq]9z Q&4.%G  ە2|0{I] c Zh 1gx ( s CvnN\%#apbWH x$Q}(9"e [a oKQ $@-v N,z I l2'[g1%   jU L 5L1e/.t"!JXz*InI  D|Fqc d u 2l. 2  X  /(sWR9C"k[pBh 8 ];' H uqCC:-]<R/ r .M vrw~, Q=Wu  5An  BN~Cjz\#L `M `c)Ry\XSf _}^xDrwq>  z KUty;&&yix}D!h`^le`va&?'  I km^{ :\x%Ytw[h NAX__V{Y{,>$qF,~Y-`H4v̈ )?$ I4W@1T'ۻL# 3ϙl# '^X~TlJ"8um#jb-Ad/x78!1&2 xe#+x &z" *g)2YOSA,d?Q{H1Ap,P 8 ;#UL,탳˅ɵn|7QIT@hNS DR,/Eo6?a-Bغڜ񭋡ޱOGp,pW0TA,y! ɛ&h#ʃ= )6X"gH_I.3%N$z&vƞJpQm=  ^O !%#"\/8~. |]ِDCcCv7B=.y7I{Q .h| $gSL)EY=kZN!r3&%& r2 &]%O*=J?y Zxn TdhJv&.7U ̈I?ޫQe\Iضhz;1}X̹/My>y ޼j *"E hq  D&UVLȔs)TX6Q " %!v׻k2,%z7(B:3'+` 3 ].]L# gϊ'!0#-#HJ $<0;FI#DW~m sֆס $} R@%!7ι6%/1 @ ~s׼;'>  Ug*94XT߇ZU &; !#& mXQDk+C  0KG*v k""#{WK RD&p ],NZ 7>0fVro3lo'``6$y-$! }3mqa  Gf= gm } 6wy*Wh~ax D>=m* - ,{ 7 ]" gjDE c=MGar&o Sd|6<H@ . V | \_5@@ .[L  T qetC [r u4[l2 1,^E]R| XNK Kt 96w MmSW c3f,L lX;&* (.oc[y1YQZ> }Ptb:&lWo _ ]GC Nt]iw]>rXnrI'S$/4f2`m 2.?;O}6tYC=Q+ 2'5bc'NP6ZI]2% ^ L }]DN} pgQq=t/S'iCWI1HSpZZ+O; ! cy|X# $`=]#D WT'ZVf2"O~x;t Ik@ekdS;S&}@oE- vaBHQ(L387Dvr]3xG{6B|'n30~}w`~I? |LO/ced\}`, ut= F.QYLI E78W9=hDv)>p9 JX ,<l/HkNPyaPkf/p32s>~{6 |DJH(HX"#85wgFTtRJ_f> [-rm `@fZ>.cGU)[>4 F[elhO[# e@gpR*vyU 8RONi ld,_RlH-Rg9Ojpu_tc GYMUh`~,VZ +0j'D:{{UcN9E$ <zLj;B^C-UJ 'c~B=O'9nv!~rRBt7ttP'l.~pf!4|+Vau8%xqwI*Ps=)W_396 -8n! K$UR](]h=04?w:dvnarcFD ECi7L-#AM;xU8IF8 c-JKNPFA[fK^5 F\GCL`|v)&-sV&uw#\)AO:!KGTx>>pQ/>}.?6HE!BaEI JU/9<c{tC NX2"aK 2+#- z9+\=43YB%6ci7+<W|E 2IA $8 Sr:`u :15#/FG*$'$ !62KkmM@Ahk (juO/ Oxh6 $0$)$# Un"8B: :am4} /nHvuD  ** 392&%#+BM9&)3*-MH0 "! 73).'[qkHCB  *@=>QN-w^t5FG7 =on67=! 'BV`Q)$  !%A7!G_\3*0&  8`fN)$ )+3C>(2GN= %.:le; )$(E:9+&;B/ -.0>B?1  "!   &?PN4!+5 %3" $ *+/+  !!)34061&)0+  ./(     %23$@OH:*   $46.!#**((! "8EE@?:." ,'  1/ :P]P4  '()' !    %! 3=7) LISTFINFOICRD 2000-11-23IENGAriko ShimadaISFTSound Forge 4.0kiki/sound/gear_on.wav0000666000000000000000000010270407644706014014004 0ustar rootrootRIFFWAVEfmt >}dataJ0,)  (5KPTTdrnst_BC.;+ "# *KR%"Ahp%rQG;S\",Yn&Gq9w2M^n5LZ^cw%" xrds GtFJ"^\"+yGyGL?sM=_Z:8&2WEb BlV?BbgN*db~q)8tpktnVgP7cmn.O_K5oyYj#QD]#!oYbD jk&.IuN'#+ P9)sASw<=fE}R/Gy vIU(#iP j`XPg KKn.Z' 7jej0O:4CHif 9 s(g7}}FW(o[IPe0c-c,kI[qWf,I}J!Dc  "X. f[ , uCRGq(p-aMUCxrm ))}F7&%pyF9z:.I? Oe|/X4vH|x7*}-JLWqt22IBW@ay `ZcEdq]7>0ZA}Ffc+UjmcpM+-M+/ 6n{Ht.m  G3(^rExp?xqQ(N/>`'taVBo>A a7''GG' #rK&<}< oypTcX)j'gk1<~[9fn-b)@?oS//GXDg_]*9iX%A YaEJ{:l%1=A2lR^WWqoA: _I||aXg T/0 c]$<hdzr`1MwWcz $ GZhvigU!QI7S4XBYgqRbP:] &]aabUB, xhW/)"NdRH[`^OQ\@pw=<TsD%5$ OH6YkpyED_=$.Zb| 2:%RX|tg;(?nuc.IISDxWS<Q,A-& -+{QfT9*""W2:&M*#$[AMEA%<1'(4=*U&uD{  _#:+<g+$7:`PZZiuq,AudWNf@\$@,2CSy[wp\enFkK[Y8::, %HmPe:=19 m5_Mf6`Qa4niteqtR,53?,HH9R\bJh`\| 6TR0'lmuecki_Oi1&   38QM770H!'/Aw~xUq{vdQYVrpDC<*A7A\]wnlYf`eSm~mk+3,g7?31SP6 5'"K5Qaei_?\.";+d 5HCbzxhq_l_2Qj\w 6/@=>jkq{V?/9-<MQ\x\{lyge||wuL?F$K[CFM2%*>E*A&PM?ozPsjSN10  )STwl|Y--!.!"$Ge}}xvvhBZE[w~%/=RcL<F_CW;#E3% *2KA69nu]WR5:X11,-wqug|wu_M.  % 8-;9i}ztih{~  (*2/% tjY~wsF\?1<6oupah^wuyiSp``H><D,'.7ENED`WdX#A=#&-"(!$ h|f]ZN;1cK=[]UsOOLF=1C--IBZf^Zahgc[H9OK_6.<4F]bmxqgj|SVRO:'4AILXGLY[wn}%CDL-ZQd%w= r:).[qx5Ij 9h~]Zh\vjP1+ 2,HJ\[SRKKRA(olS?X=a';smrkpH')#4  #6>Bnouq1Gmxty[\U+  bmM5/u :AI>VL9;'%7&4 ('B)0 )&G)>(OZ7)CBDw=;>GP<3K<A +28POUD[nLQf_jIA0./::8ZlEMdOcga_|{oO=N>#D$%FPDSsahu_pXW68# &#i|obLc>3~&cjWQoOdm' '#++: y}785Vwpka}navNU]I[@@@_Kid}$' I|I:$dE'8EC$= E6U=OERU`;q@qXCW\DUcw?inpc{gexzkYcS@8*[eH*p<;Z{hy]gMJvH9?_(C.3ne8R~:5Rcb8KR.K!J1j(*S0Y.\:K!lM7u1Z/BSt<*D5/yGl(59hSTTWHC .)[s>uk3qULCZ?I'M_OgM_>4)o rh`'3'?A4<@Y%k+i<Lc7,KT%a5-xps~ 9jl4@+8^+*g'IVO.J?x6m?O_LiL*) lztllOlg\wLj$L&JnT$#-=/QcS{oqp 4 FP0L1!00yf)(&QF ]-WUj{C[0F2vz~V^mtQ5fqx5k^vIi1^2 l_ocK)/k}Zd~|+X(NhHJ,7&yw5@' P.[~fRyvT; &57j71JjC ;JMwqeF`s'Pb4 Yi< %M^AKhkKXp lX_B#5I )jgy/G"e7s%QVkhkU b!h9=U^-LaCI6 s;"O/=rt#VC"@-FEB,9$\(-^7K I <*RJ() 5 yUNYXf9Hf`]B Qؤ#s˻) cw'ec3fӵ"MˈEH6MG'l"29uywƾ %K:J;jChQMP&/@=C ڙ: 8^֠*5NT|{j X'F W?6 8ݚ2#h,+Wh)3rf1m U Ûaq&#4iJ *@/(&X  DꖷQ+:")]<5+%JU),eBBZ91# |0Al/Iy=F إSN\(O 0qA8c~DB3Ty &'&w/aݐ!y  6C9O n o_DW1Rq' /S.1   (y f  fof ,m(a'xz + : Gi<c q :slqn{ 1` R/ f = /$ J  0P"y_b _u$f  .?{ Wj^$/L kVX 6|  z. $ $ " t Mq sH UV *Oo Xzt_+t=^, 5 sKzQW p!Ft f` tUpLM\zp 03 : .YXyd^ c6 _ `%N ^ w H/D5%| k<(c'F[b2r Eysmo|Rqa!;)F[.X3 cK63g9VE?0%p<M5O &\j l:huq11yy]FT+Qw: h5t-D0f8=};g?bj//simk?3+`YWTOZ"F_-y&7v+D;W5c_ #8[~AH3k(d9!R\rp Ywp0 7h8thlG/p^{F./StB `cԣ9QFmygmoXil^zv StgujGtM[̉Ō%SVmtlomeugaƊ# Hwi$uqmxc(ӍIUPt6voFa"mډf)\ ~/p6qng6񃟃|$t$fX}i6C\ߑ{0k|yvnY3Bӭ E9p>rynUmjM 3zxSYEYXqgam\1OPHԩBE$E/^mb_,X]PG!zص :>z6]"( doCУT!t;&KU5Gwv |,6Յ3̺BX(f I 7`rW,1 QMɉ`"փ`ӧmL}5n m4#=K"=dK`0p..+6 fc'LN T@DdD$ "bJ0^$]'A*x!JvN6~>N, -/(#C%(1G7 -ZFB#3 XW?,&|(d##{ ryo+&iT_*=hT^[Ԕ~&uzJ;E4 /3ߵ|$_OU`|fs@Q8oXEvvSW[[0+B 'D3=R[ Lܮ̫| /%!U  0o\'$n4JD=,#6?YobCܘ.Y]_ CE!|"+Yf$1 VނK'38gEI>;U!#E_ F j!9y߃}  3K"Z 0  $-7L (D_JF+ 3Kv& G | H/01H =<Y"w'Y0t"~:SA Y /X~Jq=/4E  ~W+ HE' /:5gi+= L] c[*!7nPwkg9* H} ]Q( ]P8"&ks7,F p Ncy!s9 9 CP> f F SY 5was,GWJx% @ Lgn$Y,  z  N }gwwhI2 # I,Gy48   rQ(PO3GH ]* xU9 ypP8W V[cafC @%hhj8@Qb{fx4s%^Y7K:e#7VzuOU>JL%2-zz'.jUZK_p!oRbl^Dz5Rh\s)F).%x^e}j["K|7JC_~")2jSI^3 u%3P)-! iAcK1aM U ,5vUx@ f v M QB3n1 3 D ? qI g[>&-ZIoRk}<w+i92X LbI}KFsL^tZ!a!#lV2/jQD,!eIRq$.! KuD|' "\1Q_Cy}XT @J+2sy2g:6C TT{;U4L62Rb@p`>&=[J]gE2}$> !r=q%T| x;9V  #91C(lP4 A M=-uQ)< 1tR;*PqU9r|no +/'x$ f XA  ` ] pbsj"- > Iq8:s ^b<v\1 3  Va< }R_3gW X l@_< \ y9-Le.b$!dpZ:hN`  ;;rhdF fT1 p]j w6 1lja 6|pp' 6 s \d2~)Hl x D -H5WVXv:tfI> :h\9p7m?Z^ Ey;*SdZDN5zcx Z$EFi.D})ZP`= w6viBA`<)ei K'*16AzG`b: V/cHK;.Hr9|<bEhT6 do,P HgFp /{s:CX_+l_:y0k8dCRhJ~P-O).Hr0,! Y!#qPAW"Qkg5;owF4x5zj+ \qc* ZR / v8Mroy gfh/W u6  {  cM5c!lg x} {n|^Y: HO 3qMaDKul+F .XENghJ qW3Ha= .}McMp6!Zq&K&e".Ae&P6D8@7k hSGq.!1;4w7lr#^8dDw}a;Dk6~V<`8F6ENFR1,PH{CbHHSfH[_T 16ouI:v&X7yynoP[BIdBZaGY*Vwur): pF* - KOvG  TyR o Z %6)qa  ]>l)o}PO@eJ<D Z ~1RVEb-yN .RZ ,[c|mDO?ga:e0'\ T+< ?oJQH1OP1pRxcDWsz:R$|iYOtd( :M$\[*wg^ZSr:=>Kc c& H $G^6Eh,t^]+9C4*wpq!!]VN}?Cm8?` 0s* z.2Ei55JW9fNUk0bJ7`Yj  \K`3Y9`7&K}|4=zf.p(@t cd+c:X<b"{N9UA^Bte~vDYOpOAWr} .O eOp}?9p+4$1bebr=|mK+E-jRL! gv^g UP!&#=wB|ghy[\p_ tjZN+a\:'O[  +.hK<3rHy5lK{G|\%*.M-1v&:0FiR<:P5. 3|25kG{/t)NPA~'qeo'a {~}*'5 qYt 47jY(pqAX PJ#)C 6@1nYydz(Wz0z:zpgmZ1uIKne|)q }MXl usAM%"'%\3,qARm!CGJhC/kt.\XM[5Mo ZKH^c%SB;;_nO+UGv3IeH4;#z~,z<21JgXjamD#^%>!9l2qr/1zX?J2ab> d.O'*T,> _+5Ju<xieZ~D?@[4+ MC\VO-c"8 bp`D^r|rG2>|hk3qmY@H6u~@ )IZG_)QZ\+&Jsf[`]~Ih"$]]x8Xh]YSV]G?*N)}q<|WrzrxyO,(B9`7Dh4::lWu 0W{ 4X8U% Cf^$s:mwYr[x?d#PkOm*!w&HX<4`ye%ON>h$SJIlJnkfT<Ndth .VhcQWPMexguSp_cy%RdF  "Sc0#1c9^mN9'$D V/WfhXnU[zwV@wph;><$]) $@UcgH?Xoo. ocj@iQ 4._< & E,#Us &vD.6zw\A):L1h(+<(ea_.a_I`N{:2sYs0=,~.R.j Z.9LCV584Fxg.C=G ~ycsP5/U %G8.-2JJ`MX2Z>|IvV"qWM6&iFf2 $7$' iRscHtwqN(\ (IIeq3l`y[  !5OebacyhWHNh!Ut}SF2a-&(<n2G> PHoz9!&2Qb-%B{`*fj&L6\<#j&/]pbF%GrvJ%%0IdU\qzL:Mm+YsZG*;hztv_A@&a51mh'I~zcWV6 9Rbplcnajm8z<Qz ra:@WTz'EL6'd\ZmrRG.4K ^szT3P$%Yv~(Rqm)4-R)n3 %!$4Y"t=1, LvnA1^7'PYJEa/0iv{|hPD/;MqwR9:_s<$SWbkewkxulmZ:(0)2az@1$(' =VmW/ !?y|nfTuj?<&F}yusa[fn- 0ZLvA)nZztp7yW%sU{mUEHmtL+%,9EIfy ~tKVI:@)7F_zmiWCfzc}|,C[9* sa<46?JYr]oxu tcqqdK3<0E"5?Lbxx{e||]EH:" Sh}|~$ M";OqwsmNgbb !#;B~}_|t{dIA4^ev#-!oE8"+6g_trJ/'|o!HfTSH.BLT^UEA)51>24$ !<HFVE+B (z 2IA0"*37FU`;++v4nQ18%5Us.$ (+[8Zq| )Qu(C_XGjdJc}fSzX&f;`>\= 8%?:9Z}'^+p ?5Uw1w.U{Pa8T*T' _bs"Ir (Fev{vc96$- xJ -;UowhkUa_i 'G_uT6C..#  ]H, 1vkfH."uZqcdbU> e?$+/Cc-"5CRh.^!Gsc~P3!ybn]H@3? - ||{hjmyx[anx *>MIF>-)3+NQ]ZUQEMWNr_YY.+[|zpi\pQMK;>(-'. #:c Fplrq}hO< x\- hHs]?2J>B`{vumRI3!.Sq]gYb\I:@Rhrtqonpz}oVH"}hf\{y !9[S>:%&!3!(, () ;d3Mp.65%-)$'4AM=$|jDIQD5'6<BUL1 27689.5712$ zln]]P<86DH6/'+5Toy|eSF0%083Qt|r]abgj:61 ,;DLJHVeZg\M6EDERwiM4.%4EY[KHVSZ[fE) .9HNR[VP5',).$8EFSZrv~yt_W<:*>NQaa^mlfn_p}]VEB&#09UTot}}~seZM?8?S`xjlkMJ3"}  ##-Ku{tYQC( +8?BHCJIKXX\]WNB:::KJOSLEB@("#$?GRwxqfPNF<,4*&&/A=CM3. "++-+18J]a]UA($''+%<=8;8<#'0DYtsvrI9.!!")!,4?QBSSE<3* &# '3("$   % 3UY^aTL_`[bZOH8* "):A58@>:=?4,$%'CRhq_H&"2:N<21#-.(($!',7AITRFD-.?Wur|ubWK0 !),;;<A>/)(! )&%"068*(3(||u   !(&:9+4(2!    (%#!xu~}  $    !)<HNRS`\]ZK92  &-7<<7431=7/2:5;66=13&%  4D>BPRMRK6/&"$#($ """$    #$-/36:<=:=,     )-:85372."" !)(3)(-242-+'++06CNBQKMH@C@7.    !)24@A1;6#,( $(-%+$#  &+2AFGKLWVGB8,  %+11%("$"!.(166//('! * "   "$ ! !!$%!             LISTFINFOICRD 2000-08-21IENGAriko ShimafaISFTSound Forge 4.0kiki/sound/generator_off.wav0000666000000000000000000023567607644706016015233 0ustar rootrootRIFFPWAVEfmt "VDdataP~|}r!.lNv.XLI=i($uXSGOW"j 6GA_ o/8q~ i ~f6C/98n/sb ~Z Y 7AX/    ;l]v 68#tu\ oQtXnr/vWf ?|<\ &q?@A?CdoG];=9 _ j I,g =J_&r D Aj$NV!_p(dQ,\UdjF~Frn*6"GEo H)% qF y> S  C 8 E> D IjQi;mROPFDg,VvSc_S20u>x d  [ Wt#I| hlP}H g b``phZ#jyh68y AuJ J K P L dXc5Uqa?Oj>)Hz ==#'x.= 0olrW RZ EL9[ 'aT2iF(05 .o cMY.q:ee`pUQ u P  #b]vO hQde|aZ % nfZ~.?%r#l~Q-4Y@  i=KSy.sX7w`R ^55G )> ,|  0 H1Ca&F~IZ8k-5n%x`|k5X5A)`5*/ \ T C  z c  2 / };| 8" >q<1*['i \ ~oyh:~ 0g{r[C- IT2 T s UQf`nt7(K-3GhCIAai  }q D|B"(~ tZ JRXh n 7  +2HD>>=;SxL>PB= Mtwj;ra"k\S      # n  wv`M p^J' Bi4 S  @aN:m@ )ri=+~ m^{9wd ? , 7ggz >oL'e~h?FvK@NSP@a/BbRLp8 &-w%p KC? t;3)n d~xg Gu"APV u ,G + +-)Saf>Ys B`"<>qTUKtN| 7 eDRqh P]nuT91 / - OXyCc57*/ ] I m[\ ! XF : *,W/ U " - xD[`oZ^(GpS+B((3"!{*?0 > @ mH.D; 6  r d @ P j f)c ^ 8 R ` a ?:. ql 1e? \)yuyZ *b~ r. =#8[Ft Di* B|j[_K x } $ 1 7l: _ K C C = b zIa ? B p = CWY$uCpZWZJZ<    E=J5yIFGd< QxuN>qG :z>sJq|; C!A1 : J $ |  jp00 A%N]f[LVgd{a:=D$ qYYoIy+Q  ypW;U \[uWr*_< kza<r9 7Lf"Z~7u( GM t GH5<Nc( :% V K Yl1 ;mX1@;"6 ? 1B= L % 4P5gnMOgqx(IC3!"3mxL&p6aODra MU/0pS%&Os5!3a;6Vi(i  o 4@#5< t (')'Wc 6<  ca O pg%U%#FN#0 :|fl OaM"MT?/ 7[mk'"#]BMQ_nykGN* q v 7  aDHN*4anj,u @  e M ~}fN:)$' Thz )J;' \A/O <"  f>j h`fv| @=| E k r _lt( ! c~w#Lq}AbC?744+ <M*MJ':A0 !Cr\E!2l7NQ"[>/O. 8r GO A|%;!D`z 9C?T^!8%} F u kG!"z O*ywXbD d 5 * H/2i0$Fw,YI@J1,8T9}vW'aE zb#*j%UP oYf@ $ < G ? W  b lcD"f$pW p-Y~h:2\etn@GxIsikqd3-@   > F  5 obdw^FYv-$   X  7 ToyW  z rO"5) c*PtOc12 9Hw wq)|k!1i31~9q rM!*_HY}e{5 )E !=j2KhH1|M! V [ # g ]  C 8 _ v{p`ZY\i~rh}/UY h?Ik)4/ s mVw<_B~%l~>~aB/(5BTnNo]o7nAp8Zdq2zn ` \ c l hZ><re . 3]F:CuAp8d 98]v=04. rykz0do9 (]o>u_M>1+d)g " / /  CQKxsy-|P+  3nqI@lDm[  V { q C  M :ObY'-l'j6D*va* mXN!1]!w C D b  )  \+~>2K8lQ%_Qm T#yBl?ixA 0 $ N q y k F k s H+nQ+S \=Fjwt^b/^ pH7wEarjEK4_cB^(jlWj=f+j'*:W#R$bmwl I .  y6T [7 X3D`KCGY}%%m\/I<{Ky:KMjwT*]Y'Jj"?]3U>{U8;UrS Vg8TO`F K x m / _Z WT8K]x4g?'^4h1[!Neuu`1PpmkMBM~IWJ.f;t6d&1x-R>4N_pnF    1 @ +  X I r JG&N~w:5s a(Qg.%BvNtxOnh%]l+2D?~:@P5pR9HJTR3_@xZ|+,#(TmF&)6M-&F03k] O"QCjn  N Q c%-bl  @ f z s jdcJ0 5Y _VQ Gr: ~B|N*";j$ r!alEXs'Mz@y5]9*{ c9)"$9Z4#E}M{/KfY.K % ^ } V % j " nreo$E ]0uZC-]D&U!r-X|2Dh%GXg8 $U8.CoT`XzGX'BF$Hg~_$ } " l  ; W l l o v m \ E  o - w  &X*CcGL~7%d)n9}E|8h(S}8f(LkoHA6EGKI@..&'7T&pe5O YV@&WVQ!4CNTTX^egfegkkovv|*N6w `fy$wh W.p:4Y > 4   8H r `  d CxYVS`wA|NG7L&Q 3fW$ )T!N+LzyIR)8EKKF?7- iQ7(Z#t-CBS{~!ixhi~ o6N3{. e < Y q ~ | o K (  P  x-B5ya/sw$Fc-X(t> @,Q6y5VelfqA$P]'`(s PmYv2MmWIB? w  h     O  j  Pz(0*d@15aZ&+ZLS2Uy7Y~:r]3l!V_0t*r=Su 6YVSk(j@$Sy)`>u'T,pQ8mIMw<e;hS$t"}A {hd Y =  y  I s | ` / G  %  uBzN3 &%7:L<#t`[m$~@S? fbgvx|h\9& |I gJH!Kr}hL% \,\^ <CCw? pnns/hGZk0E@SMPCq:WlzulaR@~:Dy!W:tWcR4}}o[UI6FC@` S#opt{W'd.s:( a'`'odd;{ .  n  = U ] W H & | - $ + 7':a2&`2PcgXTE4Oa^XL2Na2vkfjs{9a&Fp$gDOgP;'!#0A]&f]![/J\>{Gv &3KavT?=0 G  h  R  $ ? U j d X @  Q  = R b \ZLDQ[tSVYS |34u&/}bI+@w uQ6@ebk6>6<`mvqi=XSB1p'@`A?HZ ` i ` a 9eBOK@ = / x ' = k / q-b$x9{?L5wQz ,f%2P|'AQ"}rhZLJISYTOIDA:3.*% &6DNMKXjfQGQiy[>65Nq~lngIOX]bqvmq}}wrkXG>;5.Oe\G75=HYtuWM`l~uviL?CJKFOqry zolsylpon{}kYMHN\rtcRUelaS`~xWE50IcvvmlYKSozyqhd\_n{nULSbhfe`\l}pMAPk}~uws+$rjmaDIF)d&pU'%~$#nMQT)2<>Zڄ;ÿ M  R  8(-$0K.)# ߇8*8@i?7J+eA Tyg&@nS0VG+ & 1\E d ! fzl\!o!π>ϤqI%R' )^6@GJD)?:x7w57O<@CCAx=`9f548>B1DC4?91,+i-e0D49?B[DWC?3:[3--.16;>Q>;84 21$24676y6n67;u@F~K>NhOOOLPP:QTQ'P8LE/>3'po 5 Vk ڔ%ƇFm+p,ܦ} %Mі ù뵙{ް>Z“=ޥa*ĪqA XP;o]ͮ)ᡙۓˎu6mW*>~ouR4ĞOWXt{ s| ! 6#+''#@l +'22s/(!E!z!W M!*2i9?BDDDjCA>`>M>S>=;84.i'! G t@+A?AWT$S6 G!&1T=2HMQ$X \^` aD_ZTKXA5)f^ uR !(4K=eCED?9w2,))*W/6?~HQX]`1^pX9PEx9M+~ 6m(: 5XU_ L VK!!? ;߬IbI &El!h&5+049.=>>G=*:=50>-,,+,)$gd7F<`µ+ƩJ/[>ϺƺO$7ݬcp.;G !q@: 4\\|&Klȃ㿡I >a90܀XdxE|"lǶzuΒ8FfnN^w9 Fb"*34B,Tet{~~@{JtgXI=w8 64321"0.c,*'%"EJ2ic/~EKE *8FRY5YTLAz5+"i u %.u0^=ϭʚ6 j$']"nVIm b^¿g=դӣ:U$λ@ߍVn ľYHMΓ4И͵ )}SS'N5Nec ; HDq,B{{q'  iXٻ5ɩ$=ےd$.1( ` HH7 Tx-QU%0g65.T%[ )  ,u7j@GL@OOLJHJGHFGIIMDJPQV[Y|X RES7' | ( :zpB4Y-@JHT& 2jZ[9m A.ujCE9Ҙ5( iK|&v3AOq A #O$mZ1\گ+Ig]q%(4;l>!<3)71^ǒаIalѻ̃qP٠zrީٿיP1ӵQɾͷx۲ٸ͌γBȓ־[څh8ޘڒQݎ oDN?_d6ҵմA( E+.0cp\?W, LY-V;GKPVYXSJB=;;???;2:,'+O2;BTEWC#9,r fI6Sj+z}~ufjS=,*M D#'0))**+/}5>IV]_Z QE9(1**A.4>KgXse1oupdS3B/4+)8#I]dz!i.675@17,&B!e-@} G-їHq8P;Loޒ֜5 v֐v I{vը̞ڦU4Ǖʂ"QVO!=1 %.23l+k еDBͰN%a?q# H ()($ _2p aJ$c-6 ?zEnJKsLLJHFDBY@>P;o7G3;/+!)'%$# ?,\{]`- N&0685/'2 >$\1;_?~>:1*$$%,()G*($x3pd))8I!QTvRH9'WFA )/y$ B uYXՑ܋i1wM# wYѺgFy7uel a 0..&X=ʓYί%qlZ zY.XSp%W]z#3H8U3(=f*9JUZWuJ9#J:g*No/:;9Y8>7668tlW>fq=(ߺ7-?KBQSTsW\uei|jucXI8I)5 +} II%+06z: ;3)On} zb y^:B4u| YDݢs'04~H<~ ^T̆UhWon6Po幏nóCۨ}_ZKwMo^ stNԊԞՂSwpzD_CfB H~Ru]_$?+07z>^H=QX\[^^^`dnv|}[|xsokhd_ULkDFGO\j4u|~=k{BwsZtvzO|zraK-],*=:GEKF9_*P  !*3787W3o-_&P"!."8" n ?^ @rDcr&g"+wƯ)%7BXLhPԨQOw4w5׹ zߴ*+v_yrr`U?Eޑx8] )ߎy"BH;&U13*?8oMU6UHh4H= >ll  l! T $/67557?GePOmGC9Q# t;K T{\XFV#O>Uim)hZD>-Uk "/[5r519*$]!a!!'p/383P&LW m > 3 #[!d2(l`*dֲϖLpą0_9Gw_Z'wܵ ŷw2åcjѡ҂;©t]AU P/1a$un 8&,86K*{j|0HT!0BERYYaVNPCr7+# '|4<=8- %R#x+36/%2{)F;L\cPejaRD6.L'A ~_%+--<+'#C 2sʼn<5n757PGw#V\,:MuWѿ)͎Gr9Σz%_ʲk|٪ġ֕5]p : C_ރ?'*#&m+K [5J5ֹLٮ-T3]DJH?I*Rߧҟ *'FBWLdibXIF3m$# QLlAM^ѫ+֒޳_'}5)nłμȴ6b'6;:3l$0i*d@ O$(%y!_dX{D _A{w:-!h#!A "}*00(+L]a C S/C#G!$U"I lj;]C cTض~OS1Yl8ʯYV  je-'-/?2663-!UIO6D0!/89690-.50DQk]ap_rZTsRQQ%NF:u+myv9[ߵ,M)5?DHL@PQMC<2 Ex h( (UѿkގÉy |Jᜂݴt";cÈӁL5CQʟ?n?"P;Յ!ZIMn['  p 3 (7 / h!6#c%''%?!hnc#.c696@1:*@#;"/x=$FP~fzo,6K8v0t' z$% 2hQӒfQ .:d=*^ɿ!v˞v ;CmO;ۉ_a?;aF @ .?FlA.8+K ޓEP;^otfRn<&~Q<%.}}kb vBpذ r1<8/"J  ;@(:JMG7GԪҏҚ֊Q}[u [Oq*&5?@@=2" =E&7b=!80f*/R9sFyNNG6 5 #/v?.MĽxMLPຍSUA\W5FgKEE2L P2 *1'<]&!=C;-1 N(Mbq[#. 'Y-4[5#/,G+)"\v'[ Nvp+&tjC,ͼl +2674A.$B 5>q3 :V2}$m+n' zڱ8 o'6sBC?6+')5;wE9$ 'gΊź4AƗuи` *kNXPޠ*dۥ4 n۴{c͑޸@t6}FJ6gIy 9Af7,'r SaCFF5yD<* o^ s--6(j.>+1%. d|׼>Tip\ 0,)BN< r7Tͯ8$V$#0: k f׈c]ÿU3#t5*m} dX)23/)&g!$jC |7o-g"*4 ׺^tb ٬1t  } P-0) -\Tیìй",V,0~HtY^*WOI.Fz?{- DbT :j%X)*K$[ 1}3{pҁ"r8C@/h E޶=2qwYu%-?6HDCC\D BX>93$+F[6ȝ A -FK`|XDZ,H $c} o`H07 6ݢ]55Sekmz¾+D8n)}1.0+#p[hƐ:k:ĩ=өkB+1, ' d,W7A6M]h`XjC'7arS): NMsNJЬ6M/=CC:x+sj֚9R W  7ԵKζM4j&V15w- jҨZ7ZۂӀ.8-w (13m*$ SiP?-3 $B9M"0V/AMHE=2% zۨQ!ƾQd  <  >~íq u AR[cJ.F8|L{x8Y19'69)Pdd{ux e,R:::.\$9h+c*0/ I3̑)IB*F#VW qt2.9f/VX=.Y1, % &C+,B! Ch9z٬ 31P_XXG2  i !77K &)*0/&E^Śhǿ A2 sc%#%iYBEx KBvZ(&!3us2o $B|[qheN8)O яޠ ;sM ' pfsا@}3Κޅ./BLLKPUm[KB*w5ðRђ G  w()E#i On 8JvR Fo֐DO)>" oaTōD/ғ}.!AKGf1WPd)^ێmŮ^89vgH_vN[E>R}z  u$4R83A'_U M$`?OVSE1Dkc춟*\3|-0h#o pU9rN5 -$PZ]iv_תܣ ; p߂U K)b0$R=   5=E;K>-3 XHؘS ǥV\F#-HV~I`:.(% nB(Il gyz N !n Fڳ(~ K (;GE&9f$ B1$08@IH?[/&Y#}7č O=#`ldJ_֯R;0%i L}=?NO $7r4I Jߗt%|53%&4<c 6`hUpq"y# j&J5CUO XY C ](eˣ (& !t Q'"*r*,25k0^ļNYM(۴o*':Y (~לݩY%W2& -uP"j[?ID: Zn¿mO"%+*&##D! VX5$BR e ^~4t+$$缨ǽا``K%8!('  n Vpw/t| }EU)>KG0.0j-_Ǝ # 3+|(y@#5t3#r LZ)Uь-*d,h')ύxf08X1!O$n;TksrbgTb3 ю FԇRܵ o (6--^6.?OQHV6U: I  32SBKOnI9#mo5ג<r 2l  ),(N lmƿRF'e+\Ios C$ג 8e޼cBܐkf ANZ3) G G`XL  F3 lM%&#a'Bxza+>!אHgչ g׼ VK m #= ("T! AX+Lfb g )#=e~N !"7$Wp_=N  r[%qϚͺӇf1(͞իn]R q @ 5uY < sWpJ ~E.^>@;O3)^"VZ/C A // u, S+Y]5&+)#I^Ѭ 'ӂnd'׃S ! + |Aj'414.  }xhef0bޮH:$24?'vn6FKiRAQ?JB?.5%҃aY!P|J)˵ IM!h"ib%3 Tj_ W @Xu4@%y <"v@$ #'@&?[:pnq]`ԉrPeJoKi\q"wiiV]#Kt7V2zE NV ./F\Ѯ0NT8h$$Yg ="((" l '!*^%J Gbׁ܏@  Z!  vpy~{^BD vY A:1*tN\#K "$,9/*"7 +uwmۣZ 7e!l(,"h 4 b kGB'l485]/(#8:lκÖgoOn) Hh ;;KXD #%8IE[ұ>[L"H] )(%/-t0A/*$xS 5:m[z911v\ .+S! +gzcS s8 t.?  E-W;:trp? O**!(-G,5%u D!   1 -#bK7wv؇$M],ϗKk- W $  KGBZ: W ; Kn{V^)JF` M & ~p N!w >N #0&# L[;fq ,?Zz.8 ?[' <)N Wu @N{F2 b!op" ?De Is.275m7q8Mij  (- QAY>}^=U !vL@ݎڠ )* YInoomW40a]. q}Egb KgLW@aF$2PB/͵ҝhyXޓ@-[6o 7 p ~#*oQg(|%5m]TQ7c8D u)362V(;"pm& J Ap3 n 7R8v] ,  !Pk!.: s*8> 8 ]h[ S+kܢJRaG+ Qo& H  9;gi=|EZhx'IH (3+& vl8 2re5 x m{WhHko C H.!/yZ[q+;+[FHcDZyZ} 9t+@5:@81-dkS'k  #H dZ;F{p|Be,vh7ikLq MC ,~Q $  Y'q3DG_A:{6k x\9-;.uBh\ 1s6v $4% L ZYhi݀%\4zPS J3O R -!%B% :ߌݩ0~#:fN N kk [  ~ tO @ wOz #k?x W O\O Dlil n7tM@nH]ںܕmh%M S /mQqujII=2P :+MzIgnXJ H3eCZh e| "aK`}Ot JB$&o&! eqx+  IBeVԔ_٬Sq8 p* t"m"( #=){rIPX8{``wtl^9m9d, ,j܄އdY . }5hB* ?_ܔ8; 23fu%> ۦ.zm0XB { 2r{EnyY7&c1/E`u N-,O] b(28R$'%z *i `^Nek ?9 1 Ri* _tcm )Tm\ٶmМ׋E%?%j 2 (@nq)n*E,b ? z,ua!BC ;)pg5?Ta15LlFqc BK k=O|KH^sz ,RQ $ DAv ۪KA?`4!W wY"W" #  qn\EC]@sw s TIm}]A |t "R&.};(01)pq6- - 044 ڐpA G^^ .JI"96T'ՄӌA^.h@h }Z:Xp$F@2 'hZ =:> C]n!]C~u h8tIe )"((*$S e[xe6.+  !; ;"C iu!}$ v )c/ 1 D#!;/ Z8 +I#*%#7{ Hi +ܺk6  GԽѡܲ\Z9kDXzt@BVj  f+ޜGM ! ZAOdGl \ ZM s E ?&8)`  z2y+ 86qh #= 'eO LKp]_ i ) ( ;*"" } nSOI %I( rC1eST 6 v w g)?9Uݷ d3N` KNpeS$"I  |2  t sn aAD > e |Ds$SY}.~+_viw -b Do_ GO +##!5 sC'nߓZ^V(d)eY  E LQ a3yh J+ 1SS1 'r_߲k6A cR^w'< ]  qCP OlNK  R}8zHG1a{7q <>n_ R2@>Q a2}'.&Y^ djw^q"?R9r;)1@ m  u Hla} :/d{<3d ? f Nb* }:bs |Q P@ V "xTRc(Rc Lr0x-0rQdi4S.m V !v%r04^e>)I/ Z%sk 1 ~ # >Pu )wGc +A^z <Bdo fWw9ZnU7B8uq' VQ]< X16mx>m[dVV 5sWF"mAk#h* Ie 1,B); D g*n]djB2,q[#D 2 .C_X%6tv="j 43 }N~{-J!"!cZ  c )JuqQbB~[ p Tt7& X|!! R 2 S6/M:PK.F y1aSlk=y>\ {^8- _ a% \ m+EbOIgI!"# ID2cPs X^,Do W Pq]mQ Q8V[H8N?=D_L rX+`, ta3v4FaA9l3u 9 J ~{ a CEB#7prc  fE`% A2#G, F Qk fAp %~  )o;YWNWh$@2O5!@1?Xt%T(pZL- ub(rL*fD'(%: n |c 9 ::J f!c" !&9 kM&BGq{hby<^ R^T;ye"# `H\r {rq 2j 9X x&J  r]4  rdN8-R% Q2}w PcJ v4gEo m#GL59JNP O" SIfd  F= H0 'UICn Q ^ R  K } P +!D R!\2 ;.g| = Lll/ UmS.}6B\1 ez%5Mk|cE 24j V-N>c !E )`:1= w  [ ^ 3#,1>RxA'e=m &2h@ 1H1Eod IstZ 2p p frX:$X LQj D' ,!K)wvIpX:5ls >37Xuz{]F l @q VI .P,!> "$='> ] 8+<;$o" Yhj 1}+OjzAi\5`?N[&3/X)s;P^jw77svi/%HO]@  c ~I, R " dJ ; _:)Dt}]{_zv^qw K2Z69G1fcAF.$\9E y NkIdNNk]HvDI{^\'!Z7bj7  8  S LVOzb;n#hjOe@3X:OFA59]^  ,+'hy s 3 ;  qE(%=A <*06;`Uz M9fJ o b  #(7">qV/  RR Bw^Sp =nE9NJCS~ 'gx E=$1; T , xe Q  /  (A#Oms6sHb }[/rB|p 4kI +`[R{yF:@<( # acZaX t'(m q[ "( CH"< 0g #`& ^H6$L)~s:<"; . Z BIIyQ  o=TD g ;$Rg#%/W `K):(wsZpv=x /ZQiXaGW@I!*KO =Pjg?@\2 j Fa%8 eT (( t E{c( _vZ 7  JYQF07U   rfq0Wm,i}*s G rY+L& m - - t+'_Bo8*E>eW]&( W d _/ yDBC_Jj*"=+\-<j `iJ^Go k?Y>22o=l -I4OJ#M1=x<!<OiSJ G ~ >,*aFQ rUv0njk ( xz\!5p !1r)  $_nO~  s0pDnZD"FD@MS~]j:i41=9y.E  f @DvN X c41F3n\ VxZszd o)wWsHFvh% >Q)izb\w8)zS3eh 6{ Gg 8 bD `; + 3Y^912LM x`GaELT_ ZF%zJRRc7%b?^ $P HUU '$Y w  : JzE&r R }kZZd~O Mk;z 0sl04+ T@ i2{> $ LXV1tLD&=< h  -6 nV!6L 8 b Cwd C ? "ri 4 }'XFa3LK,eV* FOW NUqhjXc`Um*!jM IYV7]*M-x4on0Gg^Z!v<3-:&`=aqM`WbYSzhtUX:H8+ c M 38  6 4V<&`#FP-I2G %2]/aAa!:c S  F 8R6XY:'m_zWp;~<0&%IXY]U9nf5 JuK(=1;9:n+(RXf|*|}vf2 ?& H.z/Yv t A@e oqY.23>|&B^ 0TyR]P!H;  {gib@Kt*] Sm7T1W_nS7A7!M2y87FJ(eItediWgk*0Yc?6l3V t L T Q,Xi<Bfj`.k.j= |MU% 8 :rFDIrv@ ?5U#fCDDK02v~Bqt]  3UEx+;6 "Q Nk6Jk]H  6fJj~,-*S L{nWj9uP!:I> .r c}Q+B!6^MC:s GcK| a;gj[4l#V/wz 4 j@;v%(F0g{ng|rDz+AesYK0po`#]^lQ,q8% r X> !B*h0u~,i*4C0x\9t8@927"o  4i)3hJ[I`!XFvyn ~ `pA\T=( z[rgfq\DIsrl`C{EF dB1-Hs( ?au_1fRs+^5AE OuD   . X k Ii1>N& DH&Rn:T@4wf0 _&Od3+7S-axcV>}6 a?d8N~dt ol@d ;JJUY`G&n^F",u;k'^9M ]d} 2GIP!4+^4(%7'^S6*q KdIK07\y.W V   ; f:!a[F `xB 9"~F<y^9MVa: <<m["1P/>JJHt=BlW5.0tJ _t;47]' C 9 "evx{Q9a2!sHkde$H#N2$[e#bI%]g'bly)e3csk}d\ t 8)zFhv/ (~|iVM!C\~_[ze`Cbb MDLDL&7jzDY bZw'J-nxRZ-e@NXSq&gBOA$}Jc^1MV{KU pu3,zk = Q iz   c ]o4YS]=A9Q2vV\2\%:uYwcjq1:'[/x9SZaF9T0f?M2 GW7LI@"}z> U I LG 7w0Jx*/ @&c^lKF(<, OYv )_/,qmMKTl  -RS^ zz%nHW'E8&o^yFhPpn';X4KlkU7Pk[ _T ]X'C%EQ#&U4;dS#[|Gp~,Z>4eA=J0M}FQOWa-1i *5?:cY8}w'w?apiO hA{x(>bSpH.zt;?j?S [kB*Bp\c*cCj5<>-ce~?(#uZ} M) `P&97O- /kH5_*XyjUG m3f=lG$\\A8 _TCl%D2 Y 1TPb"ueXK [+3Xq+ONGfw}1 >+n{# Bg.MOn<:7A oocsVc  Y xN%*Qfc ^ y T<GG MOm yO(Br#yjOh6b{CAI yOTQzCC%UNO Vw)Po=6A!vfh OYQ $E46*Tq@B|g=|`  \0 vi#\t=$j>dbe]D.b@9.!%*o9"zgUsZ): -{3ubo"(z#"+pKBRa,YyfCHf.k@tkC bKL3'E}sil=cbS,E^3BA* b w wI` H ]|@"2N[ ,Fg }Yb@d\M4apAF=OL@cb)yKf M* ]bET$bCrKwBPR?d*=x`5oj]'&fPr'TO`0e9pg(tmfGx'8R|`R')G<#`LgdJE vT0["\b%K]*Xzhv% O7(( c$`B 1 y  $9H8*<)p!lLbo2HgW0 LOL==LwS3 rB* ?QxZ\T 4"j'~x~#UR#Fr]GY57S' hpxl B Cm*)C+c%&~EecZsi`5*<Qt^ RrNwOR^FebqRvKEi/|#]m|}cx{cF \QDwW0J`H,}-,N6oUu$ 7]~@";Pyhb%~R=&]hp`%39TKdFy~z\$6@*k**<Azi/cLe |  yZz:zHod22u(_P b%zq py:aZ?xxC+=. o:lRBP)Qk:kCcw#  ?%M{{L-m.2&7N\9(,]/}.-*\u(*lS6p 8Oa."?":;\I{8l %X97["&XEO\~ZxfBCcdda]mv='<Kf/>\"KGRVB}/:yf+xR> 2v5(_>?5'ng0M6{ =!KS}9mgu"N=Z@5 Y;>@Z~g!$cN"1 K4pat4p5rP p]6r='<Vs3ZP[C06< s}oxV08)( ^HyyL6Q|Y_5| XWcb|azTT[3 [r.)Q> I3Y) t7l}$91r0D5fR@dl- gU7=4rL}io2AuI|Hw0+WBNU} 8~Z5PH?0(j,0..|d;,M-qgr/H3v.uS"80y?wp#aom?6PFzl.E/g94st0l)rM [B0$w]GdtbD$/fO:Lv'@n5gc^yK&oBWo#N0X&_W .U-hp5/M0|#kh3N+N4|JgH M"uyxU&>yL4A8-@c\[&4nCb3a5"\v.jUp#0{yogQw5GK_W(ste{?*Qo TBj+gH-z*&{ *c))G_F1W?Ks <e$.9O i+ib0Y> =usKL"]4,qLL.\DPO(KJ!V0}vSiiWNw<4M_A%ju I^L/HUMMo`sDIp4eqb?_PQ;ZEGqFlv]K0 r > ibXE#WoQN< i U$yi=@Z`U hd2^w:M_L?IG0TVMXZw QNo#5c~{L%?w f- (5B;P,4C}UN|) c>3?fOk 1h=7Kb;$1o8Kt-vP o|B @WW|nhIj%h( 'hG#y`w|-L/u|k8-XtPU?t_P{ j gl0w cAy kBGdIn_ K Q3i8z]k:/x/*VP'pLngzA/ sb"&, e,qhgY!R&|nb0%b4(8KgFM/vo:m(=aX2TssEjb8%H`og+au*l*tN'+ _%+/9_@W 6?2fHQ@CPj t/yLPy\7:bXfVT7S#QeC#!8MSAJDt]r'IF?xm^YoRu\ i@O)6W61ynk>G+Y#/M_;V<`*0x>n0o6v5Xw7w,Bu.yN&NF9 n H$;DN /9YG "l1^ZW2uw</y ;/bB11Vt8)=|iq,^^"JdU Ol^eXmj/ZDl-Ec"]})AOGn@@ ,9, YcTK1B2NtP$' ^OYm3Wf)@(9 5Ex|0F6Qdq69qSP9-zCLo +n.uo5lC@E #F$SN}k-e T8*{ KO1bF1]6I~8D:Y^m1D@!smgs_=-A"<cy6jb|PYkh{5KE(E2yod#hCQhW|dG%)${V^FXC>a$k,{O[P{11!tR/fe<n|Mb\}3M>Nh\pom(j /0Ys\RkF{4/ yAa:1Z ddY4PN $(*ze){tmZ hPbE4a/]B?(r-|`Lu|K,=: CH_v]d"E+\;8Ej^q%Ag\=R|sB lJkAPGW@ tQ3!q{g+.pEa'JW@Vg3@LX )$(l)rds0_`K l)&2 _b[.H:lz0%6O> SgT nFZb?1 7`Xho\zg|WZCn32180y0f|INuGb9:G?pG3&*IAI'hMYe`TR{U 44s=x?_*|e5bCht$,Bj6|L-mk> Eq:8JT[~Jn`O=VnK/yLOO=;;=F;_O<iYzw\t4B~uu2O{!DJYC1<8~HpJw|GbFht|`"iO5"up|292(Tot#hu?pW,o i>'3f_eS$:80tTZ8pIq/V@+; G*i;~'S4Z8<2h,u+aXl',;8n_]>16 OW0 -k)T4AodR}J=jaKBi.sf6jjeL#1Da!gex8 p5S}7 %W'"6b71[un.i[emM 2Gj] J$ J|x qj['&q # u^9\>sLJ&!Qgngk2>{wm[d8 !@XotcREDCLgkm^?-fpJa2H4U <>u3FF*=h5c5M2}Gy;\v%5G:XF sP9qBSaDK[ $=AqQ g;Ynu= m ,[zL63vJ-,ab""c/*mIQ?DPDOmzv#P++~KY{7#E 5wd}y;fBG=7i*"^GRB$:-|+C;T~~ {a| T 0I<0p9.!@XM_luYL`_\s.-).$7u? ",9IM :uJm@Q|HP[C\K^w9 -n 9CGJ8Z),&*c+ _JrF#zs|q i!A;4kpLe#"g NB=6I" |LrKz43r}6jMB.jj Dd%Z?a #~1Y}G?ZPuQk dIVG` %`0 +2kR\i*'MoWxG !vGGTH5" P0gV&cx%f8w)n$ZU B= CF&s}.f@/"w4,;ApimuZ" BcDym| E=I<5}# /oG72)vQe(&J~F`D8ODw$D}Eh82=Vtp-[PZzpi;NQfW]ZIO,IY-jlPKmBCPOK>Wnsj{{k21:As=|84_hJ;|iCBL j:S6uPuw^NZ@ V=zB[#>;Eis<<3P| ';}RqI|Xjd_*VK _5#A;dS?X_1Vt_8Su4iL>]e7Q>}e5qW=6zdX'NT1U,xyQ*l3 r5nzPu uSO(H4]I0%?beM!j+20(7!S}NoCe%F y6wB`_2T3?{gU] W(\:IG)Y[ #rBO:-Gs4V#RGbUlH>os>s'W]=f:*@M-4y\Fj=>aEp -E yz [E`Kk<`H0i'}25lSbVr0\mf>~^N3y HtuY U?hNtcJ&<x?gTe3rfB.8M ]+Ck!:HOb~5Jt%x R_(oW733+!&+- ;SXe_A+k/[V%Lyvtv$DMJabH+e7Z*D8MVs8h \OuLw]4yjkg'}I)l@S{"8UXF1 ?x/7vJ)}:~fj<S1WtzZootS {Khn =5m F[qb t/9~CU:|HvVtzM Z]>) R4yKoC;F')>LH8+(()@kk=gwsZ AwI= _8:z,k^5bOD~|J2r;rs l';12YEq9+1e4A}L ISsI F}sOhe}?)Ht[ -= =o~^GB\~'yMPhI-'(V=9[>4#0, G 't?#EO3Q*HetcC, $eY]b}/Pyk[HtI;sCB.~l-B8X#-Axrfs}ur_Be E}j] o-uR%Bw,H_ka(T}%w_p9EtIIg&-.@kUT9 U ck_n?EdM246C^\"mH_^YAla _k\z2u:C [tx#vG{ ;~ Mq{QuX;2*At/]!F @G%Q7ygn$|_i%ViB1>O,'{ jH_*$h0*k0XnoW7$!-KvfPYXt"P8o(Z>%JeddN$dKs.;/l hfa5Tmwe)N5nb4 p? XFnY_nrWAHrUbd>t-MtP%sYj/<~FM_E A"">hSh nm=2$tmZ[,-M2Q $G5LrNBw_OUA}q#R"; Ptk]`z0l,V(k;ky' O?nopB`jt>Fpu?moISsFeUZp+?}M5O"3RCb>G>l`-mpQ G!XWc m@$0hSc+'?rn%Z)%>N6 GwC.>~:5pPE,)$F uluNF(RT^V>KKSD{IT]M3feSU2rW&s5a.V_9[y{]S k_ SC,x@ {~$, !N#2v#\{L9 Ez"cB=^{F. q?kW6:2LebAb8}1/}' 1J[hok{wAt8.9\B]wu1psZoYMQnPxa28it:>4t|" QmV}asL(kiki/sound/generator_on.wav0000666000000000000000000007447407644706016015072 0ustar rootrootRIFF4yWAVEfmt "V"Vdatay|zwurpmkhfdb`^\[YXWVUTTSSSSTTUUVWXZ[]^`bdegikmoqsuwy{}~}{ywusqomljhfdca`_^]\[[ZZZZZ[[\]^_`bcefhjlnprsuwy{|~~|{zyxvutsrqpponmmlllkkkkkkkkllllmmmmnnnooooppqqrrsttuvwxxzz{|}~~|zxvtsqponmlkkkkkklllmnoopqrsstuuvvvwwvvvuttsrqpnmlkjiihhhhhiijkmnprtvxz|~|ywtrponlkkkkklmnoqrtuwy{|~~}{yvtrpnlkihhhhijkmprvy||wrmhd`\YVTSSSTVX\`diotz|uoic^YURONNOQTX\bipx|sjaXQIC>:65457;@FNV`juxk]QE:1(!$,5@LYgvʼ{jXH8*  &2@O^n~´saP?0!  "/?O_pû~sg\RG>6.(#"'-5>HS^jv}zvrnjfb]YTOJFB?===?BGMU]fpz}yuqmga[TMGA;74236:AJT`m{xrmifdcb`_][WTPLHEBABDIPYerǺ{l_TLGFFJPW_gov{|wqjc\XUTW]eqòs_L<0)'*1-"$1CZsrX@- ):PiǮvZB-#4Ib~ԻeJ2  !3Jdӽs\J<3/18DSfzweVJB>?CKWeuytssv|wohcabeks}¾ytrsw}{m_UMIIMU_m{´m]OD=;>EQ`r³{snmpwǴuaPB8215=IXi|Ǽ{wwzųyfVH=6349ALYhxÿž|qf^WQNMMOSY_fnv~~tjb[UQNLLMOQTY]bglrx~ɽvkbYRLFB><;;<>AEJPW_hr|{pf\RJB;50,)((),05AEJOU\cks{þ{yvusrrrstvwz||yvsqponnnoprux{~xqke_ZVRNKIHGGHJLPSX]ciov|{vroligedccccdfgikmpruwz}~|zxvutsrqpppppqrsuwx{}}{ywusrponnmmmmmnnoopqrsstuvwwxyyz{|}}~~}|zzyxwvuttssrqqppooooooppqrstuvwxy{||}~~~~}|{zzyyyxxxyyyyyyyyxxxwvuutttsssttuuvvwwwwvvutssqpponnnnnopqrtuwxyz{{{{{{{zzzzzzz{||}~~|{yxvtrqpoonoopqrtuvwwxxwwvutsrqppppqrstuwxxyyyxwutrpnljihggghijlmoqrtuvwwwwwvuutsrrrrrrstuvwxyzz{{zyxwutrpnmkjiiiijkmnprtuwxyzzzyxwutrponmlkkklmnoqrstuvvvuttrqonlkjihhhijklmoprsttuuttsrqpoonnnopqrtuwxyyyyxwurpmjgeb`_]]]]^_abdfhjlnopqstuwxy{|~}zvrnjea\YUSQOOOPQSVY\_cfjmptvy|~zuoic]WQLGC?<;:;=?CHMSY`gnu{{ung_XQJC=830-,,-/38>EMV_is|}rg[PE;1)! (0:DO[gr~wj]OB6*!-:IXhwsdUF8+  ,:IYjzŻ~m[I9) #0>M[jwui]QF;0' %.8BLWblv{upkfb^ZVRNJFB>:62.+)''(*.3:BKT_it~{rjc\VQMJHGFFGGHGGFEDCA@??@CFKQYajs|uj^SI@941025:@GNU\aehiihfdb`__`cflryuhYJ;-!)7GYk{zk^RH@<;=BIR\gpy~|uk_RE9.%! $-9I\pƻiQ:% 0DYnwdQ?/#)8Kbz˷fG+/Ieƾt\E0  $6Kc{oW@*  ):M`szoe\TPMMNRX^fnv~zpf[PE;2+%! !$)1:EQ^kx}tkd^YVUUX[`ejoruvuspkd]VOHC><<>CIR\gr}vnf`]\]agoxtdTD5($1CVkzk^UOMOU_jw|jWD2"  #6KbzxgYNFCDHP[gtudSC3&$2BUh|ȿzusrsvy||wpg^SI?5-'" #(09ER`o~þwne\SJA81*%" !#'-5>HS^jv|pcWJ>3) "+6AMZgtǽ}oaTG;0'!)1;EOZep{Źxk_SI?6.(##',29AJS]gr}ƽzqib[TOIEA><::::<>AEINSY_fmt{}{ywvutsrqpponmmlkjiihhhiijlnpsvz}xrlfa\XTQNLKKKKLNQSW[_diou{ztojfb^[YWVUUVXY\_cglqv|~zvroligfeeeegikorv{{xurpmkjihhhijkmoqsuxz|~|{yxwvvuuvvwxyz{|~}}||}}~~}|{zz{{|}}|zyxxyz|~~}|||}}xuqomlkllnpruwz|{uplhfdccdegjnquy}xpib[UQMKJJKNRW]dks{{sjbZSLGC@>>?BGLS[clvº|pdYND<4.*('(+07?IS_kxzl_RF;2)"%-6BN\k{¶qdWLA80)$! #(.5>HS_lyɿ~oaTH=4,'$#$(-3=?BGLSZ`gmrwz}~xi[M@4+%! !&,5@KWcnyzhTA..AVk»p^K8&,C]yʷ|l`YVX^gt|fN7# 4NjκoYE70.3=Nc{һaA% /LlվmU?/$ &2AUjȻmXD3&",9J\pſ~ulfb___adhlqux{~}{yvtqoljhedcbbdfhlqw}yoe\UPMMOSX_fnv}}wqmiggimt|ymcZURRV]fq}|l\M@60.18DTg|ǵzhXKB=<>ENZfssf[QIDCELVcsɺwh[QKGGKPXaku~xpic^\[]ahpz}vqmjhgfffeedcba_^]\\\^adiov}zskc[TNIDA@@BFKRZclwÿ|tld]VOJEB?>?ADHMT[ckt}º|pe[QHA;74234795322358;?DIOT[bipxû~zvroligecba`abcfimrw}}|{z{|}}zwspmjhfeddefhknrv{|zwvtssrrrsstuvxy{|~~~~~}|{zyyyyyzz{}~~|{yxwvvvwyz}}{zyxyz{}~}{yxwvwxy{~|xtqnmlmnqtx}{xusrrstwy||yvtsrrtvy|~zvromkjjkmoqtxz}|wrnieb_^]]^`cgkoty}|xrmgb]XTQNMMNPSX]cjqy}voha[UOKGDBABCFINTZaiqywlaVKB92,(%$%(,29BLWbnzľvi]QF;1)"%.8DQ_n~ķ}n_QD7-#'1L[ixyqh_WPIB=841/..03771,(''*.5=HT`n|~vpjeb_\ZXUSQNJGC@=;::+#2DYpǾwbM:+ !-KYiy~o_QC91,+.4=IWfuwlc\WUUX^emvwk`TJB<99=>BHOXblv|xtoje_ZTPLJHHIKNQV\bgntz~vme\TMGB><;;<;:;<>@BEGJNQUY]chnu|Ŀ}zwtqnlifda_^]\\^_beinsy}zwtrpoooprtx{~zvroligeddddegilnqtwz|}{ywutssrrqqpppppppqrstvxz|}{zxwvuuuvvxy{|~~}{zzzzz{|~~|zyxwvvvwxy{|~}|zxwvuuuvwxz|~}{xvtrqpoopqrtwy|~~{ywutsrrsuwy|~}zxvttttvwz|}{ywwvwxz|~zvrnjhfefhjnrw||xusqppqsvy|}zwtrqpqrtw{|wsoligfghjlorux{}~~~yupkgc`^\\]_aeimrw{}xsnhb\WSOLJJKMPTZ`gnu}|vohb\VQLHDBAABDHLRX_gpx|sjaXOHA;7310136;AHPYcnxxmcYOG?940-,,.27=DMV`kvĿ}rf[QHA:40.--/27KZk|weSB4)" %-9GXj|uj`YTRSV[bjrz{rh^UMGB@?BFMU^hr|{wutuw{xncYOF?:77:@GQ]iu~vngcaadiqysfXLA94249AKWdq~|skea_aemv¾{iXG7* %0>M]m}ytrqsw}vhZMA80+))-3BHOV^fox¾vme]UNHB>:8778:=AFKQW^elsz}uohb\WROKIGGFGHILORV[`flry~zvrnjfc`][YXXXY[^aeinsw||yurpmkihhijknpsvy}}zvspnlkjihgfedccbbbbcdfilptzzuqmifca``abdgkosw|{xurpnmllmnprtwz~~}}|||}}~~~}|{zyyxxxxyz|}~}|||||}}~~~~~}~~~|{zzzz{}~}|zxwvutttuvwy{~~|{yxxwwxyz{}~~|{zyxxyz{|~}{yxwwwwy{}~~~~{wtqnljjklorvz}zxvvvvxz|~}zxvuuuvxz}{wsqnmmmnprtwz}~zvrnkhfdddfhknrvz~{wsokgc`][ZYZ\^bfkpv|zupkfb^ZWTSQQRSUX\`ekqw}{tle^WQLHEBAABDHLRX_gpxyof]TLE@;75557;@ELT]fpz¿ti^SJA:40,++,04:AIR\fpz}tkbYQIB=8421247IVdtzl^SIB=<=AHPZeq|~wpjfcbbdgkpty~~yupkgda``aceilptwy{|{zxvsqnlkklnrw|{ri`YSOLMOSY_gow}wrlhfefimtz{qh_WRNMOSYajt}~uld]XVWZ`isqcVJA;99=DMWco|vme^YWWZ`hsþseXLC=99;@GP[fp{~yvtstw{}ume_ZVTSRSUXZ^adgjloqstvxz}~ytokgdb`^]\[[ZZZZZ[\^`cgkqw}~xrlfa\XTQNLJJJJLNQUZ_ekqxxqjd^YTOKHFDCCDEGJMQV[`flsyþ~vme^WPJEA><:::;>AEIOU\dlt}¾~wpic]WRMIFEDDEHKOTY_ekrx~ysnjgedccdegikmoqsuvxyz|~~|zyxxxz{|~{vsomkjiiijklmopqrstuvxz|~~}{zxwutrpomllkklmnprux{~}|{zzyyyz{|}~|zywvuuuuvwxxz{||}~~}}||||}~~}|{zzzz{}~|{zyxxxxyz{|~~~}|||||}~~~~~~}{ywuuttuvxz|~~{xusqpppqsvy}}{ywvvvwxz|~~}{yxxwxy{}|xurpnmnnprtwz}|yuqnkihgghilosw{}{xurolifca`__`adgkpuz{vqmhea^\ZXWWXY[]`cgkpu{~woib\VQNJHGGHJMQU[agov~~uld\UOIDA>==?AEIOU\dlt|{pf\SKC=8422359?EMU]fpyyrke_YSNJFDBAABDHLQW]dkry}yvtqomkigeca^\ZXWVUVWX[^bfkqv{}{ywvutsrrqonkieb^[WTRPOPRTX^dks{}wqlhecbaabcdeeeeedba`___acglrywmd]VQONORW]cjqx}~ytoida^^_bgmt|yndZSMKJMRZcnyyncYQLIIKQXakvvlbZTPPRX`jv~m^PD;546<G0BT5;M(,&Db7zYd/FgT6D Ӿ.aD*   ? x.   }8W{JEIS?,!FpDq>Q57&i Ftpw8}i]6>h@[2J11vSz,9u6lWM z~vKf-1~!n fKM47&7uk3eLe{MsB$ B3V%nYeʴK0;"JOտU5aA C X? LM{  A @%E$VIIs|PFo^:,n:wo3]\[8'F"pke PC*Q!O)l X{{zAPeG=FJ*V{8 ErCM^ #' $H-dI_wwL E3!,[dh=u^-rC`VZmA~ 0a/OsD<F3b_SzOYJa|h#Gb ]0 9R_tF_.=jC#%W^7+Rn,&oEOxp_@S;"] Pv]%Fn-8A8_ovZep@.t `7'@ܠ::h@Qz7 o 2t O*`Cc#kM0,ؾRʢ (fF1'#v_ \Xh t , &hX^ -kxYZA9n:)|ؘy(HБ9MX7 X/C>" 9 =Sk!0lUMG\: SFX\*4H_XQV#MuUFk~GZO3=JJs '-j1,, iӺ_ ev8{-&$]# P+k*rUAg LC\Vl y| DzZ.=ww}~=G t2eb:Y*>BKW9DXn^38 q\7^P) vh/td?m?b:qZ`G$P8hvFVGMI46!cUtq P\v?dDQTvech><h;LyHY, jPV<Ah5m_ &\SW?!l60^`wS)f9q,g: n"SztK5J.z6z++O x  ;>XC}g^wP#M_tD wZ}0u${p&h]BoqGOPVChDZ[d48f[!vABOLv~I=gJw<g ~1 Sa2P j#VO>8.MT8Y9L\# &du=84 WqklW,x1{9T IrU;,ZdqR[?CGSL_ t=8\+-HI#\} L7Vrg ge"* x?<sv# Fr;k%{f :emlkjT-.Un(!N 3n|-ChYoDs~ =9id>uH9|a4 Gn,z@(R&mp&;/iWq*#0M:ONRX;IZmmv) #G.8n0= ])KB9R:q0c c=sbqRhd]X_@DaXYa5L<PVm=a 1 MkqXzG]jwEe9.X6\ 18A > (e@EQK y{/eqMbG4'338i!-dq"CjC?335?t8## khoo(=(\h*١>  ?w W k> J=}hiaWfcf@uJU,]OPYq<T;= zTp6m#~<k`y&L+(0!?HVW FW !2(KQxWEZ4W'9iqV`Q8e(V'a-)#I6=2-2 ާ? [!Yq!J?/32( 9 g[_s!\_l]\UMwe8MO5}?%?O?(ӓJ}PDA[c hc (I=/CK"CKn^5-]a zR=pΰ8*:lyRJa f˷09`lMI , Ye nzB\G3t) */OU ,M x An+T Gzzê2 ъ'y56 [)53 #f"ß}< tX B;TҲt SiV,T'{ $ 4{y0U*K6W6pz6&NA~b@4b3cԳ8-q(+7L y]  Z=yu W $ ۅS9,<8o:%!! J,S $0bGR'BM+ܣFl7ֵJ'u9@ 7%pہ2eZ0~pe VA,&R&6ĝ)eS* -w" s$39Up z WN߽ӋK EE ]H)UZԽ&'=Lq:wR3+e!j [l _ )ٜb޶haQ\C`Y T| 7D"ۋ1F7#QX59y  '9oEV \&_OZ ߬^ H\"w4E])r' OBy3 +Yd0Rg]Ddw"*SCD,nMļ2#%w1 yRTpc$PW,)c}:1n_5#:t* w.pz L"` J .S"%g+8&4Qdbb M m   `Kp+=2$D( ~l"_S  4 Qbb.biUeCZ{Ow}])ZMtEFO yD ^6-=0WF-.,G2>0yC~7O<\I2T(2[4BM)-dOs#q(~@j8H c>^2+/ 13Li wua30F-Qf#, 2C/e4l_%.:9 fu^ TyOg1"*J \ +wXuK\"{~y]?(7=/B ^ P ܝߔmk=,wO9 0Ɠ0: TYTb' R جޱ +3/"&TDS[ 3|8Ht+Y@Dt]Vx]0z;LkF LJxu_H1TWun }Z8p_!_* /^$8O)( F B@R-,l0I,4^ A?scRD+$`2*!wc9VJWU̵Of d?R 8n yɫ%- <( R~8?$fx[x;pE1 0|ux$>+ "5:]mE." -4f5?ZJ^KIy8(w =bC BgJq{#:1f(jBʈn  M9//3$ w.&+,q%[pݮ||̹$-~͟F sR#%!"&((W *'rј'q,ɧ~& '>@-Y*p;55-;%2hI=0-.,(bpY k0].NWMiIcXZNUJ\Z& V8bx@ 0 l .   n?o L" !*yt  A$a R" G\ilJ&<>8Yjޗ_}]*&( >+%]E'#e h&= y#*i >mv 'B!_Dbz} ^ wL qVBAfmh>`(Kdm" \Cu5`Kda@s9>l&U-Im*~`QC bc6h:U`u:khb`*6$r- oQ~1OG;U+p1[t2/9G|{eW*Gv1`w9UDCb W7EOtJ]F i n)_m%hGm\6(sZ[jfs/Mj6^W^aP& l)`v[xb,.uHlZt%J?QOgyDJ}!e\)N#?hlWtR{K%02^EM.SD/t7w=a|Exl^T V8i3UF Z<=k,&v 2RX=x1snrue#}}Vk\$>E|E%e3>I(q[} |_h8O]4x;hmzzA8-0]%Oy.>e dB$*_$pV 2 R.4vu0B@. J(G^1-[m+>,ss.UQo@p!vd.|?j$KNr~Jr+y,M2:m:|_Qk*C|jO5zn5gxR=jjU Hw`E6sb5^YZR7(l)d#qg %.1+l%Z ENRpO64Z,AH6N[!Xq"LD:` g+jaDV<S7342,Vi1}MMPPCt*5#!@m;4'G53#22U}Oq\Q_Om`Sj4 |77jkOo(>X_S9RgGTJIN3x|B94'f{}X?)Z[!8:I8'Soc*=$yovqc}wt//.+$  = .:"+2#&9 ..#"&'+03'>$+2# (7*! 5*/1 $(&43 &88I0?fnuU bpl{wgZnuuhTqt~slpz{wo{o`d\`^UHWRTND@AA;94165499:0@-#*#!&(!   LISTFINFOICRD 2000-10-17IENGAriko ShimafaISFTSound Forge 4.0kiki/sound/menu_fade.wav0000666000000000000000000005033007644706020014307 0ustar rootrootRIFFPWAVEfmt +"VdataPoypeZPD:/$~wqke_[VRLHEC>;96410-,+)(&%$#""""""!"!!!!!!!!"""""#"""""#""""""""!!!!!  }zvsplhfb_[WURPLHD@=951-*&" ~ytpkfa[WRLHB=82-(" {vpjc]WOIC<61+$ }ung`ZSME?91*% |{zxwvttrrrqppppqpqprrrsuvvwyz|}} "(/5o8j8k;n 8 j * X 6 ^  < \ z   % * - . * & "    g J .  _ :  t K " | R ' \5xV4vX; v`L8#vgZI:,n]J8&x_F-~_=]5 f:Y+n= zHOU#\*h8 }O!oDtK$nO0o\L<-! *8FUeu5OjBd"Kw-^-dN Ma=#rffny,11$rOX =j , @ Q a m u {  ~ z s k c [ P E 9 / $      % 6 K c {  6 Z  J s  5 V v      d =  I J  o ! *}$kO*a(Sy9c&UU-j M9-,3Da@u7c8ybP@2)!&0=M^t-VD{-l4{XB2*%wobL*rJ%nCX)oI34T& =z  k  v 'A3X[>UIp{\4LZ@u 7^;g / c  ? $ n  b _ ^S;"gL2x^A(n]QMO_y1p6f8 xX># !:Wug%t=d* s . ? g Fwj>W+rU=&uX7u4 N * G M = 5R0a@kNhZF t_e\^"zhg}U ~ I   lGJ|t/vNXwOw2FW h  p  ` TQ[r3a3 z\G<9=MnJT OwZC0"#.?SjAqV$rs6Jc*Av* h N{aSWsuc>D@:>S x0Zu#qAWQ* 7   *>KSUSLA2" nS8!_ se}o*޿ޛހplsބޢ<߇?$7x*\C4.1:LdUEv[`|zhP > B k p,kJ0J/ ]O3(6{:Yu s b P>, 0S|,Z\(V&+Ym)qfn -TDw<@`  [ 7Y N!!!!!!~!/! e ul`RD5p?R-b gI'{M[-v^K<64:Mq3SD^U{quCbki3%bBu $u " .  ?20{ M6w9ko x.2' M   gI.,\VNޗ[fۼڄ_LN`چ iX܆4޷ߋkSD<:;@GRg&0=PjB .  ?irRh !"p#"$$%X%w%w%X%%$d$#W#""]! ,m#[0:;5* g <  ~L^3 us{ZW5=nZ2 @qW?m!"i=o& v X * p',[!Uh?TN3# W 5Tl~*Z"߇ڞٍ؏קsqҪҙҢZUԴՈtx؏ټJݦn$-V@/i'P~ my% />6 > !"#$;%%&$&#&%%I%$*$t#"!   ^|*{ ` 2e/iMT rccsB O ^^Ci$X)vSSv vc \.xI!!""$#-# #"|"'"!!>! x ;  M\}Wp ( J _kokf[M@2)! %1Gfߚyluۑ mtֱֻ6כؽzUNeܙZ6!10% .xIfPp !"]##W$$$i$$#"7"U!W >^?/o  / Tu5St%bhji~WhJݤޓ%x5 P+d91Orkx k|!>#$%&'(O(g(S((';'&"&% %$#l#"F"! !] ]!R  D k .U0}PH A]?T$rNXtZajP*5  Qx$7Y !!2"}""m""! F; %HW_jaޕ/ٽk6#1bҵ.ЊpzШp ҿҖӊԘMٵ>ݎ;0c|[=D 6 wh]!v#G%&( ))<*x*~*V**)(T('&%% $;#K"A! Z>Q@ i  _9e}!]<-/BfG@U0$1U{:%4hO jr& Lhsx]QQ`|4 9!!!!""!!$! N 00x  =5d<1߳܅ڞSӎ]Phϥ ΕF&,_ͻB{ն֞دbJd@DLnl 3{w!#K%&'(u))))Y)((6':&$%#"!BU   "$$#"""'/@X=eFZ#4o3=%t,-k> D(od +#$%&R''']'&&:&%%o%;% %$$j$$$#^#""/! Q # Pb,CF ޵h8(9k׿7՝ՊգX ڗc^ߋRGu ']  hk!"'!!"$%&^'''''C&O%$" B{ sHq8* J޲@Ch80Qՙ֏9 ^(ߖ 'llRaD-P ~s![$x&2()*6++++F+*,*)(N(''&%%'$#!   Yh 6 r,n;O aXgKVQrS0N4=R #Dk P '&2(DpC&%=b !"#$"%%%%@%$`#!' 2 : T]!{߆ܰ' LѷRH˭ERb56dY/+=dٓoyS]E" Dg!$&(F*a+,,,x,,+*))'&t%$"F!? X!%  zfWTlVfbN|uQXE1W's' U!"#T$]$$######$a$$ %W%%%%^%$#"n![ ^""`i/LAӫC& }+@СҺzޏb4BMG\ Ma'qz!$T&'()*,+m+V+*C*V)(&$#!_g +fl* S޳<ܺjޱ߱-mkG!n 2"%')******)+)(|(4(''b'&c&%$#:" FEJ3 X ku{ Qp[hLܓou٦ؐQFpץ=J/?l8ej< >st"$%g'(1)t)W)('r&$" !.4(  |=n,ujqGΌ΄γϮstFզn?qr<rb gQJ#1&(*+,n-----,+%+\*)('&a%/$"! 6:!K q zG!kReW ::")F xai1GvN !"#$%&b'''r'&N%#!}>G T Hs,cpөЎά˖dwfKtƐDŽɁw͡j֦Vޓj-U 09"U%' *+,^--u--R,X+ *(&>%#! .M^aV= E 7WM5Cp+rLMs,lVG)9z|t}~r "6d V#%'o(((W(''c'M'Q'l''''('v'&%$#Y!Kdh _4y"j߅PУϡT Lb#-C* G 6 #&(g*+&,R,,0+)8(R&7$!{"` (|߶ܺڍٖN;׼Aܞߐ'41 f#&T)'+l,.--m- -,+D+*>*))F(g'r&a%($"3!lsHg wa[f^-4jN(ۚMYڢ۵fFU| P 2^G" K{ "$p&(Y)?**N*i)(W&=$!,> @w(O pٴӭќBFȷI 8˼{ctҠ-vۺ7qe(!%(*,-z...._-i,3+)n('%4$",! D\ Dn^Q^>zQNsfci2Of=O& TI%!"#4$#$###>$$a%&&&'()>)(_(b'%4$ "# t2?ܽ($ҡgk˳?<ƫjxž$έlWcىܯSXSc w }"!&(+,-..i-D,*)/'+%# w.s ] K?%pfIy Pf.1pyUu} /g!#%F(*+F,N,,++*F**))))('&%4$y"k kb  B^sx/q `СЗҀvaNރ?@\ 9 B #%Z(i*+,,,*W)_'%"J & -w|߶R4TֶZDvЪг'#qՄ?a#a ] $m( +,=../.O.-,+*)x(Y'/&$#"` x9-i s R*9 8 Sv M4&[{e 3 | o ^" $%u')D***|*))(;&#!$# a4_HMׇNЭiollqy {31nt+ڇ9drSA mP! %_(+,C../.-`,*&)p'%#"> W^S3C* X4uu[|r1-ml}& |2`!i$&t(M)|)E)((s(((D))**)j)(',&F$!B3': eR&$|]boA_ɆȒƴəʄY9Yװ0Z/^Z v"y / B!u%(+,-.-},*#)'$$"P{ xY78"߯x܁dxzF;WޜT9WckM x P%3) ,-...K.--^,+*)3)[(c'D&$Z#!Sd  *CUh\asھFՃt|Ձחٯ'/yr>wI 6V1@7 #&(*+,k,+G*j(&a#V 2? >2" >ޔ Y 6fv9Dq,4QsOH 1" &4)+,a-\--, ,++.+*k*)\)(d'%$!ss 9UPFۓ׊ }>i.}.A̳͉ϾP:vݹSStFk E!$(*,R-_-,+)'.%f"hF c  hb<:|A`(՚NBpZ 3C,j5 vmV#(+-_/0 0/4/7.,+8*)'&O%#2"P *  IY#yF0Nު=/ڦك٭&ܓsߵ^luDo9 s%x "%U'\)*+,+I+*(%"ar U)G0-̯ȦƀƆǙБ8ڥwGk0K  =%(+- /l/.-e,*()a'%#!3b Pw|uLnC&p)Q yR  #&'!)))})t)))*** +5+(+*)x(&;$d!hYj l׬ϧ.X<"}Ar^&t،9FQ"} 6x"h&),3--3-;,*(&'$!C! nl}%gwPe޽S$+jo6Sz &"&P*M- ////@/n.C-.,H+r*)('e&$"  MB"۸2;Һ`bϿσЭ;,6Jݶux,@! +> #&(*+{,a,+*'f%s"/>`r |}zvsr|>Ry/>Ӛr)п҆I>]ڢ߁x['  #R(+./0//-,+x)'.&$"9!YDmH ?_Te7Nޮ]]g|!^ 8)4!J"##$%/'}()*++++)(%"l. !,H|F1e)JiZĶĂŴMEʑ+ =؁Lk-)A K!%)+--R-h,*N)o'g%A#!l}  z!(nw0']nnRO` "%( +,-..--,Z,++F+*]*)F(&V$! J vy;ؤͶɐȧȺ8$s%4Օ<S9TN AyA9 #&^)+, ,_+ *3(%:#X U2i P~>K0QUI߰NdC? 0!&* ./{0080A/.,=+)(]'&$" os mZ$>ݫڠj(@ձ|֭DA۠dTH2 f33 F "B%R'(N*(+}+I+~*(&$ U|q8 s*v;Bٔg͡˥˿A"b nٹۋqirQ@ p#U(g+e-9..h-`,+)'%#!sFprP lPP.u9z;BU }!X$p&(>)))(*[**+}+++4+=*(&:$4!{+ :- ڝRpd$ȖƩ.$Ōdƴwɦ2:ԙ!s*q-e* G"%([*7+J+*R)'%K# S4h [/q}qgY)]Z g!H "|#'*[-X/i000 /-,++-*?)((&$"  h0ݏٴ|/Эθ(5\<҅2?ڦZNo _ 's"8%H'(**K*>)'K%"6'u Dr\(_/IttՀՌզ֮٤ڃܛi[p \#(>,n.)/&/.-,R+) (R&$"! >qc 5caޭ&-*_*R[j ` "#$&e'()***Q*1)'X%"/nY  'Tv[]s!Q9D6ЪaPf۝5Kf27 t/p"v&(*3+ +O*7)'&#$")2 r0mF8H&MfYF3uo `O 3$O')+-i.(.`-,a,,+++*(&$! 0 4?זӧϵʱ{ȈT#\Fۢ߅wjO+W  5"%'( )('$&$!'_n`> AUa߄ݟݠ݊nߚ CVl # i%C)i,.%0/0/.-,#+)("'%#!yXI CyΏ8*Yٹ:!/_0B{ WL( H#%''''&%$9" ZHis d AH LZ\nc"O&k9P] ME"i&)z,.//m/.-,++&*(X'h%#U 65 Go٪Ֆu3ί͙ͭprբ5#1^ +Cj"c!L#$%&&%?$-"   op%nQ]ۿ*.ް8.I 0Qc!%$)+(----C,+)(A&$" & @ 9@;K@ڥXhِڬ! 7RP ?wT!"$%&'&(V((p'K&$"@0 !m7'1N֜ӏ?f<њsԢJO%,bQ p"%''''&%F$" y'' oR;gR $:Y=~ ~F#i&)+U,,,V,,,+7+Z*/)'%Q# V( 7qSn3҂Ϸ͒ˀ˝,+͖qolز/~_9zN( 6 "#^$D$#Z" O x.|r2 #^,.!]8%NZ3G Y $(*,./.W.i-,*)3(&$" 3  2'{ٹQ~>ր[ٗ0!c-D: Y'/se !##j$$R$#+" h9 n 'a-W؈׿O=ֈ16ؑBB݋7/" p@#&/(O)))=)`(/'%#!.$ %Ms8) x3?JE* ;f^|8 dg,"$%&'j((((('&r%#p!yp YgN߂<>Հp.g΍rmqzoܢ.x4  OC!"#O##g"Q!Y  v*X2'IEimjm t z$'&*,-..--o,+*5)'%H# q "4Lݢڐҍn{E/ߝB \"  C-19 !1! } ; >P<5q:d ޏ/(p 9jb>x} ` ["K%'B*+N,@,+*)(b&$"s #d xovz ޱ܈^0Z޴a0KI1Trw ]t{S !"{####&#G"!j }je~+ܗ;kaӣmdսqzxZt!8\+  V`"#r$$$c$#B" /33 sC2$lq0e@iYtjCW) Y!1$x&\()*++*>*e)M(&N%^#!KJ  ^N2]z޸ڦvНϐҤӤכڎ6j6{(A c 4l{]+K kx:# 4b<4uR{{cJyC y  #&)D+ -- .-,[+*(&$(": >;]ؼ^3eߵE/ ~ r>I'pY=Q<OyY`0 PO8[޸)X7ڪxۚJ"}d# + R#%=''*('>'%&$" r:T?  9  g(Jznw^Z7F}a3C ^ !"#%%}%%s$#"4!Vx( l)X%7ې"LFҖw|խF NID ^+WZ/`A7j v SvS

do%|p7  _<2md JuY R"i%'*7++U+*i)'%#j!Z EO(ii/:Z$ޅ23!I}5 $NZ x|y _@ <Fص״ <qBrMPE Q$ !"#"F".!Hlp[ 4 `1n!j"mu?Cn 3\pQ!3$&t'F(W('&Z%#8"h sTt "<5GZ %ԢxӵVVռ~؞1P tw # 3=K]7&Y ` L*l^o%f r# N3pag  6G_]"9%'*+ --a,+h)~'Q%"f w HhmH39_,ۄ>Rڻ|ۓCG[D*~> v\R-gE  kiki/sound/menu_item.wav0000666000000000000000000001365407644706020014356 0ustar rootrootRIFFWAVEfmt "V"Vdatapwe`YXSXOz($0/=8ι!+1?Ⱦd ,&Wʻ& -"y̱ );Ah?TTXY[\`ponpoqps^U][^]_^dmkllmnonYX]\^^`_gmkllnmpiV\]^^_``jlkmlnmqcW^]__``cmlllllklcaddeeffghhhhhhihffgggghhhiiiiiijihhhiiiiijjjjkkkkjijjjjkkklllllmmmkklllllmmnnnnoooomnnooooopppppppqqqqqqqrrrrrrrssssssssttttttuuuuuuuvvvvvvvwwwwwwwxxxxxxxxyyyyyyyzzzzzzz{{{{{{{||||||||}}}}}}}}~~~~~~~OJYT]YƸz?9LGo?9NG76HFh%?9NFֽ47HGc0 @8OEռӐ'Zbkowskxv{ypwyz{|yryx{yqvxxyzypxvyxotwwxyzrzy{{~z{||||~~~~~}{||||}~}~~~~{{{{|{}}}}}~|z{{{{|}}}}}}zz{z{{|}|||}{yzzzz{||||||yyzzzz{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwxwxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutuuuuuuuuttutttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuutuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~inst<kiki/sound/menu_select.wav0000666000000000000000000000461207645054636014703 0ustar rootrootRIFF WAVEfmt "V"Vdata] ~~~}}}|{zyxvvutsqpplihc`[XTPKEB=930,)'# "#'(*08DTf}пpS5  4J\eecfuϯ}s`B( <\}өstzufL-BnȢzYD:71( =jֵiPA=<;7(Ar־y^MC>70,-5JhĻv^HA@EMQSZluj`[YY]cjt~{tmhecccipv|{uqnpqqrtx|~}|zxxy{}~~~{yyyyxxxxz||}~~}{{{{zyxx{{}~~~~}}}}}}||}~~~~~}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}|zytqljhfffijtxebmx}~sdi|me}}niltni~vnn}usvyx||{{~|}}~~~~~~}}||zyxvvsrpljda]XQLFA;751-++**+,0137;FVnͿdC),E]jfi~Ţ{eE( !-Muغtzva=%#/\ԻaJB<1)*AuhNFFC2,LÜvZMD<9;RsvYJKTX\mvia^ahq}ypjihiqz~{tqrstv|~}|yy{}~~}zzzyyy|}~~}|||{zy|}~~}}}}}}}~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~}{ytpljjjmymev}}km}qnqktn{xp|vvzz~{}}~~~~~~~~~}{{yxutqlfb[TMFB=:54579;>DSlȽIJf>++2PikqҲ~rM--=k̜yzlD07n̺VJA47bʵ{XMK:BƽdRHBJnhQS\ardbitypkkpz~vstuz~}zz}~~~{{zyz}~||{z{}~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~|vrmlltiu{lmzmxts}zzz|~}~~~~~~~|{yxtqjc[RJD@=<>BFSrĵpA4;^nv|^8;fƞvtF:lľTI;:;:9---/4<@@DIMRX^cinsy}{rmlkkkkkkkllllkkkkllmnpsx~¿zuqomlkjihgfeddddddccbaa``_^^]\\[[[ZZ[[]_begjlnpqqqpponnnnnoprsuvwxyyyyyxxxwvutsqpnmlkjhgfdcba`_^\[YVTQNLJIHHGFFEEEDDDDDDDCCB@?>=====>>>?>><:85432222222233444556655556679;>ADHLQU[aglry~}|{zyxwwvvuuttsssttuvxz}~|zxvtroligdb`^\ZXVTRQONLKJIHHHGGFEDDEHNU]ekqv{}yuoh^TLGEEEEEEFFGHIIJJKLLMMMNNOPQSTUVWWXYYZZ[\]^_`abcefgijklmmnnoppqstvxy{~~|xuqnjfca___``abbcdefgghijjklmnopqrvwxz{|}~}{wsokifc`^\[YXWVUTSRQQPPPOOONNMLKJJJJJJJJJJJKKKLLMNNOPPQRSTVXZ\^acfhikmnpqrtvx{~yuqou}ysle`][YVTRPMJGDA?<975$#!!$+/..15=<;:98765444444455568:=@DGJMPRUX]cku}zxurokgb_][YVTRPONMMLLLKKJIGEB?=<;::9999::::986557:=AGMRUX[^acfhjkmoqstvwyz|}~~ysnkgd_YQIB<8:?EKPUY[^`behlpuy}|yurmiea^[YWTRNJC;3-($  !(/5:=@CEGHJKLMNOOPQRTUVXYZ[]^_abccddeefgghikklmnoqrsuvxz|~vg^YVUTTSROMKIIIJKLMNOPQSTVWYZ[]_behlptx|~yuplhda_^\ZXVTROMKHFC@=:7421/.,,+*)((()*,./1358;=?ACEHJLNPRTVZ_foyõsbvĴ|yvroljhgffeddcbbbaaaaa```_^\XRKFFIMQUZ_dhknquy~Į{urstx||umfa]XTQNLJGEA>:61+&! #-9EP[fpx~vj^SH>60,*)(()*+,,-.02358:<>@CDFHJLNOQSUWZ\^acfhknrux|q[I?942369=;976666666555432100.-,+**)))))*******+-.013579;=?@ABDFHJLNQTX[aisþ|xuqmhb\UME>93.)%" !$(-3:?DGKOSX]behjloqsuwz|¿~xqiaZTMHD?;8655420.,*('&%$$%%&&&%%%&&&&()*,-/13579;=@BDGILOSV[`gox}ytplgb]XSNJFC?<:741.+)('&&%$#"!  #',17@BDGJMQUY\`elsy}|wrnjgeb`\XTQNKIGEDBA?=;98641/-,,,,,--.01247;@GOXdq|}{yvsqppqw}obYTRPPPPPPQRSUW[ajt~~|{zxwusqnkigeca^ZUPID@=<:99877766655544444332210/-,++***++++***))())*++,-/01234678:;<>?@BCDEGHJKLMOPRSUVWYZ[\]^`behkosy»{aPKMT]ekqw||xtoh`XQLHECA?=;:98766543332210/...--,,,,,--./0123568:=?BEHLORUX[_bdhkpw~|yusnic\SJD=5.)%" #(.49?ENXclsy}zupkfca_\ZYXVTROLHC?,'""&$"##$'+06>FNV]emty|}~~{wrkbVF4$(>Tdmsw{{kWE6,$ "$&()+-.0369=AEINQUX\_bfiknqsvy|~{yxwwvvvvwxyz|}~|vqmhda^][ZXWUSRQPNLKIGEB?;8521/-+)('&%%%%%%%%&&'()*+,-.//0113469=AEINRVY[^`behkotx|¼~|{ywutsrqponljigedba_^\[[[\^`cfimsy}yvrnjgdb`^[YVSPNKIHGEDB@=;8755568;>ADGIKMNPRSUX[_cgkosw||xtpje`[WUSQPNMKIGECA>:5/*&#!"%(+.0247:=@BCEFHIKMPRTVXZ[]_acfhijklmnoqsuwz~|wqnljiihhhhhggggggfedb`^]\\\[[[[[[\\]]^_`behknpsvy}zvroljhec`]YVROLIFC@=:851-(##)2Q}^Xapna7]}.'-/D`W&ENHg+P+IX[~{!1ySqD/~{DW!S(y-b/>R%~! EP,#?U>!?)\:$>}"le\,p8B)4i+q9a dDM*~@ux -/S?vI<b6~m$Tv\`E8tG$+eC~g1[5avq6?yl6 -]PJ+@4foQM )-3@4 XW?X<BLuX!G8 69]<2 $Q ,c;Ni vBA K]mxCmTtNP:A=xcS)xe 6F=x2 L&`2e%:Z%U}d !D : }OzPaP |8hfE=RnW^#f/6XmDjO2Y GL?27<V+e'f :*sFup'fp `khqt\eI>EE._2$fU1K,C ~.ke>GS<U%Z NZw[wMe--j;Rx}2_&Pt8k]YKD'  \MC7 I[A|kOob_?߻$ QT t$.:%vQ M{ W{YjB \-fodDq&8M0g =4 =`FNhVNZ~.8AQ% <m`u?h##%Q )ib 7UQ.A-s56;S]wQ4%/i W|]f7*\oG^fmVRG'WY "'eYXD{YQ:]sSMI AKz{q%o=vFp"Z'aVv  ChwLU|6r[{",Oey>js_aE15; j.6"8#B.J, J]L![o/:a)}  )Xa9A^:FD Z}|u {w k U J'JB4!f 7U]rxe/ vY>)J|s0k iIC^.y2I^suV2? Y@'mK]m}0`$plkWuG/U-]VH'SoW@28x}(m<3y5&X7 x0ZL'0YLy\8 @" ,]E0"--z!6' 1{; N4j_O 3-J]BQ\ap @Vpzd x}et0kZUd F j{t"G G\y\)L@]M5M%Imo'GH^ &{L[cOjV3:)?qeZ>m4D60j w RKtM-Cd;tamT wL}U aY ]7q )V }(Ru> F li; s ` ReHvF8O}Z9' & \ B` Ou Pj0>>Feh _iYI &ogX Q:yCA *vz;=}gd>~ &'Woehn ;n\ y H-Dfv>Uq}0 ٿ/l0($0{r:c7 o"$LWq wV"f,L}%H}c :wN (Q .e(Uq?D3TgFADK]H-#d 3 , /cjTo/Q ~ܼ xf10utw S C' Q5IGV s fyUJ `E HW@Va^ 5`:9 ; ;X < 3 <#$iW WYf`"H X[ k e]  +^ &p X#F< !L]*R d#pE;D pBml^ A>sV 5`   o r(kx R | 8'i y1$n 8^+ r\ w@Wv bm<U 8d} *^ 9OkI  [=^- 6_(!  k H7 M5 ! #k y60R(Y]*,1#XU; 0 ]gF"w-M?k h 1! H< %Bݓ@SV,[] | ,I _j-qWk;& T1T]i87 c[ {Fqqa );;/ 3 nEM1h#x1q.8_aL 6aJ#hE |Z DE8:AH=|zI3 Q5 < !z .!V~PG   !# c5s& (KL* *^ Fr 7? Y 3y~tDT ,-! u w O~!xKmhhbs$E+3 Eu ` Z:\fI $Kr-"z Fy- "(J `~%[=>hL|_E-@ 0-`|'3&BY|SD<@XPPmh5_ "~F   q] Z w iz:?n&DVT0 "YHw\p ']F\ T$ޔ/ }Ny*B>@0k! 7+ c pN> ({j$,ڪ 6ed*m:2'n6!$]Ҟ/ o ?8 $Y/ & f, #!nq"  Ɛ*G} K  Յu-4 xt9R_ -%kT#a8e%" !=~Y&Gpv b@/B̳ICT| k![B]m,q9 R%   w4zt3:*0 "Rz\* $DB0r!5U&@DG ܫ'du[D$npI:1!t!zi sxh&vd v)1R E!%< `6 i 'Dk v S#$nVd3 Hт!.{ ^)3F$4 6L#C#q |$/8Egyn&7  VoH%  ab V%) = 2" ֶ9?RHq*  v  Z=#:KQ 0z &ٙb!hGSӏ *D. 5n;8*<ܔ*[> f-GB({Q [T /Pm R|ei+eE Q׻Nh H0%qAkc"Z  ޳LԱ/ D!8 ct dRc] Vdt~&:h. 7$t!v7W;q&H|D] CXl7_  A,U#v-I/fhL@ = Vp6 '-.#"5+j'1*-2 *@h;8 O7+c!J#S B]ݫ">!]LWUz_D[B܌, 7gZ0\ & 2 C u bQo  ./CA wo"  *H 1.WL 4p@ m&}qC r" 5,Bn`] `+BCY$ 0 & &~ %$.!x+[HjG {IRj'B& E@#R6M3_. 2:($f@Q0  \)_β }dGRJ Q) u7 >#؇-PS$su! ;D\50 kpq`۴9cH N  Bt i* i Ғ3l ؛%d,,b g*l ~- -dh B  j|"'5 r=VyC6=0(5 $M&s:"m B<` A=3=(W܎0=O/*HSO -S[ k NCJ 1_+~QfHF&N]rw8 !ރ!IRi 6l~ rN[+/U;'}  - 4 3n6 4'.` `:e dm5%W<~.w)1)0Q~xv)"uiH kH*8x7K90}l ,}Y5q R d5*}b} zHos N] /kxԇ"*O+:sx 6<rD!nx% h )9.S5~~7*D r'{"n*v/(FUnI3d> l.*(aWQ7" p Maj0 IV"Bk E\AZjTfP d o -4=E7:0 (e) 8l?L A !v{# :fMYy// Uj sؙ* -PzyHA  Riٺ L0/VJLc k  <&4j- &7(AY#. CQХZz `  J l y*d; ,kHí%>\7,jBj(7U]V  6$h/.21߯h wD>%>,)3L 5۵pQ y \, "'d һ+-/٤ :(7j!  sPMO&&5P#Q"+ l< 4 T .<0H"yԻIݰ+a&a۰&yĀeoKDhG5eJ$y [lM.'%Uݸ?>f$%k4 T +#z#  _4oO& 0w Iے^y/ ;5!&2u)d*2 5t.Ln!7MIb J/Kѓ`3=`& jԪ# 0) / W ui VӬ%`7f (S\$%= %Da W3G`_"Mjt}-*Y O@WGX(kn'%IE% r!nm&Ez{~"yy/Astu\j$-&8% $zt)#J3 5p((ϊI(c R iZ&''E@ "(x2!I]ld5G%-Z6 Q 5:j- ށGKU V0RcP .%@8Z35 Dqy (&9I>' 1KU$WNT uj5  ,B5= K/Kͭ ,DqӴ+ɡ$4,u#.E6 0a5 >6:'#Q34u& ڐ A'g73u9)dD/ S b]` v&tI/.] !b#,rJ 1O ߙj(VyJz0/<5(#$:qÓ2e+%K 42N fZ Pi. WC<8^`%c_ g gx<'Bg>70- `i0 M! ÅL>#D ʨBS cI<U!H [4-1 -| d G *2$*t@BEt |(5N&y 1Լ [ܓؗ* 0)p#("nj"GhsE&Ug2i-~H.r,_ `. ~$  .7 ,_4/i7ܦ&7i$եz;`er$h" #3iO'%! 6w\Zg  F`e5e l$)#)jI:&Q goI1,TT =Q+OQ,<MK!%9{ ӍUo])b2wYR c-S!L  #|2  L48+ E~ 7 L"ߢ 6 |q e'7 4\  | at Va Gvk=y _z. (Ғ% 7`O+* 5(q = H!e x &12d b=w/!_ ن33tY)K A64aQ?):  sv\M,`Z ю1o5}% V'T؎}$) 2uGo\p*ţ!A |fO0]sb XF2 ׫!ߔ0MB %0ǭڤsn #[Ҫ4VҠ &WN  Y> ?'ѥ C$0C}H;&Mg0> D E*_ئ@$)-:44,(=6tAR,:}FE% :4K>JȒO>/ MO1]!75KOK+$ pIcKC+C]O[m+d0.'d91 ٲlH^y$&" n7K_ӥ.RArP1 #&цH);>+T3*'٢-ֳ ,'(31=mn)ZTD8rU7f@B*, ,PW=w2$E 'iL0& O w0<,m Уg4˻x7 G0Ғ:H(j  - l>[c" x^_$x !U/N \U(m%A+5? Q4Z{nA;}xiϸ8 -=g͌8kԲ#Yb!=HHY2s nG `g /(.  )&|u aO_+&pOް  W>q O u)}$ g2< ^lW~ np t̔,lك   62I Rc-OW   gCQ;> j w) J0y wvIN| ~}` :+({\k)`8;CH3 F#{nU  ot2 *i O7G%G$->dՒ 7'K&9Q9CU $E!rByH(s5Ǩ=ж)b" _p g; .;7C+) G*],7 3&& P} !!3i6& "VCZ5;ʹ4D3X5bR!FT;rS4% ^S)y&3>x/Ex%3Tӻ>6 NxC#޼)C RG(X=oS $L%#=U+e:Q n%TG4N#Jh"- K.<` {d4S T)y xn(? m$NKuCZL55= -˂7!!k$o:^zώvJ$ U?g%9 B#0өX%WSvُN%"}9 ]ӑ" 44 BسE9..%b8 TAH5"tN&% A4=#88%tB#Bi5w@5$՛Sf*7>B(72 ( k u ΐ$$+&(QH;{Q7j '_#ٜD 7k#h֩XI a40> 4R< qf>-' aC2;H5) 71?*0$ %($~ Z_0?$! !Z @{ M@4iL )b~$KOW ]N y`r<^*.!^I V M׶qUȣ4|׀74![ QuP 7R VHu m~ Ĭm2jK4X I~8Caz2Q[`ڦ9Mb(7Fj ei$>7 qQ8?)o-=& 8F/-< m.)S&4VU=gL.hV Xy$a3+>O-%8 oS̭,7R*|m.n{ !몖Ӏ .6@Z =(U,2^)d݅}ۆV/H QxQ\9"' qYq"E E%4Q"9" fk Yٔ"(V+='  4. g.ך0#Ӧ(۟/ rUܡ 2/X/V0L ui [a?($7f"E ?Q) qO CJsߋI`/PȌ #;"{U"b\%s! &+8+Y6>l; Cc ^KH2,x4ި,*y bG4O }V !ȏa pv+U#  CM/ tEܨ/^ 3ƠT2r*fĔע:+*3X842b jIGN 4}<c!j^[Q^ _ՀԞ $ 3QߏB{60r!P6q@ YCm8L"pԉe ,1V)  `/փB&2F+ ?_l=) /|ې !_1> $ KA"30jhpۻ%J)y&"K " W[6m'zߦұ gH ?&y[) {l<a y!V[E#N$ =F k ^TKx.J12ܐiC )@ m 6j 1cB-  s;9 :ڝ d e!4w +L/WMT$aS79Mq"se O tRD3$ E42 2a6~O:*cG@yo+uZ Iri{H/ ER-%W!HyN*<Td7[Ė=*d!){$F\)4=o B⺎> $:nE̥$#)6 H%P8c:*n'n pHyT7*-ȱ$30YC--'-^bj KnCu BYff'r!Zx  t !<*MP5h * 5) Z\}%~Z iJDx 0Q J; p{$s$. l $U!3#&K.6:#N3'*MqȇfQ:L/; Qg!x-,K4Z TВ #ky:D -7j "$E.X 6EUP "0h]ބ@M(b2 I|CL 3A[: 2~ٝh\ d $Y HS"% S'EϕAA2ف X# iw#d"A7) 6A"j2PM1\ p5u:3Cf i d $ O8dZ Ԝ.Җ &U |c""-Jl5jn b! U:b :R4# ǷPZ@.)Hx%M9zճ/L<P&(!V=P(J/*$$ 2@5 #15.n |<S[w );>41~"#}\k=0! i02K F g!`l}HN-*-` r 92!x(-S%((hU  wŴ"jt,y T >T57e^ /7T4Iq\ |&"#Q &D4>+ . n%w׍4:j#2+; 3;[I k}=$!? N'4mKip$D3 &XS2D'\@@s|a~~2 v y\ =R%2xcַ.s_1 3 GT$Ss֬L-?&B ,A['!TLK-wٴ'od=,f 7qrV ?! U( 3! 쁴OjtV - j<=*/н/u *E$ ];:y#$4cV13 V5|fv 0%D "ӧ(}Lp`@ B V߈-gX&S[ WL5 2 %P=4/H09#*z! f5\#C)d < 1q P"1K"- > 4 S2j Xփ$5!]ۦ(C8?1`3) |+P {(J %` \6 >du (G\)[j&S k{U Y )nމ * " .<&]Wt cy\E Q W0!(k g:_@l /i'AV eBdZ  = f U+p !:}n;6 Tf fJ}O+  Q#S)SMf, S) ;HUr#,D <.F-r ?mwU$W*{( YJK\ ~( i$]&TL!|#6' Q0XG0MH)5w B4  gj::] ]&  S zF4-O e0 x1!,< o e(~@  Hpb~ l7TCP#  P,i }C P) : ~ޕ2E "e yu N N nZ%q'?' Jp,}><1gIz ` P qwE$;R~ } b < c #$ w d &f{ jأ)Ee Z _ b y #ia  Qe/L g\^=  u Xg:Vs%6 ;m<T%6{ [n0~ _"DD{$CQ-b&8 Xf Wbg{p5ege!GI+m -jeFzt<:<8r _56K #]@v& U:w Sݙ'Qh  ^TK$k [! SH :Q  h6Nz' G ߯f 3 r Y GPl(cp6bB+0 ` u,%%nCH(<jQ lj R0;P Kr= WycX_Lj". w n]47 5h p^F hVSTk,cK "$v yx8 :L 3&%}fZqb WGD`0*X !K jNFHE#b I KNҞ(y l+ng ' J 0j4 3SK|  bED  o)d" dZur`Z#z >B1x>p;30e . s_VvIlS)F IE  D4  v\*V 4KMC*G+}7YV1" S~ B PH)z vl *  }nbxlz @ | NAH tG E Em8Zk N7 7W xoj1\<W &j9Gm hzp B 9[ W R ) +^t _ +XJ -d +43 c 6 x$ $!p [E; #gW z NS p IH5% h3Eb:ytN^ _}&e} (I\u6) "{\`B|. C2 eP# M 0.-;Gs&ziP-*kL~9 q D* ' " Ss~ ++?0 ~8ZgS * w Eu nL1E+T4y Xfzqgs=O CDd* 'Ib[l 1-rv) IS bUCr>~GY(Y/( Q?3n CY:E _8f; /ANc~|Yf .P+''5 RgW}9  L :p$* WQkInTur; & UXs! 1 kSM!SUp 2|^z_z h X5J3p mfA?; t@P> 8IR45VG C C3ӹ$H5 [my ? :~uhG[ocNSsN d >5sGE6^ 9 s4 )' D:`]|QF2Yr  I|V| &f U Y7QPpfm Qu ^ 0r ~~kn}= .\LP&3  fN BqvjB a 4?l&pFO9ACUq>#)b0^.rkMfH'PR")f."f\)cp#>gU% xU }5 Y>rj U&G ^QB(#]L8N ]?lO C% "rBI`wJ u $i7i1 ! y[GU(+{,` h5JdVQH 1DF|sbA0[u0VTAQ<Vzxu['`0 L)d[ #SF(xi`;H!FuBss])Dwl^% ea~ ?qg$/_v?yF #lb5g C^H- .{]K)z]"K7"51FLuX1Ln~iV0'K<1QwI>0F)hm0bpLbE4`P wETIbV!D ': 9Ve6_\~^U4S@W$x-~\+~3^Z&U+QU'Q:g]@Q{U2@% 2XV M)Cy  w);E.r!gs/ \djf H!iHZ?X)H1#L j+-GT8_CLRepg@0ztlu'$uOd 5DK # yg- 7%(A. 9%Z$Z%I=N:'%   LISTFINFOICRD 2000-08-21IENGAriko ShimafaISFTSound Forge 4.0kiki/sound/switch_on.wav0000666000000000000000000010407407644706022014370 0ustar rootrootRIFF4WAVEfmt "V"Vdata~}~|{|}|zz{{{zzz{{zzz{{{{{{{|||||~~}}}~~~~~~~~}}}~}|||||zz{{{yxyzywvxxxuuvvvsstttqqrrroopqqnmoppmmnoomnoooooppqrrrrstuttuwwwwwyyyyy{|{{|~~}}~~}|{|}|zz{{{zyzzzzzz{{|||||~~~~~}~~~{z|||yyzzzxxyyyxxyyyzzzzz|||||~~~~~{z{zzvvvvvrqrrrmmnnnjikkkggiiiggikkjjlooooqtsttuxxxxyzz{|{{|}~}|}~}~}~}~}~~~~~~~}||}}yxxyzvuuvwtsstussrstttstuvwvwwz{z{{~}}zy|{ywwyxwvvxwwwxyxxz{{{|~}|}}|xwxxwrrttrmmppnijmmkfgjjifgjjihikkklmnnoqrrrsvwwvx{{zz|~~}}~|~~~{xz{{wtvwwspsstomppqnlnoonmnopqqqrrvwvvw}}}}|xvyyysqtuupnqrrpopqrrrrrsvwvvw|~||}~ywzzzspsttnjmnoifijkfcfgiecefhhfghjllllnqrqqsvxwwwz||{{~~~}~}~~}}~|yz|{yvvyxvrrutroorqolmpomlmonmnpqqpsuuuuz}{{|}xuwwwqoppqlkkkljiijkjkjklopopquwvwx~}{}{{usuttnlnnnhfiiicaeffa`deecdfhghhjlkmnoppsttuuxzy{{}~~}~|{z}|zxx|zxxx{ywxy{ywz{|{z{|}}|}}~~~~~~~~}}}~|{{{|zyxyzxvuvxusrsusqopsrpnorsrpqsvwuvx}|}~}z~}|tquutljnnlgehigddffeegggfilklkqtsss{||}|x||zrpttrjimmkcdhhe^aeeb^bedb`fggeejkjijnnnnpsrrsxyxxy~~zz||{uvxxwqruutopssroprrqqsttsuxwwwz|{zz}~}}}~}|}}}{z{|{yxyzzxxyzzz{{{{~}x|||totttkgklldaeffa`bcccccddfhgghmpmnox|xxx~y}~~upstunhklnhadeif_`bffa`bfhdbdhjgegikkijkmononruuuty~~}{{z|ztsv{uonqvpjilrmhgjomjhjmnomnnrtssrx|zyw~|}{~{x{}}yxy{|zzz{}~}~~ztzzypkppogchhga^bbb``baacedddikijjqurst}~|w{yyqmqpohdihgb`ecbabecabdfdbdfgdcfhhffikjijmonnptvtuw}|{x}|yspxwrmjsrmgeoniefmlggimlhjmnmlorqppuyvvv~}}}|~{uxy{snrttolpqpnnqqoquvvsx~z~tvx|tilnqjacfid]_bdcaacdfhghgkpooms{yxwxqwxwlfllka_ddc\^ba`\bcb`_efecbhhgffiijjkllmmqrpqrxzwxy|w{{|sosttlimnnhfjjjhhjjjijkkkkkmmmnopppsvuuuz~||{zuyzzrlpqrkeikljghjkmlllnuurst}}~~trxxujgmmlc_eefa_bcddccdeiiggjppmnq{|vw{|~slqqpg`def`Z\^aa][]bfc]_fkibckpmfhmqpklnqsqqquxxwvz{{}~yrsuzrkknunhfiqolgippoijopqlknprpnosvutsx||zw}||t{tkquvldilnheghiiihhjmpllnsytsv~~x~vmsxxmdjooe^cfgc`bcddeeddgjihhnrqpow}{{yz}|}tkppog_ffd_[bc_``ee`cfjjchlongmqqojptsqpuyvuvz}yz|}~~{v{{ysnvvsnlttomnuumnrxvnpvwunqxwupt{ywvz~{z{~w|~zouvzqhnopjgkljhjllihmnnijrsrmp{|zt{{~~ruvzthlmog`effbbdddbfgfedklkihrsqoq}|zx}|wnrrsjcghib`dddchigfgmmkklppnnoqqqrrutuvx{yz{}}~~{}}}zwyyyxvvvwyywww{|zyy~~{z{~~{{{}}}~~{z~~xy|}|x{}}|z~~}~~}|}}}{xzyzxtvuvtpqrsrnnopromopsroqrxzvwx~{pvwypdjlnf]cefdabcegfcdgjjefjopijnvyqrv~|ortyqcfiqkbbdmnkggpsskkquvnlouzqoqxwtv}}{~|{yus{|uqnx{tqpx}yvtz}zw{}~{zz|~}|{}}|}{|~~~{{zwzyxupusqojoolljnnjnqrspw~|~{|~zrvxyqjmnojfhghhhhefjnlijqyvut|msxxm^cjkaW]cd`^`abbddccfjiffkpnljrywus}}ntxwobjomhcknjjlrsmotvtnqxxvnr|zxqw~w~~ustzsgfipk__bljbcfnronnuzzxwzz{~ystwyuporttqlmpsqihlooidhlqmgjoyzsuxwovvvkbikkc^cddcccccegfffkolllu}zyy|ueimncTY^_YRUXY\\[[\adbbchljijpvtrsy}}|}}}wjkmni`beegkjhhnwtppw{xx}~}}x}sckpqcRZacWOW\\]cdccjwuqpy~}yy}~{qotvvqnsstssvvsvxzxrtxywopuvtmpvvtrz~|z}~uqtywjhkomedgigfghgejkkihpqpmny{yv{sswxn[\bd[MRWWTSXZWW\cc^`inmhluvtsy~|}ov}}tbekpi`dgmnomnux|xw||~~xkrunfU\b]UIPXUTSW]\_dfkjpyx}|}~{}|yysrx~{roywt}{}|y}zvriooni_elnichqssvv}}{|yxunpoqmfgfjhccaefgedilpoqtynnsumXZbc[PV[ZYZ\]^_dcdgjqnmpv{xx~~lqwzs`gmmienolntxwtx|}rorwq\W^eaKHPXWOQUX]```bjtspq|{~|{~|zw|yc`injQP[a_TX]_gnmklz~xflqskWZadcVUZ\ca\]`iqlkkv|{mkprl]^bc`__^__a``abgfefktroov|yy}wy{zvihlmldeghmsronw{zru{|n[cjl]HPZ\PGPUVV\^^^cnmkjt}{y}~w{|~}o_hol]HOZ\SGRXY\bhffo}{{mdimcRS[[QPW[VQZab^amrqpwohnzxd]]fhg`XX]fa[VZjjh^asxvmq|}ln}y`_oxpcgouuywx}~vnpkplebY_a]YOT^`\VXdhefenrryv{~||orz~xor|wumrlfcPQVWTBGSXVVZbfgopvz~sopkgTRRQSQQMOU\ZW]cnlnuz~}rnyuk^_c\V]ZUQR_ZQT\lf^dozyu{~rqx{yb`innilmpu{zxy}tllprje`bikd]`hjcbejmfghlpoppos{~{wz}ssuy{qqsw}|{yt`_hjfMKX\ZKLVY^efefp{{|]Xaf^DGPTTRSVX^hgghp~}nsyzthkrssy|}~l`jphMKUYVJFMQRVWYY^suols|{wsy|{zwz~{phqvqXT_ecbeghn|}yxwsy{tnikollimolrusuuqttwueinqpaeijnmmnkq|wuqs}xx}|zx}|~px~x~}{tsh_cggbOQ\aaLP]dhelqt}{vyyt\S[`\QRVX[ca`aettrrvqpwxtkkljmyvqnsqcefeWUQIMZXNFMac_^buxyyy~}}xyvpv~{n`htltsqnkmXNXa_VWfsqxtx{udluwlX`{qkswt~b[p|sWRdjffhfafuxk`hwluzxoi}urppzzoacklklldgovsacr}yhky~~~{|d^ksp[Ybdgnjebexwojl~{{qvllv{ypnqqt|vtwmuys[LTXRTONOL[_]\^t}vsy|xorupumhlguwuus~}ybYcjmYYfhq~zumv{ujdgoksxwwrngmnq`R[_dc`ccdkiijiv|wvv~wvz{}~~{u~}ialusvzz||~wjmrtnknmovurqqz}yxzw{}|h_inncajlkhfmooz|ywy~|||{xxzsqrtsprstttuy{zgU_jbJJWYUYY[[]pqljr}|zz{mu{{uomsuqwsqt{~~znvykV\enkpsoqyvuinwxm}txynfprt[Q``^^cf`\lmhfe||oryw}wwy~mjx}~rx||qpsvvn~}zp^ltt^[miepsrhe|sqt}xpf_vtjmpqiczrlqxtyyzxkeq|yebqsqtt{sp|uywbs{t[Rd^XglaU[v}mbguvxqpyh_rzjkvwu}stsv|vwzy}lQ]plXT`jkx}x|}yrx|}||wqty{|z{f^mwsZMUdjhe]ajwxmhn~}sopt{xrhku}ymmu~~z|xv}t{mbmuybUZeptmbgn}~wrrxyttv|tifoxlmr|qzpdp{ytfhmqwrjgn{xov}}wqz}sp|v|wPM]jm`]c_sztky~tjvzy{g_hntj`eku|wy}}xxktyx|{}uflnq^IRZartonps}~qpvzhakno]R]bfkddek}}vtty|zyvhipsqkmoquyz~{pu~~no}sy|zcPV_^W^cabzxty~qqtvqbiqsnmy{{~~yklrskjjmkpvqqnw~{yzxw{{~sntw{|zz|cPUa[P]hfi}yxrnsubXaf_[hqndrprxugglq~|z}|}jMMZhnigkpyp}zpuyywhvpfejeche^fnxqknt~}nlpw{pkefm{ypnp{|wsy~xlmsnht|}{moaMXXTV\jmi{ytrupoqkhrtxuouy}}}}zuy}}rhmxxsqqrpv}xmmtzxqssptwzwrwmPGGMV\^ks~rukeWSWVYhojop~~|rcjkpzzojpo}lMM\arzuljnyxrtwxmlrnricd^`dks`^nw~vu}yt~snhsullnmpv{xxy}zrio}~~uVAIU\`fjjt}pottmssjlr|ss|wuyztqy{y|z{wz{vsyxwxmpwwwvssut|xswvrsuw{ux}~hA0@UfgdhotYcnkUQZ_^q~vxvdoxvebjnlz}xw}~||iouwePV`by|zywkswyy{}snvdCL[bZX_dg~}~`N_ijc]bjlqlwwulfmqs{}|nafovϿ~ft}|`LNVcx}urvtv}{wtmjnq{wwy~yubdoqlilqttumsvvvssuuwvzwttuymhostz~{}{uz{sYCET[n|yoacjnomv|hcuwqdbjnrvv|xx~~{{}{ceo|kY`hl~hkw~vw~ztwquz~j[i|z{yygZZ[dt|{}~yh[jlhff`bl}zsjwvv{vqy~|yqw|mg{zοsutxkegegtxy}|uurltxz}rs}xmjossc_fjmz|xzxpz~xwxvs}twwutswohmqsvwvvu~~~|zzqkah^GO^_nqruu|~{p|sklnovgZfos|u|xvifjt~~}|z|~wYM[hijiovr]aps|x}owl[nyunqn~wstvlnuUUcusoywiuqklls~sipt|xjgpx}{{zw{}sgkrnpͽuugovwokjhn|{x~xy{yvzumr|xssqtz{uqkomjnuupw{~~|wjchmwvrtv||pjmsrd_jqusOPaidbfjlvyzz~zy{}cIWhozx{y^J]ijmsx|zxy|nhrutvy{|mPIXa~_fsxstxwso^fnsmkpss{dBN^iinxqnzj\_kpd`jqu~jXcosiOYimtwsrwyukjrrpru{y~zx~~tutlpz|~{~z|}vnid^ceedimv~yplglxvx}|}yijoe^dkrsz~|wbipqc\hokxxmujyvqr|nagpu{upljlqdV`mq}tjinwz^^mrw|}kpuurswpar|yl^jw|t{zu}vzoabhpwxxytsuutugbhls}}vouwztsufZcnqz|{zƪ|nluskrtu|xov|}~xuomuzzpeikhnnkmlksz~~w{z{yrty{}xyzuwwytqqqloxqnuyw~stpoeLG\kxyitz|ogpzwjwxpiknqsrbnrkdgnokxvkv{|xt|wdfv}rpd_knuvlki|z~rZfy}tuy||vqi`X[es|{t{{wm^]elv~mfmry|vrijmcfosz|rwz{ͽsenuxmaltw|olrrplfdjo~z{fZcggjheij|~yz|xz||~}zuutuwxxzxmktzyz~|}}~~oO@J^w~vtvuvn`hwxbhu{pjqy|t\ckjmpqqorvy}tovyzwswywy|~dP]qylvwud[irru}}ubeonpz|{w}}~w~{znQL^nughlpi^dovrpu|xuuwi[crty}xx|zkbhpwxtnptru~unebknnnojjs}}wrk_[elmnmkpz~x{~}zxyw|}}|vxzpt{uuy{tqy}||~p[amwkZgplvu]Scrzvytw}|t^[ip}xznfqxyrprtt~urjcpwuf\qz|}~||`SZW^~~`]ckvzzuhwkpvtxjknengivwrrvsozxyup~y~yryo[[cm~{smo{{orsotȻo``hrzy{zplll[Ucmpuxnhbhogirst||z{vllrrv{vxxz}||}wz}ycmvr|{{~zz}wZGTctoV[hp{|yzy|zgjvy{ljrxylfnqmv}vvofjrw~eT^jy}YATdwuvzwx~qd^]_ngfsw|{zz|~{hbtyxriswy}yxvs~xvowfWenqtjeiop|~x}ƹv{hmvyz~ztllnnkhbdjsvxvttlimqpooppw}|zxofksu{}twvv|}{{z~~||vcly||pxumstvoVScissYPalxu|nr}vmt}~smqqrxuuwwtootst~zsy~yemw}}||wveFNfn~mTQco~jgpot||~}zstkjqjomnvxyvutxvh`^cr{ljlpx}vopv}~ū~{lb\_r{m_[_cnuu{~xsslgdacmu}wnkggow~yzytxy{~y~}a[n}~{zp{~~pqu`OVamw^PUbt~cYm{}vxs{px}ztus`dtyuul`feey}~p]cls|eSMRfkZabnfc^Umqwskv|s|z||ckznqzxps|psqlsoiv{xwqkpst~xshirv|~xmo~xmnusoqqrrzxohigipnks|yqmd]cnq{xrqjekor}vzz~~z~}ucl|ndhpxvyyy|{dQ[fpuaSS^ofU[jyvy}|{c^ns|tXNXbq}tpxzjZdmtiK?LcfJNZmoceilt}}xw{vcdjpxgejqv[]ilyykrj`owlpos~{mmv~ov{||ukhonlu|yum^W^gquqh]affpyxz{rjnpnw~}vwzv}v{caws_nswhiuv|}}v^Xdglx]HR`ijU]fm~ijt{sfhilz~tsqrwwz{}}iamqwzZLQ]svYZgpz}z{||kahlst|{yrgdbnz{vmfs}vh[UXh{oog[j}voeao}wryuxojlkntw{ypaZ\bkvwxzqege^hwtvwntqkyxw{ts|~{|yr`ompnuxtwukjm][fjoxaKKXfhdnrmkrmogfuzz}xxy{sjjaXjvtqnz~{zlbpol{ygj|wqnibml^`^msvpgt|ost}yipqztv|rgkwziclt~m_WXgzyl`eqy{rnt}}~}xv|kcb_fzvmaTVbky}ska^cjlnqqou|z}viikmyps}qp{vptnxtvyxt^C?M\wg\gmd_hprx~c\ipvpfmsrhWZ^f~{}|zkipojbahiqgDGScwvzxjlvuxs~z^enu{qwybl{|yyjgpsqvxqlmy~|xrpuurvxvx{zz}||~ó~|oy}{~whdfhflvvqqhbimloldcehsxvusihmmr||yyvxzz|rx|}fr}x}w|~vuwnVKQWg}}ysuaVgikzyunw~}^Xjqytnedlvzx|mmv}}zwtshMM\alyhmuvmekou}twzxvyznx|qqllq~|un{xjdaj|~rhlupgeiox}se\`jtzrxξrk~yq}~xwqrz}wuwlejkhdeebcr|z}ziXX_gu}wqrvxuvtjfkpx~þsi_g}{rpry|rw~ww{vru{t\VWXdppmglicefmt{~|xxvwz|obkpv~oenr{{~yrvyyvsnehm[]okk{xqsthn{z{{z{}~vykirv{vqkhu{~zogfhu~z}sje\aryvz~zqljkpx|z~~z}yvvoffptvxtlki]Y]^arysphioqpkkorruvsqqqrwz{z}~z|~gssks{zz}vrrwytu{y]OV[fupjhp}kiilons{~~|zz{vtv|i^pwu}z~{yzyx{}}|~||ztru}w``gkhbhmjozjlxzwvtty|xuvyww{{z|wxxw{|{z}zggprrxuppnowurwyuvvtuy|}vstqptwy{~üy~|xxqklpuskkjkmg[Y^clxyrnpsqppmlqtrpqqomqwxz~¿wj||x|vsuyyxzv|uqot~{uwu]Wbdgzurkqz|umoqrtwyyz{yvwwwyxxwx}psuqszwx{||}yy}zz{}{{y|~}ztkVMV`j|}}xqjqwvtrqrwyywvy~~}}}tek~~vxl_cbfmjjmo{}xnnquzyxzyvvvtru{}~ÿz~wnnjklgiihjki^Z`dgpxtqmihhiosstutsssrturrux}vr}}}|vstprvz{yy|~unr{zpjmruy~zpnnqo`blllutqsuvvwxvsrstx}zzzyz|}|wyy|~}}}zy{wuz}}~||qlliq}y~}|yfbinqtuutuvuuvwvrrv{~~|~kfry~z{zqilcZjpo|xnkoqosvxyxxyyzxtqptz}ɹurlorrjkmqj\[\\gsronpnmljgjoqsropstuwvvsqsvwy|ùjw{~}zttuvyyxyzyyxvuuspqru||vvs[V^`f|snmjlpsstxzxy}zwvtuyywy|}~ĵ{kwt{}~|~|uxyttwvw|~{{~}||zwvsww^[iikzxooqrtvwwvxyvvxsot{}~||~ztzz}~||{wtuysfmvwxsjjkmtuqrtvy|zywspty{~´~stusonyyz{jcfhdelmnmiccefikjjlmorrqqssrqptwy|~{y{upt{wsxxuppwtpqs{ytvuohjok_elmlkiknovvuxyusstuutux{}~~}zw}~yxwwx~|x|xpowvpz~xx{zvmmqqmjnruw{}~zuqmpwyx||{{{~wx{z{|}~zyvv~|qurlosszyrstttuwz|{ywwz|zxyyy|{|||~}v{|}zmjmqndff[Zdgkrqjihgghjostuutusqprtuux~~|}~trqqrttqsvzunmpuwtootutsndde`euvstrklquutuutvz{}~wrr{|~}||wyttusxzyxsklpomswxurpqu{{ywrrx{zz|{vv{}|~wx}~|z~}}~~}{|}~}xz}|{{zv{wtvwtpsx{}}xtw|}|}~{}|y|~}|~}|z{ywyyxw{|ytqquz|xttrronswx|~}{|}|}}yy}~}|~}}~{z|~|xywtsstuyzvvvrqruwvrqrtwxuvxwy}}{||{|~{}}|}x{wz|{{|{uqsssqrxwttvvy}zttw{}|yvvwxzzz}}}}xv|zw|}ww||zyyxyz|zwwy}}yx{xssvvy{trv}}zxyz{}||~~}}|yz}~~~{{{}{xuvutwz|~~}zz{||}~}|z|~~}{xx|~~}}}{yz|{yy{|}}~|ywtuxz||{}~}{|~~}|||~~}|{zzzyy}}{{zyzz{~~}|~|}~|{}||~}}~}~}~{{||{zzy|~|{{~{z~~|{|~~{}}ywxz|~~~~~~|zxz~~~~}|~}~~|{{|~||}~~|{}~zy||z{}}~}zwxyz}}||~~~~}}~~~}{z|~~~~}~~~}||}~|z|}|}~}z|}~}}}z{~}zx||}}}~||~~~}~~|{|}{zz|}{}}}}|}}}}{zz{~}|}||~}{|~~}||~~~~}}|~}~}|{{~}|~~}}~}}~~}{{{||}}|{z|}{z}~}~~}{{~~~~~|z{}~||}}{||{~~}~}|}}}|zyxx{~}{{|}~|{{|}}~{z|}}}}~~~~~~}~}}}}~|{{{}|z|~|{~~~~~~|{{|}~{z{}{zzzz{}~~~}}~~~}~~~~~~~~}~~|y{}}|{yz}}|~~~}||}}|}~~|}~~}~~}~||~}~}}~~~~|yyzyxz~}}~}~~}}~~~~~~|{|~~~~|}~}~~~~}~|yy{|}}}}|}}||~}{zz}}|}~~~~~~}}}{{}~~~~}}}zz}~}|||}~|||}}||}~~|xxz}~~~|zz}~~~{{~}|~~{z{{|~}|}~}|~~~~|{|}|~~~~||}~}}~}}}}}|}}~~~~|{~~}~}||~~~|{}~}~}zz{}}}}~~~}}}{{|~||}~~|||{z{{{~}{|}~~{z{~}~~}}~}}~~}{}~~}|}}~}{z{|}~|||~~||{{}~~~~~}~}}~~}{|}~~}}~~|{{}~}}~~~|~~}|{|}|}}{|||}|{|}~~}zz|}~~|{{~~~~}}~|z{}~zxz|}}~|{|~|{|}}~~~}|}~~~~}~|{{||{{|~~~~~~~~}}~~~}}||}~~~~}|}~~}|}~~~}|||~~~}{{zz}~|}}~}}~~}~~~}~~~}}~~}~||~}||}~}}~~|}~}}~~{yz|~~}}~}}~~~}|~~}}~~~~~~~~~~}|}}}}}~~||}}~~~~~~}}}~~~~~~}|}~}}}|}~~}~~~~}}}}~~~~~~}}||~~}}~~~~~~~||}~~~}}}}~~{|~}||~~|}~}}|}}}~~}~~~}||~~~~~}|}{y{~~~~}||~}{|}}}~~}}~~~~~~~~~~~~}}~}}~~}}}}~~~~}~~~~|||~~~~~~~||}~{y|~~~}|z{||}~}|{{|~~~~}|}~~}}~~~~~~~~}|}}||~~~~~~~~~}|}~~}}~~~~}||}}~~}}}}|}~~~~~}|||}~}|}~~|{yz|}~}}}}~~}|}~~~}{zz|}}}}~}~~}}}{{{|~}}}}}~~}}}}~}{z{~}zz{{|}~~~~~~~~}}~~~~~~~~~||}}~}}~~}}~~}}~~~~}~~~}|}}}~~}}}~~~|{{|~}}~}}~~}}}~~}}~~~~}}}~~~}|}}}}~~}}}}}~~~~||~|{z|~~}||}~~}|}}~~~~}||}~~~~~~~~~~~}|~~~~~|{|~~}}~~}}}}~~~}}~}~~~~~~~|{z|}~~}}}|}~~~~~~~}}~~}}~~~}}}}~}}~}}}~}|||}}~~|{|~~}||}}~~~~~~~}}}}|}}~~}}~~}~~~~~|}~~}~}||}~~~~}~~}|||~~~~~~|{{|~~~~~~~~}}}}}~~~~~}}~~~~~~||~~~~~~~~~}|{zz{}~~~~~~}}~~}}~~~}~~~~~~~~}}~~~~~~~~}}~~}}|{|~~}}}~~~}~~~~~}}~~~~~~~~~~~~~~}}~}}~}}~~}}{zzz|~~}}~}}}}~~|}~~~~~~~~~~~~~}}~~~~}}~~}}}}~~}}~~}~~~~~~~~~~}}}~~~~~~}}~}}~~~~~~~~~~~~~~~~~~~~}~~~~}~~}~~~~}}}~~~~~~~~~~~~~~~}}~~}}}~~~~}}~~~~~~~}}~~~~~}}~~~~~~~~~}~~~~~~}|}~~~~~~~~}}~}}||~~}}~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~}~~~}~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~}}}~~~~~~}}}~~~~~~~~~~~~~~~~~~~}}}~~~~}}}~~~~~~~~~~~~~~~~~~~~~~~~}}~~}}~~~~~~}~~~~~~}~~~~~~}}~~~~}}~~}~~~~~~~~~}~~}}~~~}~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~}}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~}}~~~~~~~~~~}~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~inst<kiki/src/0000777000000000000000000000000010336064533011301 5ustar rootrootkiki/src/base/0000777000000000000000000000000010336064534012214 5ustar rootrootkiki/src/base/KikiAction.cpp0000666000000000000000000001112307644706100014743 0ustar rootroot/* * KikiAction.cpp * kiki */ #include "KikiAction.h" #include "KikiEvent.h" #include "KikiObject.h" #include "KikiController.h" #include // -------------------------------------------------------------------------------------------------------- KikiAction::KikiAction ( KikiActionObject * o, int i, const std::string & n, int d, int m ) { action_object = o; action_name = n; action_id = i; mode = m; duration = d; event = NULL; reset(); } // -------------------------------------------------------------------------------------------------------- KikiAction::KikiAction ( KikiActionObject * o, int d, int m ) { action_object = o; action_id = 0; mode = m; duration = d; event = NULL; reset(); } // -------------------------------------------------------------------------------------------------------- KikiAction::~KikiAction () { if (event) event->removeAction(this); if (action_object) action_object->removeAction(this); } // -------------------------------------------------------------------------------------------------------- void KikiAction::init () { action_object->initAction (this); } // -------------------------------------------------------------------------------------------------------- void KikiAction::perform () { action_object->performAction (this); } // -------------------------------------------------------------------------------------------------------- void KikiAction::finish () { action_object->finishAction (this); } // -------------------------------------------------------------------------------------------------------- void KikiAction::finished () { action_object->actionFinished(this); if (current == getDuration()) // if keepRest wasn't called -> reset start and current values { reset(); } } // -------------------------------------------------------------------------------------------------------- void KikiAction::reset () { start = 0; rest = 0; last = 0; current = 0; } // -------------------------------------------------------------------------------------------------------- void KikiAction::takeRest ( KikiAction * action ) { current = action->rest; start = action->start; last = 0; rest = 0; } // -------------------------------------------------------------------------------------------------------- void KikiAction::keepRest () { if (rest != 0) { current = rest; rest = 0; } } // -------------------------------------------------------------------------------------------------------- float KikiAction::getRelativeTime () { return current / (float)getDuration(); } // -------------------------------------------------------------------------------------------------------- int KikiAction::getDuration () const { return Controller.mapMsTime(duration); } // -------------------------------------------------------------------------------------------------------- void KikiAction::performWithEvent ( KikiEvent & event ) { int eventTime = event.getTime(); if (start == 0) { start = eventTime; current = 0; rest = 0; last = 0; if (duration == 0 && mode == ONCE) { event.removeAction (this); } perform (); last = current; if (duration == 0 && mode == ONCE) { finished(); } } else { int currentDiff = eventTime - start; if (currentDiff >= getDuration()) { current = getDuration(); start += current; rest = eventTime - start; perform (); last = 0; if (mode == CONTINUOUS) { current = rest; return; } if (mode == ONCE) { event.removeAction (this); } finish (); if (mode == REPEAT) { if (current == getDuration()) // if keepRest wasn't called -> reset start and current values { reset(); } return; } event.addFinishedAction (this); } else { current = currentDiff; perform (); last = current; } } } kiki/src/base/KikiAction.h0000666000000000000000000000462107644706100014415 0ustar rootroot/* * KikiAction.h * kiki */ #ifndef __KikiAction #define __KikiAction #include #include class KikiActionObject; class KikiEvent; // -------------------------------------------------------------------------------------------------------- class KikiAction { public: // ........................................................................ PUBLIC enum { ONCE, CONTINUOUS, REPEAT }; KikiAction ( KikiActionObject * object, int id, const std::string & name, int _duration = 0, int _mode = KikiAction::ONCE ); KikiAction ( KikiActionObject * object, int id = 0, int _mode = KikiAction::ONCE ); virtual ~KikiAction (); virtual void init (); virtual void perform (); virtual void finish (); virtual void finished (); void performWithEvent ( KikiEvent & event ); int getId () const { return action_id; } const std::string & getName () const { return action_name; } KikiActionObject * getObject () { return action_object; } float getRelativeTime (); float getRelativeDelta () { return (current-last)/(float)getDuration(); } void takeRest ( KikiAction * ); void keepRest (); void reset (); unsigned int getStart () const { return start; } int getDuration () const; void setDuration ( int d ) { duration = d; } protected: // ..................................................................... PROTECTED friend class KikiEvent; int action_id; std::string action_name; KikiActionObject * action_object; unsigned int start; int rest; int current; int last; int duration; int mode; KikiEvent * event; }; // __________________________________________________________________________________________________ typedef std::vector KikiActionList; typedef KikiActionList::iterator KikiActionIter; #endif kiki/src/base/KikiActionObject.cpp0000666000000000000000000001124407644706100016076 0ustar rootroot/* * KikiActionObject.cpp * kiki */ #include "KikiActionObject.h" #include "KikiController.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION (KikiActionObject) // -------------------------------------------------------------------------------------------------------- KikiActionObject::~KikiActionObject () { deleteActions(); while (events.empty() == false) { delete events.back(); events.pop_back(); } } // -------------------------------------------------------------------------------------------------------- void KikiActionObject::deleteActions () { while (actions.empty() == false) { delete actions.back(); // will remove action from actions } } // -------------------------------------------------------------------------------------------------------- void KikiActionObject::addAction ( KikiAction * action ) { if (std::find (actions.begin(), actions.end(), action) == actions.end()) { actions.push_back(action); } } // -------------------------------------------------------------------------------------------------------- void KikiActionObject::startTimer ( int duration, int mode ) { KikiAction * action = new KikiAction (this, 0, "timer", duration, mode); actions.push_back(action); Controller.timer_event->addAction (action); } // -------------------------------------------------------------------------------------------------------- void KikiActionObject::stopAction ( KikiAction * action ) { Controller.timer_event->removeAction(action); } // -------------------------------------------------------------------------------------------------------- void KikiActionObject::startTimedAction ( KikiAction * action, int duration ) { if (duration >= 0) { action->setDuration(duration); } Controller.timer_event->addAction (action); } // -------------------------------------------------------------------------------------------------------- void KikiActionObject::removeAction ( KikiAction * action ) { KikiActionList::iterator result = std::find (actions.begin(), actions.end(), action); if (result != actions.end()) { actions.erase(result); } } // -------------------------------------------------------------------------------------------------------- KikiAction * KikiActionObject::getActionWithId ( int actionId ) { if (actionId < (int)actions.size() && actions[actionId]->getId() == actionId) { return actions[actionId]; } // to be deleted... KConsole::printf ("[WARNING] KikiActionObject::getActionWithId %d [%d actions]'", actionId, (int)actions.size()); for (KikiActionIter iter = actions.begin(); iter != actions.end(); iter++) { if ((*iter)->getId() == actionId) { return *iter; } } return NULL; } // -------------------------------------------------------------------------------------------------------- KikiAction * KikiActionObject::getActionWithName ( const std::string & name ) { KikiActionList::iterator actionIter = actions.begin(); while (actionIter != actions.end()) { if ((*actionIter)->getName() == name) { return *actionIter; } actionIter++; } return NULL; } // -------------------------------------------------------------------------------------------------------- int KikiActionObject::addEventWithName ( const std::string & eventName ) { if (getEventWithName (eventName)) // to be removed { KConsole::printError (kStringPrintf ("KikiActionObject::addEventWithName '%s' already in use!", eventName.c_str())); return -1; // shouldn't happen anyway :-) } events.push_back (new KikiEvent (this, eventName)); return events.size()-1; } // -------------------------------------------------------------------------------------------------------- KikiEvent * KikiActionObject::getEventWithId ( int eventId ) { return events[eventId]; } // -------------------------------------------------------------------------------------------------------- KikiEvent * KikiActionObject::getEventWithName ( const std::string & name ) { for (KikiEventIter iter = events.begin(); iter != events.end(); iter++) { if ((*iter)->getName() == name) { return *iter; } } return NULL; } kiki/src/base/KikiActionObject.h0000666000000000000000000000306507644706100015545 0ustar rootroot/* * KikiActionObject.h * kiki */ #ifndef __KikiActionObject #define __KikiActionObject #include "KikiAction.h" #include "KikiEvent.h" #include // __________________________________________________________________________________________________ class KikiActionObject { public: // ........................................................................ PUBLIC KikiActionObject () {} virtual ~KikiActionObject (); virtual void initAction ( KikiAction * action ) {} virtual void performAction ( KikiAction * action ) {} virtual void finishAction ( KikiAction * action ) {} virtual void actionFinished ( KikiAction * action ) {} void startTimer ( int duration, int mode = KikiAction::ONCE ); void addAction ( KikiAction * action ); void startTimedAction ( KikiAction * action, int duration = -1 ); void stopAction ( KikiAction * action ); void removeAction ( KikiAction * action ); KikiAction * getActionWithName ( const std::string & name ); KikiAction * getActionWithId ( int actionId ); int addEventWithName ( const std::string & name ); KikiEvent * getEventWithName ( const std::string & name ); KikiEvent * getEventWithId ( int eventId ); INTROSPECTION protected: // ..................................................................... PROTECTED KikiActionList actions; KikiEventList events; void deleteActions (); }; #endif kiki/src/base/KikiBase.h0000666000000000000000000000036607644706100014054 0ustar rootroot/* * KikiBase.h * kiki */ #ifndef __KikiBase #define __KikiBase #include "KikiEvent.h" #include "KikiAction.h" #include "KikiPyAction.h" #include "KikiActionObject.h" #include "KikiObject.h" #include "KikiTest.h" #endif kiki/src/base/KikiColorObject.h0000666000000000000000000000464107644706100015407 0ustar rootroot/* * KikiColorObject.h * kiki */ #ifndef __KikiColorObject #define __KikiColorObject #include #include #define KIKI_COLOR_HEADER \ protected: \ static const char * color_names[]; \ static std::vector colors; \ public: \ static void setObjectColor (const char *color_name, const KColor & color); \ static const KColor & getObjectColor (const char *color_name); \ static const KColor & getObjectColor (int color_index); #define KIKI_COLOR_VALUES(className, number) \ void className::setObjectColor (const char * color_name, const KColor & color) \ { for (int i = 0; i < number; i++) { \ if (strcmp(color_names[i], color_name) == 0) { colors[i] = color; return; } \ } \ } \ const KColor & className::getObjectColor (const char * color_name) \ { for (int i = 0; i < number; i++) { \ if (strcmp(color_names[i], color_name) == 0) { return colors[i]; } \ } \ return colors[0]; \ } \ const KColor & className::getObjectColor (int color_index) \ { \ return colors[color_index]; \ } #define KIKI_COLOR_VALUES_0(className) \ std::vector className::colors(1); \ const char * className::color_names[] = { "base" }; \ enum { className ## _base_color, className ## _dummy }; \ KIKI_COLOR_VALUES(className, 1) #define KIKI_COLOR_VALUES_1(className, color1) \ std::vector className::colors(2); \ const char * className::color_names[] = { "base", #color1 }; \ enum { className ## _base_color, className ## _ ## color1 ## _color }; \ KIKI_COLOR_VALUES(className, 2) #define KIKI_COLOR_VALUES_2(className,color1,color2) \ std::vector className::colors(3); \ const char * className::color_names[] = { "base", #color1, #color2 }; \ enum { className ## _base_color, className ## _ ## color1 ## _color, \ className ## _ ## color2 ## _color}; \ KIKI_COLOR_VALUES(className, 3) #define KIKI_COLOR_VALUES_3(className,color1,color2,color3) \ std::vector className::colors(4); \ const char * className::color_names[] = { "base", #color1, #color2, #color3 }; \ enum { className ## _base_color, className ## _ ## color1 ## _color, \ className ## _ ## color2 ## _color, className ## _ ## color3 ## _color}; \ KIKI_COLOR_VALUES(className, 4) #endif kiki/src/base/KikiEvent.cpp0000666000000000000000000001163210320321643014602 0ustar rootroot/* * KikiEvent.cpp * kiki */ #include "KikiEvent.h" #include "KikiActionObject.h" #include #include #include // -------------------------------------------------------------------------------------------------------- KikiEvent::KikiEvent ( KikiActionObject * o, const std::string & name ) { event_object = o; event_name = name; } // -------------------------------------------------------------------------------------------------------- KikiEvent::~KikiEvent () { while (actions.empty() == false) { actions.pop_back(); } } // -------------------------------------------------------------------------------------------------------- bool KikiEvent::hasAction ( KikiAction * action ) { return (std::find (actions.begin(), actions.end(), action) != actions.end()); } // -------------------------------------------------------------------------------------------------------- void KikiEvent::addAction ( KikiAction * action ) { if (std::find (actions.begin(), actions.end(), action) == actions.end()) { actions.push_back(action); action->event = this; action->init(); } } // -------------------------------------------------------------------------------------------------------- void KikiEvent::removeAllActions () { while (actions.empty() == false) { removeAction(actions.back()); } } // -------------------------------------------------------------------------------------------------------- KikiActionList KikiEvent::getActionsOfObject ( KikiActionObject * object ) { KikiActionList action_list; KikiActionList sactions(actions); for (KikiActionIter iter = sactions.begin(); iter != sactions.end(); iter++) { if ((*iter)->getObject() == object) { action_list.push_back(*iter); } } return action_list; } // -------------------------------------------------------------------------------------------------------- void KikiEvent::removeActionsOfObject ( KikiActionObject * object ) { for (KikiActionIter iter = actions.begin(); iter != actions.end(); iter++) { if ((*iter)->getObject() == object) { removeAction(*iter); } } } // -------------------------------------------------------------------------------------------------------- void KikiEvent::removeActionWithName ( const std::string & actionName ) { for (KikiActionIter iter = actions.begin(); iter != actions.end(); iter++) { if ((*iter)->getName() == actionName) { removeAction(*iter); return; } } } // -------------------------------------------------------------------------------------------------------- void KikiEvent::removeAction ( KikiAction * action ) { action->event = NULL; KikiActionIter result = std::find (actions.begin(), actions.end(), action); if (result != actions.end()) { actions.erase (result); } result = std::find (save_actions.begin(), save_actions.end(), action); if (result != save_actions.end()) { save_actions.erase (result); } result = std::find (finished_actions.begin(), finished_actions.end(), action); if (result != finished_actions.end()) { finished_actions.erase (result); } } // -------------------------------------------------------------------------------------------------------- void KikiEvent::triggerActions () { time = KEventHandler::getTime (); save_actions = KikiActionList (actions); while (save_actions.empty() == false) { KikiAction * action = save_actions.back(); action->performWithEvent (*this); if (save_actions.back() == action) { save_actions.pop_back(); } } } // -------------------------------------------------------------------------------------------------------- void KikiEvent::addFinishedAction ( KikiAction * action ) { //if (action->getName() != "timer") finished_actions.push_back(action); //else // KConsole::print(this->getName() + " addFinishedAction: " + action->getName()); } // -------------------------------------------------------------------------------------------------------- void KikiEvent::finishActions () { //KConsole::print(this->getName() + " finishActions"); try { while (finished_actions.empty() == false) { KikiAction * action = finished_actions.back(); //KConsole::print(this->getName() + " finishActions " + action->getName()); action->finished(); if (finished_actions.back() == action) { //KConsole::print(this->getName() + " finishActions -- " + action->getName()); finished_actions.pop_back(); } } } catch (...) { //KConsole::print("!!! finishActions failed !!!"); } } kiki/src/base/KikiEvent.h0000666000000000000000000000314507644706101014262 0ustar rootroot/* * KikiEvent.h * kiki */ #ifndef __KikiEvent #define __KikiEvent #include "KikiAction.h" // -------------------------------------------------------------------------------------------------------- class KikiEvent { public: // ........................................................................ PUBLIC KikiEvent ( KikiActionObject *, const std::string & name ); ~KikiEvent (); bool hasAction ( KikiAction * action ); void addAction ( KikiAction * action ); void removeAction ( KikiAction * action ); void removeAllActions (); void removeActionWithName ( const std::string & actionName ); void removeActionsOfObject ( KikiActionObject * object ); KikiActionList getActionsOfObject ( KikiActionObject * object ); void addFinishedAction ( KikiAction * action ); const std::string & getName () const { return event_name; } void triggerActions (); void finishActions (); unsigned int getTime () const { return time; } KikiActionList save_actions; protected: // ..................................................................... PROTECTED std::string event_name; KikiActionObject * event_object; KikiActionList actions; KikiActionList finished_actions; unsigned int time; }; // -------------------------------------------------------------------------------------------------------- typedef std::vector KikiEventList; typedef KikiEventList::iterator KikiEventIter; #endif kiki/src/base/KikiFace.cpp0000666000000000000000000000326607644706101014376 0ustar rootroot/* * KikiFace.cpp * kiki */ #include "KikiFace.h" // __________________________________________________________________________________________________ KQuaternion KikiFace::orientationForFace ( int face ) { switch (face % 6) { case PZ: return KQuaternion(); case NZ: return KQuaternion::rotationAroundVector(180, KVector(1,0,0)); case PX: return KQuaternion::rotationAroundVector( 90, KVector(0,1,0)); case NX: return KQuaternion::rotationAroundVector(-90, KVector(0,1,0)); case PY: return KQuaternion::rotationAroundVector(-90, KVector(1,0,0)); case NY: return KQuaternion::rotationAroundVector( 90, KVector(1,0,0)); }; return KQuaternion(); } // __________________________________________________________________________________________________ KVector KikiFace::normalVectorForFace ( int face ) { float o = (face < 3) ? -1 : 1; switch (face % 3) { case X: return KVector (o, 0, 0); case Y: return KVector (0, o, 0); case Z: return KVector (0, 0, o); } return KVector(); } // __________________________________________________________________________________________________ void KikiFace::transformationForFace ( int face, float offset ) { (offset * normalVectorForFace (face)).glTranslate(); switch (face) { case PZ: break; case NZ: glRotatef (180, 0, 1, 0); break; case PX: glRotatef ( 90, 0, 1, 0); break; case NX: glRotatef (-90, 0, 1, 0); break; case PY: glRotatef (-90, 1, 0, 0); break; case NY: glRotatef ( 90, 1, 0, 0); break; } } kiki/src/base/KikiFace.h0000666000000000000000000000116207644706101014034 0ustar rootroot/* * KikiFace.h * kiki */ #ifndef __KikiFace #define __KikiFace #include #include // __________________________________________________________________________________________________ class KikiFace { public: // ........................................................................ PUBLIC enum { PX=0, X=0, PY, Y=1, PZ, Z=2, NX, NY, NZ }; static void transformationForFace ( int face, float offset = 0.5 ); static KQuaternion orientationForFace ( int face ); static KVector normalVectorForFace ( int face ); }; #endif kiki/src/base/KikiObject.cpp0000666000000000000000000000412607644706101014742 0ustar rootroot/* * KikiObject.cpp * kiki */ #include "KikiObject.h" #include "KikiController.h" #include "KikiWorld.h" #include #include #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_2 (KikiObject, KikiActionObject, KPickable) KDL_CLASS_INTROSPECTION_1 (KikiTmpObject, KikiObject) KIKI_OBJECT_VALUES (KikiObject, false) KIKI_OBJECT_VALUES (KikiTmpObject, true) // -------------------------------------------------------------------------------------------------------- KikiObject::KikiObject () : KikiActionObject(), KNotificationObject (), KPickable () { move_action = NULL; name = NULL; } // -------------------------------------------------------------------------------------------------------- KikiObject::~KikiObject () { Controller.world->removeObject (this); notifyReceiversType (KIKI_NOTIFICATION_OBJECT_DELETED); if (name) delete name; } // __________________________________________________________________________________________________ void KikiTmpObject::render () { if (Controller.world->flags[KikiWorld::DISPLAY_DOTS]) kDisplaySolidSphere (0.1); } // __________________________________________________________________________________________________ void KikiObject::preDisplay () { loadId(); glPushAttrib (GL_CURRENT_BIT | GL_ENABLE_BIT); glPushMatrix (); current_position.glTranslate(); if (picked) { glDisable (GL_LIGHTING); glColor4f (1.0, 1.0, 1.0, 1.0); kDisplayWireCube (1.0); glEnable (GL_LIGHTING); } } // __________________________________________________________________________________________________ void KikiObject::display () { preDisplay(); render(); postDisplay(); } // __________________________________________________________________________________________________ void KikiObject::postDisplay () { glPopMatrix(); glPopAttrib(); } kiki/src/base/KikiObject.h0000666000000000000000000000731010320247667014407 0ustar rootroot/* * KikiObject.h * kiki */ #ifndef __KikiObject #define __KikiObject #include "KikiObjectHeader.h" #include "KikiActionObject.h" #include "KikiFace.h" #include "KikiPos.h" #include #include #include #include #include #ifndef WIN32 #define RANDOM ((float)random()/RAND_MAX) #else #pragma warning ( disable : 4800 4305 4267 ) // Disable warnings #define RANDOM ((float)rand()/RAND_MAX) #endif enum { KIKI_NOTIFICATION_OBJECT_DELETED = KDL_NOTIFICATION_TYPE_NOTIFICATION_END }; // __________________________________________________________________________________________________ class KikiObject : public KObject, public KikiActionObject, public KNotificationObject, public KPickable { public: // ........................................................................ PUBLIC KikiObject (); virtual ~KikiObject (); virtual void initAction ( KikiAction * action ) {} virtual void performAction ( KikiAction * action ) {} virtual void finishAction ( KikiAction * action ) {} virtual void actionFinished ( KikiAction * action ) {} virtual void newCellMate ( KikiObject * object ) {} virtual void cellMateLeft ( KikiObject * object ) {} virtual void bulletImpact () {} virtual void preDisplay (); virtual void display (); virtual void postDisplay (); virtual void render () {} KikiPos getPos () const { return current_position; } virtual void setPosition ( const KVector & pos ) { position = current_position = pos; } virtual void setCurrentPosition ( const KVector & pos ) { current_position = pos; } KVector getPosition () const { return position; } void setOrientation ( const KQuaternion & q ) { orientation = q; current_orientation = q; } void setName ( const std::string & n ) { if (name) *name = n; else name = new std::string(n); } std::string getName () const { if (name) return *name; else return "noname"; } KQuaternion getOrientation () const { return orientation; } void setCurrentOrientation ( const KQuaternion & q ) { current_orientation = q; } KQuaternion getCurrentOrientation () const { return current_orientation; } virtual bool isSlippery () { return false; } protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER friend class KikiWorld; KikiAction * move_action; std::string * name; KVector direction; // push/fall,spikes,bullet KVector position; KVector current_position; KQuaternion orientation; KQuaternion current_orientation; }; // __________________________________________________________________________________________________ class KikiTmpObject : public KikiObject { KIKI_OBJECT_HEADER public: KikiObject * object; int time; KikiTmpObject ( KikiObject * o ) : KikiObject() { object = o; } void render (); }; // __________________________________________________________________________________________________ typedef std::vector KikiObjectList; typedef KikiObjectList::iterator KikiObjectIter; #endif kiki/src/base/KikiObjectHeader.h0000666000000000000000000000222207644706101015513 0ustar rootroot/* * KikiObjectHeader.h * kiki */ #ifndef __KikiObjectHeader #define __KikiObjectHeader #include "KikiColorObject.h" #define KIKI_OBJECT_HEADER \ INTROSPECTION \ static const bool class_space_egoistic; \ public: \ virtual bool isSpaceEgoistic() const { return class_space_egoistic; } \ KIKI_COLOR_HEADER #define KIKI_OBJECT_EGO(className, spaceEgoistic) \ const bool className::class_space_egoistic(spaceEgoistic); #define KIKI_OBJECT_VALUES(className, spaceEgoistic) \ KIKI_OBJECT_EGO(className, spaceEgoistic) \ KIKI_COLOR_VALUES_0(className) #define KIKI_OBJECT_VALUES_1(className, spaceEgoistic, color1) \ KIKI_OBJECT_EGO(className, spaceEgoistic) \ KIKI_COLOR_VALUES_1(className, color1) #define KIKI_OBJECT_VALUES_2(className, spaceEgoistic, color1, color2) \ KIKI_OBJECT_EGO(className, spaceEgoistic) \ KIKI_COLOR_VALUES_2(className, color1, color2) #define KIKI_OBJECT_VALUES_3(className, spaceEgoistic, color1, color2, color3) \ KIKI_OBJECT_EGO(className, spaceEgoistic) \ KIKI_COLOR_VALUES_3(className, color1, color2, color3) #endif kiki/src/base/KikiPos.h0000666000000000000000000000306407644706101013742 0ustar rootroot/* * KikiPos.h * kiki */ #ifndef __KikiPos #define __KikiPos #include #include // __________________________________________________________________________________________________ class KikiPos { public: // ........................................................................ PUBLIC int x, y, z; KikiPos () { x= y = z = 0; } KikiPos ( const KVector & v ) { x = (int)rint(v[X]); y = (int)rint(v[Y]); z = (int)rint(v[Z]); } KikiPos ( int _x, int _y, int _z = 0 ) { x = _x; y = _y; z = _z; } KikiPos ( const KikiPos & p ) { x = p.x; y = p.y; z = p.z; } operator KVector () const { return KVector(x, y, z); } KikiPos operator- ( const KikiPos & p ) const { return KikiPos(x-p.x,y-p.y,z-p.z); } KikiPos operator+ ( const KikiPos & p ) const { return KikiPos(x+p.x,y+p.y,z+p.z); } bool operator== ( const KikiPos & p ) const { return (x==p.x && y==p.y && z==p.z); } bool operator!= ( const KikiPos & p ) const { return (x!=p.x || y!=p.y || z!=p.z); } KikiPos & operator+= ( const KikiPos & p ) { x+=p.x; y+=p.y; z+=p.z; return (*this); } KikiPos & operator-= ( const KikiPos & p ) { x-=p.x; y-=p.y; z-=p.z; return (*this); } std::string getString () const { return kStringPrintf("[%d %d %d]", x, y, z); } const char * getCString () const { return kStringPrintf("[%d %d %d]", x, y, z).c_str(); } }; // __________________________________________________________________________________________________ typedef KikiPos KikiSize; // :-) #endif kiki/src/base/KikiPyAction.cpp0000666000000000000000000000534407644706101015265 0ustar rootroot/* * KikiPyAction.cpp * kiki */ #include "KikiPyAction.h" #include "KikiEvent.h" #include // -------------------------------------------------------------------------------------------------------- KikiPyAction::KikiPyAction ( PyObject * self, PyObject * object, const std::string & name, int duration, int mode ) : KikiAction (NULL, 0, name, duration, mode) { python_self = self; python_object = object; Py_INCREF(python_object); } // -------------------------------------------------------------------------------------------------------- KikiPyAction::~KikiPyAction () { Py_DECREF(python_object); } // -------------------------------------------------------------------------------------------------------- void KikiPyAction::init () { Py_INCREF(python_self); } // -------------------------------------------------------------------------------------------------------- void KikiPyAction::perform () { PyObject * result = NULL; if (PyFunction_Check(python_object)) { result = PyObject_CallFunctionObjArgs (python_object, NULL); } else if (PyMethod_Check(python_object)) { result = PyObject_CallFunctionObjArgs (PyMethod_Function(python_object), PyMethod_Self(python_object), NULL); } else if (PyInstance_Check(python_object)) { result = PyObject_CallMethod (python_object, "performAction", "sf", action_name.c_str(), getRelativeTime()); } if (result) { Py_DECREF(result); } else { KConsole::printError (kStringPrintf ("KikiPyAction::perform failed \"%s\"", action_name.c_str())); PyErr_Print(); } } // -------------------------------------------------------------------------------------------------------- void KikiPyAction::finish () { if (PyObject_TypeCheck(python_object, &PyInstance_Type)) { if (PyObject_CallMethod(python_object, "finishAction", "s", action_name.c_str()) == NULL) { KConsole::printError("KikiPyAction::finish failed"); } } } // -------------------------------------------------------------------------------------------------------- void KikiPyAction::finished () { if (PyObject_TypeCheck(python_object, &PyInstance_Type)) { if (PyObject_CallMethod(python_object, "actionFinished", "s", action_name.c_str()) == NULL) { KConsole::printError("KikiPyAction::finished failed"); } } reset(); if (mode == KikiAction::ONCE) { Py_DECREF(python_self); } } kiki/src/base/KikiPyAction.h0000666000000000000000000000162307644706101014726 0ustar rootroot/* * KikiPyAction.h * kiki */ #ifndef __KikiPyAction #define __KikiPyAction #include "KikiAction.h" #include // -------------------------------------------------------------------------------------------------------- class KikiPyAction : public KikiAction { protected: // ..................................................................... PROTECTED PyObject * python_object; PyObject * python_self; public: // ........................................................................ PUBLIC KikiPyAction ( PyObject * self, PyObject * object, const std::string & name, int duration = 0, int mode = KikiAction::CONTINUOUS); ~KikiPyAction (); void init (); void perform (); void finish (); void finished (); }; #endif kiki/src/base/KikiTools.cpp0000666000000000000000000000230707644706101014633 0ustar rootroot/* * KikiTools.cpp * kiki */ #include "KikiTools.h" #include // -------------------------------------------------------------------------------------------------------- KVector kRayPlaneIntersection ( const KVector & rayPos, const KVector & rayDirection, const KVector & planePos, const KVector & planeNormal ) { float x = ((planePos - rayPos) * planeNormal) / (rayDirection * planeNormal); return rayPos + x * rayDirection; } // -------------------------------------------------------------------------------------------------------- KVector kPointMappedToPlane ( const KVector & point, const KVector & planePos, const KVector & planeNormal ) { return (point - planeNormal * ((point - planePos) * planeNormal)); } // -------------------------------------------------------------------------------------------------------- float kRayPlaneIntersectionFactor ( const KVector & rayPos, const KVector & rayDirection, const KVector & planePos, const KVector & planeNormal ) { return ((planePos - rayPos) * planeNormal) / (rayDirection * planeNormal); } kiki/src/base/KikiTools.h0000666000000000000000000000153407644706101014301 0ustar rootroot/* * KikiTools.h * kiki */ #ifndef __KikiTools #define __KikiTools #include // -------------------------------------------------------------------------------------------------------- KVector kRayPlaneIntersection ( const KVector & rayPos, const KVector & rayDirection, const KVector & planePos, const KVector & planeNormal ); KVector kPointMappedToPlane ( const KVector & point, const KVector & planePos, const KVector & planeNormal ); float kRayPlaneIntersectionFactor ( const KVector & rayPos, const KVector & rayDirection, const KVector & planePos, const KVector & planeNormal ); // -------------------------------------------------------------------------------------------------------- #endif kiki/src/bots/0000777000000000000000000000000010336075436012254 5ustar rootrootkiki/src/bots/body.h0000666000000000000000000001452310070562134013356 0ustar rootroot#ifndef __obj_body #define __obj_body #define render_body { \ glInterleavedArrays (GL_N3F_V3F, 0, bodyInterleavedQuadStrips); \ for (int i = 0; i < bodyNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, bodyQuadStripIndices[i]/6, \ (bodyQuadStripIndices[i+1] - bodyQuadStripIndices[i])/6); \ } \ glInterleavedArrays (GL_N3F_V3F, 0, bodyInterleavedTriangleFans); \ for (int ii = 0; ii < bodyNumTriangleFans; ii++) { \ glDrawArrays (GL_TRIANGLE_FAN, bodyTriangleFanIndices[ii]/6, \ (bodyTriangleFanIndices[ii+1] - bodyTriangleFanIndices[ii])/6); \ } \ } static int bodyNumQuadStrips = 5; static int bodyQuadStripIndices[6] = { 0, 108, 216, 324, 432, 540 }; static float bodyInterleavedQuadStrips[540] = { 0.653, 0.653, 0.385, 0.229, 0.229, 0.133, 0.559, 0.559, 0.612, 0.176, 0.176, 0.247, 0.923, -0.000, 0.385, 0.324, -0.000, 0.133, 0.791, 0.000, 0.612, 0.248, -0.000, 0.247, 0.653, -0.653, 0.385, 0.229, -0.229, 0.133, 0.559, -0.559, 0.612, 0.176, -0.176, 0.247, 0.000, -0.923, 0.385, 0.000, -0.324, 0.133, 0.000, -0.790, 0.613, 0.000, -0.248, 0.247, -0.653, -0.653, 0.385, -0.229, -0.229, 0.133, -0.559, -0.559, 0.613, -0.176, -0.176, 0.247, -0.923, -0.000, 0.385, -0.324, -0.000, 0.133, -0.790, 0.000, 0.613, -0.248, -0.000, 0.247, -0.653, 0.653, 0.385, -0.229, 0.229, 0.133, -0.559, 0.559, 0.613, -0.176, 0.176, 0.247, -0.000, 0.923, 0.385, -0.000, 0.324, 0.133, 0.000, 0.790, 0.613, -0.000, 0.248, 0.247, 0.653, 0.653, 0.385, 0.229, 0.229, 0.133, 0.559, 0.559, 0.612, 0.176, 0.176, 0.247, 0.707, 0.707, 0.000, 0.248, 0.248, -0.002, 0.653, 0.653, 0.385, 0.229, 0.229, 0.133, 1.000, 0.000, -0.000, 0.351, -0.000, -0.002, 0.923, -0.000, 0.385, 0.324, -0.000, 0.133, 0.707, -0.707, -0.000, 0.248, -0.248, -0.002, 0.653, -0.653, 0.385, 0.229, -0.229, 0.133, 0.000, -1.000, -0.000, 0.000, -0.351, -0.002, 0.000, -0.923, 0.385, 0.000, -0.324, 0.133, -0.707, -0.707, -0.000, -0.248, -0.248, -0.002, -0.653, -0.653, 0.385, -0.229, -0.229, 0.133, -1.000, -0.000, -0.000, -0.351, -0.000, -0.002, -0.923, -0.000, 0.385, -0.324, -0.000, 0.133, -0.707, 0.707, 0.000, -0.248, 0.248, -0.002, -0.653, 0.653, 0.385, -0.229, 0.229, 0.133, -0.000, 1.000, 0.000, -0.000, 0.351, -0.002, -0.000, 0.923, 0.385, -0.000, 0.324, 0.133, 0.707, 0.707, 0.000, 0.248, 0.248, -0.002, 0.653, 0.653, 0.385, 0.229, 0.229, 0.133, 0.653, 0.653, -0.385, 0.229, 0.229, -0.136, 0.707, 0.707, 0.000, 0.248, 0.248, -0.002, 0.923, 0.000, -0.385, 0.324, 0.000, -0.136, 1.000, 0.000, -0.000, 0.351, -0.000, -0.002, 0.653, -0.653, -0.385, 0.229, -0.229, -0.136, 0.707, -0.707, -0.000, 0.248, -0.248, -0.002, 0.000, -0.923, -0.385, 0.000, -0.324, -0.136, 0.000, -1.000, -0.000, 0.000, -0.351, -0.002, -0.653, -0.653, -0.385, -0.229, -0.229, -0.136, -0.707, -0.707, -0.000, -0.248, -0.248, -0.002, -0.923, 0.000, -0.385, -0.324, 0.000, -0.136, -1.000, -0.000, -0.000, -0.351, -0.000, -0.002, -0.653, 0.653, -0.385, -0.229, 0.229, -0.136, -0.707, 0.707, 0.000, -0.248, 0.248, -0.002, -0.000, 0.923, -0.385, -0.000, 0.324, -0.136, -0.000, 1.000, 0.000, -0.000, 0.351, -0.002, 0.653, 0.653, -0.385, 0.229, 0.229, -0.136, 0.707, 0.707, 0.000, 0.248, 0.248, -0.002, 0.498, 0.498, -0.709, 0.176, 0.176, -0.250, 0.653, 0.653, -0.385, 0.229, 0.229, -0.136, 0.705, 0.000, -0.709, 0.248, 0.000, -0.250, 0.923, 0.000, -0.385, 0.324, 0.000, -0.136, 0.498, -0.498, -0.709, 0.176, -0.176, -0.250, 0.653, -0.653, -0.385, 0.229, -0.229, -0.136, 0.000, -0.705, -0.709, 0.000, -0.248, -0.250, 0.000, -0.923, -0.385, 0.000, -0.324, -0.136, -0.498, -0.498, -0.709, -0.176, -0.176, -0.250, -0.653, -0.653, -0.385, -0.229, -0.229, -0.136, -0.705, 0.000, -0.709, -0.248, 0.000, -0.250, -0.923, 0.000, -0.385, -0.324, 0.000, -0.136, -0.498, 0.498, -0.709, -0.176, 0.176, -0.250, -0.653, 0.653, -0.385, -0.229, 0.229, -0.136, -0.000, 0.705, -0.709, -0.000, 0.248, -0.250, -0.000, 0.923, -0.385, -0.000, 0.324, -0.136, 0.498, 0.498, -0.709, 0.176, 0.176, -0.250, 0.653, 0.653, -0.385, 0.229, 0.229, -0.136, 0.269, 0.269, -0.925, 0.095, 0.095, -0.326, 0.498, 0.498, -0.709, 0.176, 0.176, -0.250, 0.381, 0.000, -0.925, 0.134, 0.000, -0.326, 0.705, 0.000, -0.709, 0.248, 0.000, -0.250, 0.269, -0.269, -0.925, 0.095, -0.095, -0.326, 0.498, -0.498, -0.709, 0.176, -0.176, -0.250, 0.000, -0.381, -0.925, 0.000, -0.134, -0.326, 0.000, -0.705, -0.709, 0.000, -0.248, -0.250, -0.269, -0.269, -0.925, -0.095, -0.095, -0.326, -0.498, -0.498, -0.709, -0.176, -0.176, -0.250, -0.381, 0.000, -0.925, -0.134, 0.000, -0.326, -0.705, 0.000, -0.709, -0.248, 0.000, -0.250, -0.269, 0.269, -0.925, -0.095, 0.095, -0.326, -0.498, 0.498, -0.709, -0.176, 0.176, -0.250, -0.000, 0.381, -0.925, -0.000, 0.134, -0.326, -0.000, 0.705, -0.709, -0.000, 0.248, -0.250, 0.269, 0.269, -0.925, 0.095, 0.095, -0.326, 0.498, 0.498, -0.709, 0.176, 0.176, -0.250, }; static int bodyNumTriangleFans = 2; static int bodyTriangleFanIndices[3] = { 0, 60, 120 }; static float bodyInterleavedTriangleFans[120] = { -0.000, 0.000, -1.000, 0.000, 0.000, -0.353, 0.381, 0.000, -0.925, 0.134, 0.000, -0.326, 0.269, -0.269, -0.925, 0.095, -0.095, -0.326, 0.000, -0.381, -0.925, 0.000, -0.134, -0.326, -0.269, -0.269, -0.925, -0.095, -0.095, -0.326, -0.381, 0.000, -0.925, -0.134, 0.000, -0.326, -0.269, 0.269, -0.925, -0.095, 0.095, -0.326, -0.000, 0.381, -0.925, -0.000, 0.134, -0.326, 0.269, 0.269, -0.925, 0.095, 0.095, -0.326, 0.381, 0.000, -0.925, 0.134, 0.000, -0.326, 0.001, 0.000, 1.000, 0.001, 0.000, 0.525, 0.559, 0.559, 0.612, 0.176, 0.176, 0.247, 0.000, 0.790, 0.613, -0.000, 0.248, 0.247, -0.559, 0.559, 0.613, -0.176, 0.176, 0.247, -0.790, 0.000, 0.613, -0.248, -0.000, 0.247, -0.559, -0.559, 0.613, -0.176, -0.176, 0.247, 0.000, -0.790, 0.613, 0.000, -0.248, 0.247, 0.559, -0.559, 0.612, 0.176, -0.176, 0.247, 0.791, 0.000, 0.612, 0.248, -0.000, 0.247, 0.559, 0.559, 0.612, 0.176, 0.176, 0.247, }; #endif // __obj_body kiki/src/bots/KikiBot.cpp0000666000000000000000000004567510320462535014326 0ustar rootroot/* * KikiBot.cpp * kiki */ #include "KikiBot.h" #include "KikiWorld.h" #include "KikiBullet.h" #include "KikiController.h" #include "KikiSound.h" #include "KikiAction.h" #include "KikiPlayer.h" #include "KikiBotFume.h" #include "body.h" #include "tire.h" #include #include //#if defined(__APPLE__) && defined(__MACH__) //#include //#else //#ifdef WIN32 //#include //#include //#else //#include //#endif //#endif // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiBot, KikiPushable ) KIKI_OBJECT_VALUES ( KikiBot, true ) // __________________________________________________________________________________________________ KikiBot::KikiBot () : KikiPushable () { left_tire_rot = 0.0; right_tire_rot = 0.0; last_fume = 0; status = new KikiBotStatus (this); move = false; push = false; jump = false; shoot = false; jump_once = false; spiked = false; died = false; move_action = NULL; rotate_action = NULL; dir_sgn = 1.0; addAction (new KikiAction (this, ACTION_NOOP, "noop", 0)); addAction (new KikiAction (this, ACTION_FORWARD, "move forward", 200)); addAction (new KikiAction (this, ACTION_CLIMB_UP, "climb up", 200)); addAction (new KikiAction (this, ACTION_CLIMB_DOWN, "climb down", 500)); addAction (new KikiAction (this, ACTION_TURN_LEFT, "turn left", 200)); addAction (new KikiAction (this, ACTION_TURN_RIGHT, "turn right", 200)); addAction (new KikiAction (this, ACTION_JUMP, "jump", 120)); addAction (new KikiAction (this, ACTION_JUMP_FORWARD, "jump forward", 200)); addAction (new KikiAction (this, ACTION_FALL_FORWARD, "fall forward", 200)); addAction (new KikiAction (this, ACTION_SHOOT, "shoot", 200, KikiAction::REPEAT)); getActionWithId (ACTION_FALL)->setDuration (120); addEventWithName ("died"); startTimedAction (getActionWithId (ACTION_NOOP), 500); } // __________________________________________________________________________________________________ KikiBot::~KikiBot () { delete status; } // __________________________________________________________________________________________________ void KikiBot::die () { Controller.timer_event->removeActionsOfObject (this); move = false; jump = false; shoot = false; push = false; getEventWithName ("died")->triggerActions(); died = true; } // __________________________________________________________________________________________________ void KikiBot::reset () { left_tire_rot = 0.0; right_tire_rot = 0.0; last_fume = 0; direction.reset(); orientation.reset(); current_orientation.reset(); rotate_orientation.reset(); climb_orientation.reset(); rest_orientation.reset(); move_action = NULL; move = false; push = false; jump = false; shoot = false; jump_once = false; spiked = false; died = false; } // __________________________________________________________________________________________________ bool KikiBot::isFalling () const { return (move_action && move_action->getId() == ACTION_FALL); } // __________________________________________________________________________________________________ void KikiBot::initAction ( KikiAction * action ) { KikiPos newPos (position); switch (action->getId()) { case ACTION_NOOP: return; case ACTION_FORWARD: newPos += getDir(); break; case ACTION_CLIMB_DOWN: newPos += getDir() + getDown(); break; case ACTION_JUMP: newPos += getUp(); break; case ACTION_JUMP_FORWARD: newPos += getUp() + getDir(); break; case ACTION_FALL_FORWARD: newPos += getDown() + getDir(); break; case ACTION_FALL: if (direction != KVector()) { //KConsole::printf ("bot push fall direction [%f %f %f]", direction[X], direction[Y], direction[Z]); KikiPushable::initAction (action); return; } else newPos += getDown(); break; default: KikiPushable::initAction (action); return; } if (newPos != KikiPos (position)) { //KConsole::printf ("KikiBot::initAction object will move to pos [%d %d %d]", newPos.x, newPos.y, newPos.z); Controller.world->objectWillMoveToPos (this, newPos, action->getDuration()); } } // __________________________________________________________________________________________________ void KikiBot::performAction ( KikiAction * action ) { int actionId = action->getId(); float relTime = action->getRelativeTime(); float dltTime = action->getRelativeDelta(); switch (actionId) { case ACTION_SHOOT: if (relTime == 0) { KikiBullet::shootFromBot (this); } case ACTION_NOOP: return; case ACTION_FORWARD: left_tire_rot += dir_sgn * dltTime; right_tire_rot += dir_sgn * dltTime; current_position = position + relTime * getDir(); return; case ACTION_JUMP: current_position = position + cos(M_PI_2 - M_PI_2 * relTime) * getUp(); return; case ACTION_JUMP_FORWARD: left_tire_rot += cos(M_PI_2 - M_PI_2 * dltTime); right_tire_rot += cos(M_PI_2 - M_PI_2 * dltTime); current_position = position + (1.0 - cos(M_PI_2 * relTime)) * getDir() + cos(M_PI_2 - M_PI_2 * relTime) * getUp(); return; case ACTION_FALL_FORWARD: current_position = position + cos(M_PI_2 - M_PI_2 * relTime) * getDir() + (1.0 - cos(M_PI_2 * relTime)) * getDown(); return; case ACTION_FALL: if (direction != KVector()) { KikiPushable::performAction (action); return; } current_position = position + relTime * getDown(); return; case ACTION_CLIMB_UP: left_tire_rot += dir_sgn * dltTime/2; right_tire_rot += dir_sgn * dltTime/2; climb_orientation = KQuaternion::rotationAroundVector(dir_sgn * relTime * -90.0, KVector(1,0,0)); break; case ACTION_CLIMB_DOWN: left_tire_rot += dir_sgn * dltTime; right_tire_rot += dir_sgn * dltTime; if (relTime <= 0.2) { current_position = position + (relTime/0.2)/2 * getDir(); } else if (relTime >= 0.8) { climb_orientation = KQuaternion::rotationAroundVector(dir_sgn * 90.0, KVector(1,0,0)); current_position = position + getDir() + (0.5+(relTime-0.8)/0.2/2) * getDown(); } else { climb_orientation = KQuaternion::rotationAroundVector(dir_sgn * (relTime-0.2)/0.6 * 90.0, KVector(1,0,0)); KVector rotVec = (orientation * climb_orientation).rotate(KVector(0.0, 1.0, 0.0)); current_position = position + 0.5 * ((KVector)getDir() + (KVector)getDown() + rotVec); } break; case ACTION_TURN_LEFT: case ACTION_TURN_RIGHT: if (move_action == NULL && relTime == 0.0) // if not performing move action and start of rotation { // update orientation now, so next move action will move in desired direction if (actionId == ACTION_TURN_LEFT) { orientation *= KQuaternion::rotationAroundVector(90.0, KVector(0,1,0)); rest_orientation = KQuaternion::rotationAroundVector(-90.0, KVector(0,1,0)); } else { orientation *= KQuaternion::rotationAroundVector(-90.0, KVector(0,1,0)); rest_orientation = KQuaternion::rotationAroundVector(90.0, KVector(0,1,0)); } } if (actionId == ACTION_TURN_LEFT) { left_tire_rot += -dltTime; right_tire_rot += dltTime; rotate_orientation = KQuaternion::rotationAroundVector(relTime * 90.0, KVector(0,1,0)); } else { left_tire_rot += dltTime; right_tire_rot += -dltTime; rotate_orientation = KQuaternion::rotationAroundVector(relTime * -90.0, KVector(0,1,0)); } break; default: KikiPushable::performAction (action); return; } current_orientation = orientation * climb_orientation * rotate_orientation * rest_orientation; } // __________________________________________________________________________________________________ void KikiBot::finishAction ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_NOOP || actionId == ACTION_SHOOT) return; if (actionId == ACTION_PUSH) { KikiPushable::finishAction (action); return; } if (actionId == ACTION_TURN_LEFT || actionId == ACTION_TURN_RIGHT) { rotate_action = NULL; if (move_action) // bot currently performing a move action -> store rotation in rest_orientation { rest_orientation *= rotate_orientation; rotate_orientation.reset(); } else { orientation *= rotate_orientation * rest_orientation; // update rotation matrix rotate_orientation.reset(); rest_orientation.reset(); } } else if (actionId < ACTION_END) { move_action = NULL; orientation *= climb_orientation; // update climb orientation climb_orientation.reset(); if (rotate_action && actionId != ACTION_JUMP_FORWARD) // bot is currently performing a rotation -> { // take over result of rotation to prevent sliding if (rotate_action->getId() == ACTION_TURN_LEFT) { orientation *= KQuaternion::rotationAroundVector(90.0, KVector(0,1,0)) * rest_orientation; rest_orientation = KQuaternion::rotationAroundVector(-90.0, KVector(0,1,0)); } else { orientation *= KQuaternion::rotationAroundVector(-90.0, KVector(0,1,0)) * rest_orientation; rest_orientation = KQuaternion::rotationAroundVector(90.0, KVector(0,1,0)); } } if (actionId != ACTION_CLIMB_UP) { Controller.world->objectMovedFromPos (this, position); // update world position position = current_position.round(); } if (actionId != ACTION_JUMP_FORWARD && rotate_action == NULL) // if not jumping forward { orientation *= rest_orientation; // update rotation orientation rest_orientation.reset(); } } } // __________________________________________________________________________________________________ void KikiBot::actionFinished ( KikiAction * action ) { int actionId = action->getId(); if (isDead()) { if (!died) die(); if (actionId != ACTION_PUSH && actionId != ACTION_FALL) { // dead player may only fall, nothing else return; } } if (spiked) { move_action = NULL; startTimedAction (getActionWithId(ACTION_NOOP), 0); return; } if (actionId == ACTION_PUSH || direction != KVector()) { KikiPushable::actionFinished (action); return; } if (move_action) return; // action was not a move action -> return // find next action depending on type of finished action and surrounding environment if (actionId == ACTION_JUMP_FORWARD) { KVector forwardPos = position + getDir(); if (Controller.world->isUnoccupiedPos (forwardPos)) { // forward will be empty if (Controller.world->isUnoccupiedPos (forwardPos - getUp())) { // below forward will also be empty move_action = getActionWithId (ACTION_FALL_FORWARD); move_action->takeRest (action); } else { move_action = getActionWithId (ACTION_FORWARD); Controller.sound->playSoundAtPos (KikiSound::BOT_LAND, getPos(), 0.25); } } else // forward will not be empty { if (Controller.world->isUnoccupiedPos (position - getUp())) // below is empty { move_action = getActionWithId (ACTION_CLIMB_UP); Controller.sound->playSoundAtPos (KikiSound::BOT_LAND, getPos(), 0.5); } } } else if (Controller.world->isUnoccupiedPos (position - getUp())) // below will be empty { if (move) // sticky if moving { if (Controller.world->isUnoccupiedPos (position + getDir())) { // forward will be empty if (Controller.world->isOccupiedPos (position + getDir() - getUp())) { // below forward is solid KikiObject * occupant = Controller.world->getOccupantAtPos(position + getDir() - getUp()); if (occupant == NULL || !occupant->isSlippery()) move_action = getActionWithId (ACTION_FORWARD); } } else { KikiObject * occupant = Controller.world->getOccupantAtPos(position + getDir()); if (occupant == NULL || !occupant->isSlippery()) move_action = getActionWithId (ACTION_CLIMB_UP); } } if (move_action == NULL) { move_action = getActionWithId (ACTION_FALL); move_action->takeRest (action); } } else if (actionId == ACTION_FALL || actionId == ACTION_FALL_FORWARD) // landed { if (this == (KikiBot*)Controller.player) { Controller.sound->playSound (KikiSound::BOT_LAND); } else { Controller.sound->playSoundAtPos(KikiSound::BOT_LAND, getPos()); } } if (move_action) { Controller.timer_event->addAction (move_action); return; } if (rotate_action) return; if (move) { moveBot(); } else { dir_sgn = 1.0; if (actionId != ACTION_NOOP) jump_once = false; // keep action chain flowing in order to detect environment changes startTimedAction (getActionWithId (ACTION_NOOP), 0); } } // __________________________________________________________________________________________________ void KikiBot::moveBot () { move_action = NULL; KikiPos forwardPos = position + getDir(); if ((jump || jump_once) && // jump mode or jump activated while moving dir_sgn == 1.0 && // and moving forward Controller.world->isUnoccupiedPos (position + getUp())) // and above empty { if (Controller.world->isUnoccupiedPos (forwardPos + getUp()) && Controller.world->isUnoccupiedPos (forwardPos)) // forward and above forward also empty { move_action = getActionWithId (KikiBot::ACTION_JUMP_FORWARD); } else // no space to jump forward -> jump up { move_action = getActionWithId (KikiBot::ACTION_JUMP); } } else if (Controller.world->isUnoccupiedPos (forwardPos)) // forward is empty { if (Controller.world->isUnoccupiedPos (forwardPos + getDown())) { // below forward also empty move_action = getActionWithId (KikiBot::ACTION_CLIMB_DOWN); } else // forward down is solid { move_action = getActionWithId (KikiBot::ACTION_FORWARD); } } else // forward is not empty { KikiAction * moveAction = getActionWithId (KikiBot::ACTION_FORWARD); if (push && Controller.world->mayObjectPushToPos (this, forwardPos, moveAction->getDuration())) { moveAction->reset(); // player in push mode and pushing object is possible if (Controller.world->isUnoccupiedPos(forwardPos + getDown())) // below forward is empty { move_action = getActionWithId (KikiBot::ACTION_CLIMB_DOWN); } else { move_action = moveAction; } } else // just climb up { move_action = getActionWithId (KikiBot::ACTION_CLIMB_UP); } } // reset the jump once flag (either we jumped or it's not possible to jump at current position) jump_once = false; if (move_action) { move_action->keepRest(); // try to make subsequent actions smooth Controller.timer_event->addAction (move_action); } } // __________________________________________________________________________________________________ void KikiBot::render () { float radius = 0.5; float tireRadius = 0.15; if (died) getDeadColor().glColor(); else getTireColor().glColor(); KMatrix(current_orientation).glMultMatrix(); glPushMatrix(); // tires glRotated(90.0, 0.0, 1.0, 0.0); glTranslated(0.0, 0.0, radius-tireRadius); glRotated(left_tire_rot * 180.0, 0.0, 0.0, 1.0); render_tire; glPopMatrix(); glPushMatrix(); glRotated(90.0, 0.0, 1.0, 0.0); glTranslated(0.0, 0.0, -(radius-tireRadius)); glRotated(right_tire_rot * 180.0, 0.0, 0.0, 1.0); render_tire; glPopMatrix(); if (died == false) getBodyColor().glColor(); render_body; if ((move_action || rotate_action) && died == false) { unsigned int now = Controller.getTime(); if ((int)(now - last_fume) > Controller.mapMsTime (40)) { KikiBotFume * fume = new KikiBotFume (); Controller.world->addObject (fume); fume->setPosition (current_position - getCurrentDir() * 0.4); last_fume = now; } } } kiki/src/bots/KikiBot.h0000666000000000000000000000506610320246407013757 0ustar rootroot/* * KikiBot.h * kiki */ #ifndef __KikiBot #define __KikiBot #include "KikiPushable.h" #include "KikiBotStatus.h" class KikiAction; // __________________________________________________________________________________________________ class KikiBot : public KikiPushable { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiBot (); ~KikiBot (); virtual void initAction ( KikiAction * action ); virtual void performAction ( KikiAction * action ); virtual void finishAction ( KikiAction * action ); virtual void actionFinished ( KikiAction * action ); void setSpiked ( bool b ) { spiked = b; } void setMove ( bool b ) { move = b; } virtual void die (); bool isDead () const { return (status->getHealth() == 0.0); } bool isFalling () const; void renderBody (); virtual void render (); virtual void reset (); virtual const KColor & getBodyColor () = 0; virtual const KColor & getDeadColor () = 0; virtual const KColor & getTireColor () = 0; KikiPos getDown () { return -(orientation.rotate(KVector(0,1,0))); } KikiPos getUp () { return orientation.rotate(KVector(0,1,0)); } KikiPos getDir () { return dir_sgn * orientation.rotate(KVector(0,0,1)); } KVector getCurrentDir () { return current_orientation.rotate(KVector(0,0,1)).normal(); } KikiBotStatus * getStatus () { return status; } enum { ACTION_NOOP = KikiPushable::ACTION_END, ACTION_FORWARD, ACTION_CLIMB_UP, ACTION_CLIMB_DOWN, ACTION_TURN_LEFT, ACTION_TURN_RIGHT, ACTION_JUMP, ACTION_JUMP_FORWARD, ACTION_FALL_FORWARD, ACTION_SHOOT, ACTION_END }; protected: // ..................................................................... PROTECTED bool move; bool push; bool jump; bool shoot; bool jump_once; bool spiked; bool died; float dir_sgn; KikiAction * rotate_action; KikiBotStatus * status; virtual void moveBot (); // .................................... private private: KQuaternion rotate_orientation; KQuaternion climb_orientation; KQuaternion rest_orientation; float left_tire_rot; float right_tire_rot; unsigned int last_fume; }; #endif kiki/src/bots/KikiBotFume.cpp0000666000000000000000000000273207644706102015134 0ustar rootroot/* * KikiBotFume.cpp * kiki */ #include "KikiBotFume.h" #include "KikiController.h" #include "KConsole.h" #include "KikiWorld.h" // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiBotFume, KikiBillBoard ) KIKI_OBJECT_VALUES ( KikiBotFume, false ) // __________________________________________________________________________________________________ KikiBotFume::KikiBotFume () : KikiBillBoard () { size = 0.0; alpha_value = 1.0; startTimer (300); } // __________________________________________________________________________________________________ KColor KikiBotFume::getColor () { KColor c(colors[0]); c.setAlpha (c.getAlpha()*alpha_value); return c; } // __________________________________________________________________________________________________ GLuint KikiBotFume::getTextureId () { return Controller.world->getTextureId (KikiWorld::TEXTURE_GRADIENT); } // __________________________________________________________________________________________________ void KikiBotFume::performAction ( KikiAction * action ) { float relTime = action->getRelativeTime(); size = relTime * 0.25; alpha_value = 1.0 - relTime; } // __________________________________________________________________________________________________ void KikiBotFume::actionFinished ( KikiAction * action ) { delete this; } kiki/src/bots/KikiBotFume.h0000666000000000000000000000136407644706102014601 0ustar rootroot/* * KikiBotFume.h * kiki */ #ifndef __KikiBotFume #define __KikiBotFume #include "KikiBillBoard.h" // __________________________________________________________________________________________________ class KikiBotFume : public KikiBillBoard { KIKI_OBJECT_HEADER protected: // ..................................................................... PROTECTED float alpha_value; public: // ........................................................................ PUBLIC KikiBotFume (); void performAction ( KikiAction * action ); void actionFinished ( KikiAction * action ); KColor getColor (); GLuint getTextureId (); }; #endif kiki/src/bots/KikiBots.h0000666000000000000000000000037507644706102014150 0ustar rootroot/* * KikiBots.h * kiki */ #ifndef __KikiBots #define __KikiBots #include "KikiPlayer.h" #include "KikiMutant.h" #include "KikiBotFume.h" #include "KikiStatusDisplay.h" #include "KikiRecorder.h" #include "KikiPlayback.h" #endif kiki/src/bots/KikiBotStatus.h0000666000000000000000000000227410326711336015165 0ustar rootroot/* * KikiBotStatus.h * kiki */ #ifndef __KikiBotStatus #define __KikiBotStatus class KikiBot; // __________________________________________________________________________________________________ class KikiBotStatus { protected: // ..................................................................... PROTECTED int moves; int min_moves; int par_moves; //float energy; float health; KikiBot * bot; public: // ........................................................................ PUBLIC KikiBotStatus ( KikiBot * b ) { bot = b; moves = 0; min_moves = 100; /*energy =*/ health = 1.0; } int getMoves () const { return moves; } void setMoves ( int m ) { moves = m; } void addMoves ( int m ) { moves += m; } int getMinMoves () const { return min_moves; } void setMinMoves ( int m ) { min_moves = m; } float getHealth () const { return health; } void addHealth (float h) { health = kMax(0.0, health + h); } //float getEnergy () const { return energy; } //void addEnergy (float e) { energy += e; } }; #endif kiki/src/bots/KikiMutant.cpp0000666000000000000000000000435007644706102015041 0ustar rootroot/* * KikiMutant.cpp * kiki */ #include "KikiMutant.h" #include "KikiWorld.h" #include "KikiPlayer.h" #include "KikiSound.h" #include "KikiBullet.h" #include "KikiController.h" #include "KikiAction.h" #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiMutant, KikiBot ) KIKI_OBJECT_VALUES_2 ( KikiMutant, true, dead, tire ) // __________________________________________________________________________________________________ KikiMutant::KikiMutant () : KikiBot() { move = true; } // __________________________________________________________________________________________________ void KikiMutant::die () { Controller.sound->playSound (KikiSound::BOT_DEATH); KikiBot::die(); getActionWithId (ACTION_FALL)->setDuration(40); } // __________________________________________________________________________________________________ void KikiMutant::moveBot () { bool changeOrientation = (RANDOM < 0.3); bool changeJumpMode = (RANDOM < 0.3); bool changeDirection = (RANDOM < 0.3); push = (RANDOM < 0.1); bool fire = (RANDOM < 0.5); bool noop = (RANDOM < 0.05); if (changeDirection) { dir_sgn = (RANDOM < 0.3) ? -1 : 1; } if (changeJumpMode) { if (jump || dir_sgn > 0) // prevent jumping backwards { jump = !jump; } } KikiPos forwardPos = position + getDir(); if (fire && Controller.world->isValidPos(forwardPos)) { KikiBullet::shootFromBot(this); } if (changeOrientation) { if (RANDOM < 0.5) { rotate_action = getActionWithId (KikiBot::ACTION_TURN_LEFT); } else { rotate_action = getActionWithId (KikiBot::ACTION_TURN_RIGHT); } Controller.timer_event->addAction (rotate_action); return; } if (noop) { startTimedAction (getActionWithId (ACTION_NOOP), 666); return; } KikiBot::moveBot(); } kiki/src/bots/KikiMutant.h0000666000000000000000000000157507644706102014514 0ustar rootroot/* * KikiMutant.h * kiki */ #ifndef __KikiMutant #define __KikiMutant #include "KikiBot.h" // __________________________________________________________________________________________________ class KikiMutant : public KikiBot { KIKI_OBJECT_HEADER friend class KikiWorld; protected: // ..................................................................... PROTECTED virtual void moveBot (); public: // ........................................................................ PUBLIC KikiMutant (); void die (); void bulletImpact () { status->addHealth (-0.1); } const KColor & getBodyColor () { return colors[0]; } const KColor & getDeadColor () { return colors[1]; } const KColor & getTireColor () { return colors[2]; } }; #endif kiki/src/bots/KikiPlayback.cpp0000666000000000000000000000745207644706102015325 0ustar rootroot/* * KikiPlayback.cpp * kiki */ #include "KikiPlayback.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiPlayer.h" #include "KikiPython.h" #include #include #include SDL_Thread * KikiPlayback::thread = NULL; bool KikiPlayback::halt = false; std::string KikiPlayback::next_world = ""; // __________________________________________________________________________________________________ int KikiPlayback::playback ( void * data ) { int last_event = 0; std::vector * records = (std::vector*)data; std::vector::iterator iter; for (iter = records->begin(); iter != records->end(); iter++) { SDL_Delay ((*iter)->time - last_event); if (halt) { KConsole::printf ("playback stopped"); return 0; } KKey key ((*iter)->key_name); if ((*iter)->type) Controller.player->handleKeyRelease (key); else Controller.player->handleKey (key); last_event = (*iter)->time; } if (next_world != "") { Controller.python->execute (kStringPrintf ("loadIntroWorld (\"%s\")", next_world.c_str())); // hack alert! } return 0; } // __________________________________________________________________________________________________ void KikiPlayback::start (const std::string filename) { static std::vector key_records; std::string record_string; record_string = kFileReadStringFromFile (filename); std::vector lines = kStringGetComponents (record_string, "\n"); std::vector::iterator iter; if (thread) SDL_KillThread (thread); key_records.clear(); iter = lines.begin(); std::string world_name = (*iter).substr ((*iter).find (":") + 2); if (world_name != Controller.world->getName()) { Controller.python->execute (kStringPrintf ("KikiPyWorld().create (\"%s\")", world_name.substr (0,world_name.size()-1).c_str())); // hack alert! } iter++; Controller.world->setCameraMode (atoi ((*iter).substr ((*iter).find (":") + 2).c_str())); iter++; unsigned int open = (*iter).find("[")+1; unsigned int close = (*iter).find("]"); std::vector values = kStringGetComponents ((*iter).substr(open, close-open), " "); KikiPos pos (atoi(values[0].c_str()), atoi(values[1].c_str()), atoi(values[2].c_str())); Controller.world->moveObjectToPos (Controller.player, pos); iter++; open = (*iter).find("<")+1; close = (*iter).find(">"); values = kStringGetComponents ((*iter).substr(open, close-open), " "); KQuaternion orientation (atof(values[0].c_str()), atof(values[1].c_str()), atof(values[2].c_str()), atof(values[3].c_str())); Controller.player->setOrientation (orientation); iter++; for (; iter != lines.end(); iter++) { if (iter->empty() == false) { if (iter->find("world:") == 0) { next_world = (*iter).substr ((*iter).find (":") + 2); } else { std::vector v = kStringGetComponents ((*iter), " "); key_records.push_back (new KikiKeyRecord (atoi(v[0].c_str()), v[1], atoi(v[2].c_str()))); } } } halt = false; thread = SDL_CreateThread (KikiPlayback::playback, &key_records); } // __________________________________________________________________________________________________ void KikiPlayback::stop () { halt = true; thread = NULL; } kiki/src/bots/KikiPlayback.h0000666000000000000000000000140307644706103014761 0ustar rootroot/* * KikiPlayback.h * kiki */ #ifndef __KikiPlayback #define __KikiPlayback #include "KikiRecorder.h" #include #include #include #include // __________________________________________________________________________________________________ class KikiPlayback { public: // ........................................................................ PUBLIC static void start ( const std::string filename ); static void stop (); static int playback ( void * ); protected: // ..................................................................... PROTECTED static SDL_Thread * thread; static bool halt; static std::string next_world; }; #endif kiki/src/bots/KikiPlayer.cpp0000666000000000000000000006017610320245411015017 0ustar rootroot/* * KikiPlayer.cpp * kiki */ #include "KikiPlayer.h" #include "KikiWorld.h" #include "KikiSound.h" #include "KikiBullet.h" #include "KikiController.h" #include "KikiStatusDisplay.h" #include "KikiScreenText.h" #include "KConsole.h" #include "KikiAction.h" #include "KikiEvent.h" #include "KikiTools.h" #include "KikiRecorder.h" #include "KikiPlayback.h" #include #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiPlayer, KikiBot ) KIKI_OBJECT_VALUES_2 ( KikiPlayer, true, dead, tire ) // __________________________________________________________________________________________________ std::string KikiPlayer::forward_key = "UP"; std::string KikiPlayer::backward_key = "DOWN"; std::string KikiPlayer::turn_left_key = "LEFT"; std::string KikiPlayer::turn_right_key = "RIGHT"; std::string KikiPlayer::shoot_key = "SPACE"; std::string KikiPlayer::jump_key = "CTRL"; std::string KikiPlayer::push_key = "SHIFT"; std::string KikiPlayer::look_up_key = "HOME"; std::string KikiPlayer::look_down_key = "END"; std::string KikiPlayer::view_key = "PAGEDOWN"; KikiActionKey KikiPlayer::actionKeyMapping[] = { {"move forward", &KikiPlayer::forward_key}, {"move backward", &KikiPlayer::backward_key}, {"turn left", &KikiPlayer::turn_left_key}, {"turn right", &KikiPlayer::turn_right_key}, {"shoot", &KikiPlayer::shoot_key}, {"jump", &KikiPlayer::jump_key}, {"push", &KikiPlayer::push_key}, {"look up", &KikiPlayer::look_up_key}, {"look down", &KikiPlayer::look_down_key}, {"change view", &KikiPlayer::view_key}, {NULL, NULL} }; static KKeyRecorder KeyRecorder; static std::string RecordingActionName; // __________________________________________________________________________________________________ KikiPlayer::KikiPlayer () : KikiBot (), KKeyHandler () { look_action = NULL; look_angle = 0.0; new_dir_sgn = 1.0; rotate = 0; recorder = NULL; playback = NULL; flags[KDL_KEYHANDLER_FLAG_HANDLES_RELEASE] = true; addAction (new KikiAction (this, ACTION_LOOK_UP, "look up", 220)); addAction (new KikiAction (this, ACTION_LOOK_DOWN, "look down", 220)); addAction (new KikiAction (this, ACTION_LOOK_RESET, "look reset", 60)); addEventWithName ("keyset"); addEventWithName ("keyset failed"); addEventWithName ("landed"); projection = new KLightingProjection (90.0); projection->updateViewport(); projection->getLight().setCutoff (90.0); projection->getLight().setAttenuation (1.0, 0.0, 0.05); Controller.player_status->setStatus (status); } // __________________________________________________________________________________________________ KikiPlayer::~KikiPlayer () { delete projection; if (recorder) delete recorder; if (playback) delete playback; } // __________________________________________________________________________________________________ std::string KikiPlayer::getActionForKey ( const std::string & keyName ) { int index = 0; while (actionKeyMapping[index].actionName) { if (keyName == *actionKeyMapping[index].keyName) { return actionKeyMapping[index].actionName; } index++; } return ""; } // __________________________________________________________________________________________________ std::string KikiPlayer::getKeyForAction ( const std::string & actionName ) { int index = 0; while (actionKeyMapping[index].actionName) { if (actionName == actionKeyMapping[index].actionName) { return *actionKeyMapping[index].keyName; } index++; } return ""; } // __________________________________________________________________________________________________ void KikiPlayer::setKeyForAction ( const std::string & keyName, const std::string & actionName ) { int index = 0; while (actionKeyMapping[index].actionName) { if (actionName == actionKeyMapping[index].actionName) { (*actionKeyMapping[index].keyName) = keyName; } index++; } } // __________________________________________________________________________________________________ void KikiPlayer::recordKeyForAction ( const std::string & actionName ) { RecordingActionName = actionName; KeyRecorder.startRecordingSequence ((KObject*)this, (KSetStringPtr) &KikiPlayer::setRecordedKey, 1); } // __________________________________________________________________________________________________ void KikiPlayer::setRecordedKey ( const std::string & keyName ) { int index = 0; while (actionKeyMapping[index].actionName) { if (keyName == *(actionKeyMapping[index].keyName) && actionKeyMapping[index].actionName != RecordingActionName) { setKeyForAction ("", actionKeyMapping[index].actionName); } index++; } setKeyForAction (keyName, RecordingActionName); getEventWithName ("keyset")->triggerActions(); } // __________________________________________________________________________________________________ void KikiPlayer::updatePosition () { if (move_action) { float relTime = (Controller.getTime() - move_action->getStart()) / (float)move_action->getDuration(); if (relTime <= 1.0) { switch (move_action->getId()) { case ACTION_FORWARD: current_position = position + relTime * getDir(); break; case ACTION_FALL: current_position = position - relTime * getUp(); break; case ACTION_JUMP_FORWARD: current_position = position + (1.0 - cos(M_PI_2 * relTime)) * getDir() + cos(M_PI_2 - M_PI_2 * relTime) * getUp(); break; case ACTION_FALL_FORWARD: current_position = position + cos(M_PI_2 - M_PI_2 * relTime) * getDir() + (1.0 - cos(M_PI_2 * relTime)) * -getUp(); break; } } } } // __________________________________________________________________________________________________ KProjection * KikiPlayer::getProjection () { // smooth camera movement a little bit float posDelta = Controller.getSpeed() / 10.0; projection->setPosition ((1.0 - posDelta) * projection->getPosition() + posDelta * current_position); KVector playerDir = getCurrentDir(); KVector playerUp = current_orientation.rotate (KVector(0,1,0)).normal(); if (look_angle) // player is looking up or down { projection->setXVector (playerUp.cross (playerDir).normal()); KQuaternion look_rot = KQuaternion::rotationAroundVector (look_angle, projection->getXVector()); projection->setYVector (look_rot.rotate (playerUp)); projection->setZVector (look_rot.rotate (-playerDir)); } else { // smooth camera rotation a little bit float lookDelta = (2.0 - projection->getZVector() * playerDir) * Controller.getSpeed() / 50.0; KVector newLookVector = (1.0 - lookDelta) * projection->getZVector() - lookDelta * playerDir; newLookVector.normalize(); projection->setXVector (playerUp.cross(newLookVector).normal()); projection->setYVector (playerUp); projection->setZVector (newLookVector); } return projection; } // __________________________________________________________________________________________________ KProjection * KikiPlayer::getBehindProjection () { updatePosition (); KVector playerDir = getCurrentDir(); KVector playerUp = current_orientation.rotate(KVector(0,1,0)).normal(); // find a valid camera position KVector botToCamera = (playerUp - 2 * playerDir); float min_f = botToCamera.length(); botToCamera.normalize(); min_f = kMin (Controller.world->getWallDistanceForRay(current_position, botToCamera), min_f); KVector cameraPos = current_position + kMax(min_f, 0.72) * botToCamera; cameraPos = Controller.world->getInsideWallPosWithDelta (cameraPos, 0.2); // smooth camera movement a little bit float posDelta = 0.2; projection->setPosition ((1.0 - posDelta) * projection->getPosition() + posDelta * cameraPos); if (look_angle) { projection->setXVector (playerUp.cross(playerDir).normal()); KQuaternion look_rot = KQuaternion::rotationAroundVector (look_angle, projection->getXVector()); projection->setYVector (look_rot.rotate(playerUp)); projection->setZVector (look_rot.rotate(-playerDir)); } else { // smooth camera rotation a little bit float lookDelta = 0.3; KVector newLookVector = (1.0 - lookDelta) * projection->getZVector() - lookDelta * playerDir; newLookVector.normalize(); projection->setZVector (newLookVector); projection->setXVector (playerUp.cross(newLookVector).normal()); projection->setYVector (newLookVector.cross(projection->getXVector()).normal()); } return projection; } // __________________________________________________________________________________________________ KProjection * KikiPlayer::getFollowProjection () { KVector cameraPos = projection->getPosition(); // current camera position float desiredDistance = 2.0; // desired distance from camera to bot updatePosition (); KVector playerPos = current_position; // desired look pos KVector playerDir = getCurrentDir(); KVector playerUp = current_orientation.rotate (KVector (0,1,0)).normal(); KVector playerRight = (playerDir.cross (playerUp)).normal(); // .................................................................. camera follows bot // first, adjust distance from camera to bot KVector botToCamera (cameraPos - playerPos); // vector from bot to current pos float cameraBotDistance = botToCamera.length(); // distance from camera to bot if (cameraBotDistance >= desiredDistance) { float difference = cameraBotDistance - desiredDistance; float delta = (difference*difference)/400.0; // weight for following speed cameraPos = (1.0 - delta) * cameraPos + delta * playerPos; } else { float difference = desiredDistance - cameraBotDistance; float delta = difference/20.0; // weight for negative following speed cameraPos = (1.0 - delta) * cameraPos + delta * (playerPos + desiredDistance * botToCamera.normal()); } // .................................................................. refining camera position // second, rotate around bot botToCamera = cameraPos - playerPos; KVector botToCameraNormal = botToCamera.normal(); // .................................................................. try view bot from above // if camera below bot, rotate up if (botToCameraNormal * playerUp < 0) { // calculate angle between player to camera vector and player up vector float verticalAngle = RAD2DEG (acos (kMinMax(-1.0, 1.0, botToCameraNormal * playerUp))) - 90.0; cameraPos = playerPos + KQuaternion::rotationAroundVector (verticalAngle/40.0, botToCameraNormal.cross(playerUp)).rotate(botToCamera); botToCamera = cameraPos - playerPos; botToCameraNormal = (cameraPos - playerPos).normal(); } float rot_factor = 1.0; float wall_distance = Controller.world->getWallDistanceForPos (playerPos + botToCamera); if (wall_distance < 0.5) { // .................................................................. avoid piercing walls if (wall_distance < 0.2) { cameraPos = Controller.world->getInsideWallPosWithDelta (cameraPos, 0.2); botToCamera = cameraPos - playerPos; botToCameraNormal = (cameraPos - playerPos).normal(); } rot_factor = 0.5 / (wall_distance-0.2); } // .................................................................. try view bot from behind // calculate horizontal angle between bot orientation and vector to camera KVector mappedToXZ ((botToCamera - playerUp * (botToCamera * playerUp)).normal()); float horizontalAngle = RAD2DEG (acos (kMinMax(-1.0, 1.0, -playerDir * mappedToXZ))); if (botToCameraNormal * playerRight > 0) { horizontalAngle = -horizontalAngle; } cameraPos = playerPos + KQuaternion::rotationAroundVector (horizontalAngle / (rot_factor * 400.0), playerUp).rotate (botToCamera); botToCamera = cameraPos - playerPos; botToCameraNormal = botToCamera.normal(); // .................................................................. finally, set the position projection->setPosition(cameraPos); // .................................................................. refining camera orientation // slowly adjust look direction by interpolating current and desired directions float lookDelta = 2.0 - projection->getZVector() * botToCameraNormal; lookDelta *= lookDelta / 30.0; KVector newLookVector = (1.0 - lookDelta) * projection->getZVector() + lookDelta * botToCameraNormal; newLookVector.normalize(); // slowly adjust up vector by interpolating current and desired up vectors float upDelta = 2.0 - projection->getYVector() * playerUp; upDelta *= upDelta / 100.0; KVector newRightVector = ((1.0 - upDelta) * projection->getYVector() + upDelta * playerUp).cross(newLookVector); newRightVector.normalize(); KVector newUpVector = newLookVector.cross(newRightVector).normal(); // finished interpolations, update camera matrix projection->setZVector (newLookVector); projection->setXVector (newRightVector); projection->setYVector (newUpVector); return projection; } // __________________________________________________________________________________________________ void KikiPlayer::initAction ( KikiAction * action ) { int actionId = action->getId(); switch (actionId) { case ACTION_FORWARD: case ACTION_CLIMB_DOWN: status->addMoves(1); case ACTION_TURN_LEFT: case ACTION_TURN_RIGHT: Controller.sound->playSound(KikiSound::BOT_MOVE); break; case ACTION_JUMP: case ACTION_JUMP_FORWARD: status->addMoves(actionId == ACTION_JUMP ? 1 : 2); Controller.sound->playSound(KikiSound::BOT_JUMP); break; case ACTION_CLIMB_UP: break; case ACTION_SHOOT: break; } KikiBot::initAction(action); } // __________________________________________________________________________________________________ void KikiPlayer::performAction ( KikiAction * action ) { float relTime = action->getRelativeTime(); switch (action->getId()) { case ACTION_NOOP: return; case ACTION_LOOK_UP: look_angle = relTime * -90.0; break; case ACTION_LOOK_DOWN: look_angle = relTime * 90.0; break; case ACTION_LOOK_RESET: if (look_angle > 0) { look_angle = kMin (look_angle, (1.0-relTime) * 90.0); } else { look_angle = kMax (look_angle, (1.0-relTime) * -90.0); } break; default: KikiBot::performAction(action); } } // __________________________________________________________________________________________________ void KikiPlayer::finishAction ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_LOOK_RESET) { look_action = NULL; look_angle = 0.0; } else { if (action == move_action) // move finished, update direction { dir_sgn = new_dir_sgn; } if (actionId != ACTION_LOOK_UP && actionId != ACTION_LOOK_DOWN) { KikiBot::finishAction (action); } if (actionId == ACTION_TURN_LEFT || actionId == ACTION_TURN_RIGHT) { if (rotate) { rotate_action = getActionWithId (rotate); Controller.timer_event->addAction (rotate_action); } } } } // __________________________________________________________________________________________________ void KikiPlayer::die () { Controller.removeKeyHandler (this); KikiBot::die(); Controller.displayText ("game over"); Controller.sound->playSound (KikiSound::BOT_DEATH); Controller.world->setCameraMode (KikiWorld::CAMERA_FOLLOW); } // __________________________________________________________________________________________________ void KikiPlayer::reborn () { Controller.addKeyHandler (this); died = false; } // __________________________________________________________________________________________________ void KikiPlayer::reset () { KikiBot::reset (); Controller.timer_event->removeActionsOfObject (this); look_action = NULL; look_angle = 0.0; new_dir_sgn = 1.0; rotate = 0; recorder = NULL; playback = NULL; } // __________________________________________________________________________________________________ void KikiPlayer::saveRecorder () { if (recorder) { recorder->save(); delete recorder; recorder = NULL; } } // __________________________________________________________________________________________________ void KikiPlayer::startRecorder ( const std::string & file ) { if (recorder) { saveRecorder (); } recorder = new KikiRecorder ( file ); } #define KEY_HANDLED \ if (recorder) recorder->recordKey (key); \ return true; // __________________________________________________________________________________________________ bool KikiPlayer::handleKey ( const KKey & key ) { std::string keyName = key.getUnmodifiedName(); if (keyName == forward_key || keyName == backward_key) { move = true; // try to move as long as the key is not released if (move_action == NULL) // player is currently not performing a move action { // forward or backward direction new_dir_sgn = dir_sgn = (key.getUnmodifiedName() == backward_key) ? -1 : 1; moveBot(); // perform new move action (depending on environment) } else { new_dir_sgn = (keyName == backward_key) ? -1 : 1; } KEY_HANDLED } if (keyName == turn_left_key || keyName == turn_right_key) { rotate = (keyName == turn_left_key) ? ACTION_TURN_LEFT : ACTION_TURN_RIGHT; if (rotate_action == NULL && spiked == false) // player is not performing a rotation and unspiked { rotate_action = getActionWithId (rotate); Controller.timer_event->addAction (rotate_action); } KEY_HANDLED } if (key.name == jump_key) { jump = true; // switch to jump mode until jump_key released jump_once = true; KEY_HANDLED } if (key.name == push_key) { push = true; KEY_HANDLED } if (keyName == shoot_key) { if (shoot == false) { shoot = true; Controller.timer_event->addAction (getActionWithId (ACTION_SHOOT)); } KEY_HANDLED } if (keyName == look_up_key || keyName == look_down_key) { if (!look_action) { look_action = getActionWithId ((key.name == look_up_key) ? ACTION_LOOK_UP : ACTION_LOOK_DOWN); Controller.timer_event->addAction (look_action); } KEY_HANDLED } if (keyName == view_key) { Controller.world->changeCameraMode(); KEY_HANDLED } return false; } #define KEY_RELEASE_HANDLED \ if (recorder) recorder->recordKeyRelease (key); \ return true; // __________________________________________________________________________________________________ bool KikiPlayer::handleKeyRelease ( const KKey & key ) { std::string keyName = key.getUnmodifiedName(); if (keyName == shoot_key) { Controller.timer_event->removeAction (getActionWithId(ACTION_SHOOT)); shoot = false; KEY_RELEASE_HANDLED } if ( keyName == forward_key || keyName == backward_key ) { move = false; KEY_RELEASE_HANDLED } if (key.name == jump_key) { jump = false; if (jump_once) { if (move_action == NULL && Controller.world->isUnoccupiedPos (position + getUp())) { jump_once = false; move_action = getActionWithId (ACTION_JUMP); Controller.sound->playSound (KikiSound::BOT_JUMP); Controller.timer_event->addAction (move_action); } } KEY_RELEASE_HANDLED } if ( keyName == turn_left_key || keyName == turn_right_key ) { rotate = 0; KEY_RELEASE_HANDLED } if (key.name == push_key) { push = false; KEY_RELEASE_HANDLED } if (keyName == look_down_key || keyName == look_up_key) { if (look_action && look_action->getId() != ACTION_LOOK_RESET) { Controller.timer_event->removeAction (look_action); } look_action = getActionWithId (ACTION_LOOK_RESET); Controller.timer_event->addAction (look_action); KEY_RELEASE_HANDLED } if (keyName == view_key) { KEY_RELEASE_HANDLED } return false; } // __________________________________________________________________________________________________ void KikiPlayer::display () { if (Controller.world->getCameraMode() != KikiWorld::CAMERA_INSIDE || Controller.world->getEditMode()) { glPushMatrix (); current_position.glTranslate(); render(); glPopMatrix(); } } // __________________________________________________________________________________________________ const KColor & KikiPlayer::getBodyColor () { if (Controller.world->getCameraMode() == KikiWorld::CAMERA_BEHIND) { static KColor bodyColor; bodyColor = colors[KikiPlayer_base_color]; bodyColor.setAlpha(kMin(0.7, (projection->getPosition()-current_position).length()-0.4)); return bodyColor; } return colors[KikiPlayer_base_color]; } // __________________________________________________________________________________________________ const KColor & KikiPlayer::getTireColor () { if (Controller.world->getCameraMode() == KikiWorld::CAMERA_BEHIND) { static KColor tireColor; tireColor = colors[KikiPlayer_tire_color]; tireColor.setAlpha(kMin(1.0, (projection->getPosition()-current_position).length()-0.4)); return tireColor; } return colors[KikiPlayer_tire_color]; } kiki/src/bots/KikiPlayer.h0000666000000000000000000000701707644706103014476 0ustar rootroot/* * KikiPlayer.h * kiki */ #ifndef __KikiPlayer #define __KikiPlayer #include "KikiBot.h" #include class KikiRecorder; class KikiPlayback; class KProjection; class KLightingProjection; // __________________________________________________________________________________________________ typedef struct { const char * actionName; std::string * keyName; } KikiActionKey; // __________________________________________________________________________________________________ class KikiPlayer : public KikiBot, public KKeyHandler { public: // ........................................................................ PUBLIC // ........................................................................ (con/de)struction KikiPlayer (); ~KikiPlayer (); // ........................................................................ recorder void startRecorder ( const std::string & file ); void saveRecorder (); // ........................................................................ action void initAction ( KikiAction * action ); void performAction ( KikiAction * action ); void finishAction ( KikiAction * action ); // ........................................................................ display void display (); void die (); void reborn (); void reset (); const KColor & getBodyColor (); const KColor & getTireColor (); const KColor & getDeadColor () { return colors[1]; } // ........................................................................ projections KProjection * getProjection (); KProjection * getBehindProjection (); KProjection * getFollowProjection (); // ........................................................................ keys static std::string getKeyForAction ( const std::string & actionName ); static std::string getActionForKey ( const std::string & keyName ); static void setKeyForAction ( const std::string & keyName, const std::string & actionName ); void recordKeyForAction ( const std::string & actionName ); void setRecordedKey ( const std::string & keyName ); bool handleKey ( const KKey & ); bool handleKeyRelease ( const KKey & ); KIKI_OBJECT_HEADER friend class KikiWorld; friend class KikiController; protected: // ..................................................................... PROTECTED static std::string jump_key; static std::string push_key; static std::string forward_key; static std::string backward_key; static std::string turn_left_key; static std::string turn_right_key; static std::string shoot_key; static std::string look_up_key; static std::string look_down_key; static std::string view_key; static KikiActionKey actionKeyMapping[]; void updatePosition (); KLightingProjection * projection; float look_angle; KikiAction * look_action; KikiRecorder * recorder; KikiPlayback * playback; float new_dir_sgn; int rotate; // ........................................................................ action enum enum { ACTION_LOOK_UP = KikiBot::ACTION_END, ACTION_LOOK_DOWN, ACTION_LOOK_RESET, ACTION_END }; }; #endif kiki/src/bots/KikiRecorder.cpp0000666000000000000000000000730207644706103015337 0ustar rootroot/* * KikiRecorder.cpp * kiki */ #include "KikiRecorder.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiPlayer.h" #include #include // __________________________________________________________________________________________________ KikiRecorder::KikiRecorder ( const std::string & file ) { file_name = file; start_time = 0; if (start_time == 0) { start_time = Controller.getTime(); key_records.push_back (new KikiKeyRecord ("world: " + Controller.world->getName())); key_records.push_back (new KikiKeyRecord (kStringPrintf ("camera: %d", Controller.world->getCameraMode()))); KikiPos pos = Controller.player->getPos(); std::string position_string = kStringPrintf ("pos: [%d %d %d]", pos.x, pos.y, pos.z); key_records.push_back (new KikiKeyRecord (position_string)); KQuaternion orientation = Controller.player->getOrientation(); std::string orientation_string = kStringPrintf ("orientation: <%f %f %f %f>", orientation.w, orientation.x, orientation.y, orientation.z); key_records.push_back (new KikiKeyRecord (orientation_string)); } } // __________________________________________________________________________________________________ void KikiRecorder::recordKey ( const KKey & key ) { if (key_records.back()->key_name != key.name || key_records.back()->type != KikiKeyRecord::KEY_PRESS) { key_records.push_back (new KikiKeyRecord (Controller.getTime() - start_time, key.name, KikiKeyRecord::KEY_PRESS)); } } // __________________________________________________________________________________________________ void KikiRecorder::recordKeyRelease ( const KKey & key ) { if (key_records.back()->key_name != key.name || key_records.back()->type != KikiKeyRecord::KEY_RELEASE) { key_records.push_back (new KikiKeyRecord (Controller.getTime() - start_time, key.name, KikiKeyRecord::KEY_RELEASE)); } } // __________________________________________________________________________________________________ void KikiRecorder::reset () { while (key_records.empty() == false) { delete key_records.back(); key_records.pop_back(); } start_time = 0; } // __________________________________________________________________________________________________ void KikiRecorder::save () { //............................................................ 'serialize' the records std::string key_record_string; std::vector::iterator iter; for (iter = key_records.begin(); iter != key_records.end(); iter++) { if ((*iter)->type < KikiKeyRecord::OTHER) { key_record_string.append (kStringPrintf ("%d %s %d\n", (*iter)->time, (*iter)->key_name.c_str(), (*iter)->type)); } else { key_record_string.append (kStringPrintf ("%s\n", (*iter)->key_name.c_str())); } } //............................................................ save the file if (kFileWriteStringToFile (key_record_string, file_name)) { KConsole::printf ("key record saved to file %s", kFileAbsPathName (file_name).c_str()); } else // ooops... { KConsole::printf ("WARNING unable to write record to file %s", kFileAbsPathName (file_name).c_str()); } reset (); } kiki/src/bots/KikiRecorder.h0000666000000000000000000000264007644706103015004 0ustar rootroot/* * KikiRecorder.h * kiki */ #ifndef __KikiRecorder #define __KikiRecorder #include #include // __________________________________________________________________________________________________ typedef struct _KikiKeyRecord { enum { KEY_PRESS, KEY_RELEASE, OTHER }; _KikiKeyRecord ( unsigned int t, const std::string keyName, bool r = KEY_PRESS ) { time = t; key_name = keyName; type = r ? 1 : 0; } _KikiKeyRecord ( const std::string str ) { key_name = str; type = OTHER; } int type; unsigned int time; std::string key_name; } KikiKeyRecord; // __________________________________________________________________________________________________ class KikiRecorder { public: // ........................................................................ PUBLIC KikiRecorder ( const std::string & file ); void recordKey ( const KKey & key ); void recordKeyRelease( const KKey & key ); void save (); void reset (); protected: // ..................................................................... PROTECTED unsigned int start_time; std::string file_name; std::vector key_records; }; #endif kiki/src/bots/KikiStatusDisplay.cpp0000666000000000000000000000403510326757456016413 0ustar rootroot/* * KikiStatusDisplay.cpp * kiki */ #include "KikiStatusDisplay.h" #include "KikiBotStatus.h" #include "KikiCellText.h" #include "KikiAtom.h" #include #include #include #include // __________________________________________________________________________________________________ KikiStatusDisplay::KikiStatusDisplay () : KPickHandler () { depth = INT_MAX - 100; // some below gui and text player_status = NULL; visible = false; projection = new KLightingProjection (45.0, 0.1, 100.0); moves_atom = new KikiMovesAtom (); moves_text = new KikiCellText ("", 0.25); } // __________________________________________________________________________________________________ KikiStatusDisplay::~KikiStatusDisplay () { hide(); delete projection; delete moves_atom; delete moves_text; } // __________________________________________________________________________________________________ void KikiStatusDisplay::setStatus ( KikiBotStatus * botStatus ) { player_status = botStatus; if (player_status) { show (); } else { hide (); } } // __________________________________________________________________________________________________ void KikiStatusDisplay::display ( int mode ) { if (visible && player_status) { projection->initProjection(); glClear(GL_DEPTH_BUFFER_BIT); glTranslatef (-projection->getCurrentAspectRatio()*10.0, -10.0, -30.0); glScalef(4.0,4.0,4.0); float moves_value = (float)(player_status->getMinMoves()-player_status->getMoves())/8.0; moves_atom->setValue (moves_value); moves_atom->display(); glTranslatef (0.0, 0.6, 0.0); moves_text->setText (kStringPrintf("%d (%d)", player_status->getMinMoves()-player_status->getMoves(), player_status->getMinMoves())); moves_text->display(); } } kiki/src/bots/KikiStatusDisplay.h0000666000000000000000000000201510326710161016032 0ustar rootroot/* * KikiStatusDisplay.h * kiki */ #ifndef __KikiStatusDisplay #define __KikiStatusDisplay #include class KikiBotStatus; class KikiCellText; class KikiMovesAtom; // __________________________________________________________________________________________________ class KikiStatusDisplay : public KPickHandler { protected: // ..................................................................... PROTECTED KikiMovesAtom * moves_atom; KikiCellText * moves_text; KikiBotStatus * player_status; bool visible; public: // ........................................................................ PUBLIC KikiStatusDisplay (); ~KikiStatusDisplay (); void setStatus ( KikiBotStatus * botStatus ); void display ( int mode ); void show () { visible = true; } void hide () { visible = false; } bool isVisible () const { return visible; } }; #endif kiki/src/bots/tire.h0000666000000000000000000001706607644706104013403 0ustar rootroot#ifndef __obj_tire #define __obj_tire #define render_tire { \ glInterleavedArrays (GL_N3F_V3F, 0, tireInterleavedQuadStrips); \ for (int i = 0; i < tireNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, tireQuadStripIndices[i]/6, \ (tireQuadStripIndices[i+1] - tireQuadStripIndices[i])/6); \ } \ } static int tireNumQuadStrips = 8; static int tireQuadStripIndices[9] = { 0, 108, 216, 324, 432, 540, 648, 756, 864 }; static float tireInterleavedQuadStrips[864] = { 1.000, 0.000, 0.000, 0.500, 0.000, 0.000, 0.707, -0.707, -0.000, 0.354, -0.354, -0.000, 0.699, 0.000, -0.715, 0.456, 0.000, -0.106, 0.494, -0.494, -0.715, 0.322, -0.322, -0.106, -0.000, 0.000, -1.000, 0.350, 0.000, -0.150, 0.000, 0.000, -1.000, 0.247, -0.247, -0.150, -0.699, 0.000, -0.715, 0.244, 0.000, -0.106, -0.494, 0.494, -0.715, 0.172, -0.172, -0.106, -1.000, -0.000, -0.000, 0.200, 0.000, 0.000, -0.707, 0.707, 0.000, 0.141, -0.141, -0.000, -0.699, -0.000, 0.715, 0.244, -0.000, 0.106, -0.494, 0.494, 0.715, 0.172, -0.172, 0.106, -0.000, -0.000, 1.000, 0.350, -0.000, 0.150, -0.000, -0.000, 1.000, 0.247, -0.247, 0.150, 0.699, -0.000, 0.715, 0.456, -0.000, 0.106, 0.494, -0.494, 0.715, 0.322, -0.322, 0.106, 1.000, 0.000, 0.000, 0.500, 0.000, 0.000, 0.707, -0.707, -0.000, 0.354, -0.354, -0.000, 0.707, -0.707, -0.000, 0.354, -0.354, -0.000, 0.000, -1.000, -0.000, 0.000, -0.500, -0.000, 0.494, -0.494, -0.715, 0.322, -0.322, -0.106, 0.000, -0.699, -0.715, 0.000, -0.456, -0.106, 0.000, 0.000, -1.000, 0.247, -0.247, -0.150, 0.000, 0.000, -1.000, 0.000, -0.350, -0.150, -0.494, 0.494, -0.715, 0.172, -0.172, -0.106, -0.000, 0.699, -0.715, 0.000, -0.244, -0.106, -0.707, 0.707, 0.000, 0.141, -0.141, -0.000, -0.000, 1.000, 0.000, 0.000, -0.200, -0.000, -0.494, 0.494, 0.715, 0.172, -0.172, 0.106, -0.000, 0.699, 0.715, 0.000, -0.244, 0.106, -0.000, -0.000, 1.000, 0.247, -0.247, 0.150, 0.000, -0.000, 1.000, 0.000, -0.350, 0.150, 0.494, -0.494, 0.715, 0.322, -0.322, 0.106, 0.000, -0.699, 0.715, 0.000, -0.456, 0.106, 0.707, -0.707, -0.000, 0.354, -0.354, -0.000, 0.000, -1.000, -0.000, 0.000, -0.500, -0.000, 0.000, -1.000, -0.000, 0.000, -0.500, -0.000, -0.707, -0.707, -0.000, -0.354, -0.354, -0.000, 0.000, -0.699, -0.715, 0.000, -0.456, -0.106, -0.494, -0.494, -0.715, -0.322, -0.322, -0.106, 0.000, 0.000, -1.000, 0.000, -0.350, -0.150, 0.000, 0.000, -1.000, -0.247, -0.247, -0.150, -0.000, 0.699, -0.715, 0.000, -0.244, -0.106, 0.494, 0.494, -0.715, -0.172, -0.172, -0.106, -0.000, 1.000, 0.000, 0.000, -0.200, -0.000, 0.707, 0.707, 0.000, -0.141, -0.141, -0.000, -0.000, 0.699, 0.715, 0.000, -0.244, 0.106, 0.494, 0.494, 0.715, -0.172, -0.172, 0.106, 0.000, -0.000, 1.000, 0.000, -0.350, 0.150, 0.000, -0.000, 1.000, -0.247, -0.247, 0.150, 0.000, -0.699, 0.715, 0.000, -0.456, 0.106, -0.494, -0.494, 0.715, -0.322, -0.322, 0.106, 0.000, -1.000, -0.000, 0.000, -0.500, -0.000, -0.707, -0.707, -0.000, -0.354, -0.354, -0.000, -0.707, -0.707, -0.000, -0.354, -0.354, -0.000, -1.000, -0.000, 0.000, -0.500, -0.000, 0.000, -0.494, -0.494, -0.715, -0.322, -0.322, -0.106, -0.699, 0.000, -0.715, -0.456, 0.000, -0.106, 0.000, 0.000, -1.000, -0.247, -0.247, -0.150, 0.000, 0.000, -1.000, -0.350, 0.000, -0.150, 0.494, 0.494, -0.715, -0.172, -0.172, -0.106, 0.699, 0.000, -0.715, -0.244, 0.000, -0.106, 0.707, 0.707, 0.000, -0.141, -0.141, -0.000, 1.000, 0.000, -0.000, -0.200, -0.000, 0.000, 0.494, 0.494, 0.715, -0.172, -0.172, 0.106, 0.699, -0.000, 0.715, -0.244, -0.000, 0.106, 0.000, -0.000, 1.000, -0.247, -0.247, 0.150, 0.000, -0.000, 1.000, -0.350, -0.000, 0.150, -0.494, -0.494, 0.715, -0.322, -0.322, 0.106, -0.699, -0.000, 0.715, -0.456, -0.000, 0.106, -0.707, -0.707, -0.000, -0.354, -0.354, -0.000, -1.000, -0.000, 0.000, -0.500, -0.000, 0.000, -1.000, -0.000, 0.000, -0.500, -0.000, 0.000, -0.707, 0.707, 0.000, -0.354, 0.354, 0.000, -0.699, 0.000, -0.715, -0.456, 0.000, -0.106, -0.494, 0.494, -0.715, -0.322, 0.322, -0.106, 0.000, 0.000, -1.000, -0.350, 0.000, -0.150, 0.000, 0.000, -1.000, -0.247, 0.247, -0.150, 0.699, 0.000, -0.715, -0.244, 0.000, -0.106, 0.494, -0.494, -0.715, -0.172, 0.172, -0.106, 1.000, 0.000, -0.000, -0.200, -0.000, 0.000, 0.707, -0.707, -0.000, -0.141, 0.141, 0.000, 0.699, -0.000, 0.715, -0.244, -0.000, 0.106, 0.494, -0.494, 0.715, -0.172, 0.172, 0.106, 0.000, -0.000, 1.000, -0.350, -0.000, 0.150, 0.000, -0.000, 1.000, -0.247, 0.247, 0.150, -0.699, -0.000, 0.715, -0.456, -0.000, 0.106, -0.494, 0.494, 0.715, -0.322, 0.322, 0.106, -1.000, -0.000, 0.000, -0.500, -0.000, 0.000, -0.707, 0.707, 0.000, -0.354, 0.354, 0.000, -0.707, 0.707, 0.000, -0.354, 0.354, 0.000, -0.000, 1.000, 0.000, -0.000, 0.500, 0.000, -0.494, 0.494, -0.715, -0.322, 0.322, -0.106, -0.000, 0.699, -0.715, -0.000, 0.456, -0.106, 0.000, 0.000, -1.000, -0.247, 0.247, -0.150, 0.000, 0.000, -1.000, -0.000, 0.350, -0.150, 0.494, -0.494, -0.715, -0.172, 0.172, -0.106, 0.000, -0.699, -0.715, -0.000, 0.244, -0.106, 0.707, -0.707, -0.000, -0.141, 0.141, 0.000, 0.000, -1.000, -0.000, -0.000, 0.200, 0.000, 0.494, -0.494, 0.715, -0.172, 0.172, 0.106, 0.000, -0.699, 0.715, -0.000, 0.244, 0.106, 0.000, -0.000, 1.000, -0.247, 0.247, 0.150, -0.000, -0.000, 1.000, -0.000, 0.350, 0.150, -0.494, 0.494, 0.715, -0.322, 0.322, 0.106, -0.000, 0.699, 0.715, -0.000, 0.456, 0.106, -0.707, 0.707, 0.000, -0.354, 0.354, 0.000, -0.000, 1.000, 0.000, -0.000, 0.500, 0.000, -0.000, 1.000, 0.000, -0.000, 0.500, 0.000, 0.707, 0.707, 0.000, 0.354, 0.354, 0.000, -0.000, 0.699, -0.715, -0.000, 0.456, -0.106, 0.494, 0.494, -0.715, 0.322, 0.322, -0.106, 0.000, 0.000, -1.000, -0.000, 0.350, -0.150, 0.000, 0.000, -1.000, 0.247, 0.247, -0.150, 0.000, -0.699, -0.715, -0.000, 0.244, -0.106, -0.494, -0.494, -0.715, 0.172, 0.172, -0.106, 0.000, -1.000, -0.000, -0.000, 0.200, 0.000, -0.707, -0.707, -0.000, 0.141, 0.141, 0.000, 0.000, -0.699, 0.715, -0.000, 0.244, 0.106, -0.494, -0.494, 0.715, 0.172, 0.172, 0.106, -0.000, -0.000, 1.000, -0.000, 0.350, 0.150, -0.000, -0.000, 1.000, 0.247, 0.247, 0.150, -0.000, 0.699, 0.715, -0.000, 0.456, 0.106, 0.494, 0.494, 0.715, 0.322, 0.322, 0.106, -0.000, 1.000, 0.000, -0.000, 0.500, 0.000, 0.707, 0.707, 0.000, 0.354, 0.354, 0.000, 0.494, 0.494, 0.715, 0.322, 0.322, 0.106, 0.699, -0.000, 0.715, 0.456, -0.000, 0.106, 0.707, 0.707, 0.000, 0.354, 0.354, 0.000, 1.000, 0.000, 0.000, 0.500, 0.000, 0.000, 0.494, 0.494, -0.715, 0.322, 0.322, -0.106, 0.699, 0.000, -0.715, 0.456, 0.000, -0.106, 0.000, 0.000, -1.000, 0.247, 0.247, -0.150, -0.000, 0.000, -1.000, 0.350, 0.000, -0.150, -0.494, -0.494, -0.715, 0.172, 0.172, -0.106, -0.699, 0.000, -0.715, 0.244, 0.000, -0.106, -0.707, -0.707, -0.000, 0.141, 0.141, 0.000, -1.000, -0.000, -0.000, 0.200, 0.000, 0.000, -0.494, -0.494, 0.715, 0.172, 0.172, 0.106, -0.699, -0.000, 0.715, 0.244, -0.000, 0.106, -0.000, -0.000, 1.000, 0.247, 0.247, 0.150, -0.000, -0.000, 1.000, 0.350, -0.000, 0.150, 0.494, 0.494, 0.715, 0.322, 0.322, 0.106, 0.699, -0.000, 0.715, 0.456, -0.000, 0.106, }; #endif // __obj_tire kiki/src/gui/0000777000000000000000000000000010336064534012066 5ustar rootrootkiki/src/gui/KikiCharacter.cpp0000666000000000000000000003513310317776407015313 0ustar rootroot/* * KikiCharacter.cpp * kiki */ #include "KikiCharacter.h" #include "KikiText.h" #include #include #include #define K_INCLUDE_GLU #include "KIncludeTools.h" // __________________________________________________________________________________________________ typedef struct { GLdouble x; GLdouble y; GLdouble z; } KikiCharCoords; // __________________________________________________________________________________________________ static KikiCharCoords KikiCharacterData[][3][30] = { {{ {0,0}, {2,0}, {2,2}, {0,2}, {-1}}, // ! {{0,3}, {2,3}, {2,8}, {0,8}, {-1}}, {{-1}}}, {{ {0,6}, {1,6}, {2,7}, {2,6}, {3,6}, {4,7}, {4,8}, {3,8}, {2,7}, {2,8}, // " {1,8}, {0,7}, {-1}}, {{-1}}, {{-1}}}, {{ {1,0}, {3,0}, {3,1}, {4,1}, {4,0}, {6,0}, {6,1}, {7,1}, {7,3}, {6,3}, // # {6,4}, {7,4}, {7,6}, {6,6}, {6,7}, {4,7}, {4,6}, {3,6}, {3,7}, {1,7}, {1,6}, {0,6}, {0,4}, {1,4}, {1,3}, {0,3}, {0,1}, {1,1}, {-1}}, {{3,3}, {3,4}, {4,4}, {4,3}, {-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,4}, {5,5}, {4,5}, {4,6}, {6,6}, {6,7}, {5,8}, // $ {1,8}, {0,7}, {0,4}, {1,3}, {2,3}, {2,2}, {0,2}, {0,1}, {-1}}, {{3,2}, {3,3}, {4,3}, {4,2}, {-1}}, {{2,5}, {2,6}, {3,6}, {3,5}, {-1}}}, {{ {1,1}, {6,6}, {5,7}, {0,2}, {-1}}, // % {{4,1}, {6,1}, {6,3}, {4,3}, {-1}}, {{0,5}, {2,5}, {2,7}, {0,7}, {-1}}}, {{ {2,1}, {4,1}, {4,3}, {6,3}, {6,5}, {4,5}, {4,7}, {2,7}, {2,5}, {0,5}, // & {0,3}, {2,3}, {-1}}, {{-1}}, {{-1}}}, {{ {0,5}, {1,5}, {2,6}, {2,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, // ' {{ {1,0}, {3,0}, {3,2}, {2,2}, {2,6}, {3,6}, {3,8}, {1,8}, {0,7}, {0,1}, // ka {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {3,1}, {3,7}, {2,8}, {0,8}, {0,6}, {1,6}, {1,2}, {0,2}, // kz {-1}}, {{-1}}, {{-1}}}, {{ {-1}}, {{-1}}, {{-1}}}, // * {{ {2,1}, {4,1}, {4,3}, {6,3}, {6,5}, {4,5}, {4,7}, {2,7}, {2,5}, {0,5}, // + {0,3}, {2,3}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {1,0}, {2,1}, {2,3}, {0,3}, {-1}}, {{-1}}, {{-1}}}, // , {{ {0,3}, {5,3}, {5,5}, {0,5}, {-1}}, {{-1}}, {{-1}}}, // - {{ {0,1}, {2,1}, {2,3}, {0,3}, {-1}}, {{-1}}, {{-1}}}, // . {{ {1,1}, {6,6}, {5,7}, {0,2}, {-1}}, {{-1}}, {{-1}}}, // / {{ {1,0}, {5,0}, {6,1}, {6,7}, {5,8}, {1,8}, {0,7}, {0,1}, {-1}}, // 0 { {2,2}, {4,4}, {4,2}, {-1}}, { {2,4}, {2,6}, {4,6}, {-1}}}, {{ {2,0}, {4,0}, {4,8}, {2,8}, {0,6}, {0,4}, {1,4}, {2,5}, {-1}}, // 1 {{-1}}, {{-1}}}, {{ {0,0}, {6,0}, {6,2}, {3,2}, {6,5}, {6,7}, {5,8}, {1,8}, {0,7}, {0,5}, // 2 {2,5}, {2,6}, {4,6}, {0,2}, {-1}}, {{-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,7}, {5,8}, {1,8}, {0,7}, {0,6}, {4,6}, {4,5}, // 3 {2,5}, {2,3}, {4,3}, {4,2}, {0,2}, {0,1}, {-1}}, {{-1}}, {{-1}}}, {{ {4,0}, {6,0}, {6,8}, {4,8}, {4,5}, {2,5}, {2,8}, {0,8}, {0,3}, {4,3}, // 4 {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {5,0}, {6,1}, {6,4}, {5,5}, {2,5}, {2,6}, {6,6}, {6,8}, {0,8}, // 5 {0,3}, {4,3}, {4,2}, {0,2}, {-1}}, {{-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,4}, {5,5}, {2,5}, {2,6}, {5,6}, {5,8}, {1,8}, // 6 {0,7}, {0,1}, {-1}}, {{2,2}, {2,3}, {4,3}, {4,2}, {-1}}, {{-1}}}, {{ {0,0}, {1,0}, {6,5}, {6,8}, {0,8}, {0,6}, {4,6}, {0,2}, {-1}}, // 7 {{-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,3}, {5,4}, {6,5}, {6,7}, {5,8}, {1,8}, {0,7}, // 8 {0,5}, {1,4}, {0,3}, {0,1}, {-1}}, {{2,5}, {2,6}, {4,6}, {4,5}, {-1}}, {{2,2}, {2,3}, {4,3}, {4,2}, {-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,7}, {5,8}, {1,8}, {0,7}, {0,4}, {1,3}, {4,3}, // 9 {4,2}, {1,2}, {-1}}, {{2,5}, {2,6}, {4,6}, {4,5}, {-1}}, {{-1}}}, {{ {0,1}, {2,1}, {2,3}, {0,3}, {-1}}, // : {{0,5}, {2,5}, {2,7}, {0,7}, {-1}}, {{-1}}}, {{ {0,0}, {1,0}, {2,1}, {2,3}, {0,3}, {-1}}, // ; {{0,5}, {2,5}, {2,7}, {0,7}, {-1}}, {{-1}}}, {{ {4,0}, {5,0}, {5,2}, {3,4}, {5,6}, {5,8}, {4,8}, {0,4}, {-1}}, // < {{-1}}, {{-1}}}, {{ {0,1}, {5,1}, {5,3}, {0,3}, {-1}}, // = {{0,5}, {5,5}, {5,7}, {0,7}, {-1}}, {{-1}}}, {{ {0,0}, {1,0}, {5,4}, {1,8}, {0,8}, {0,6}, {2,4}, {0,2}, {-1}}, // > {{-1}}, {{-1}}}, {{ {2,3}, {4,3}, {6,5}, {6,7}, {5,8}, {1,8}, {0,7}, {0,6}, {4,6}, {2,4}, // ? {-1}}, {{2,0}, {4,0}, {4,2}, {2,2}, {-1}}, {{-1}}}, {{ {1,0}, {5,0}, {5,1}, {2,1}, {1,2}, {1,6}, {2,7}, {4,7}, {5,6}, {5,4}, // @ {4,4}, {4,6}, {3,6}, {2,5}, {2,3}, {3,2}, {5,2}, {6,3}, {6,7}, {5,8}, {1,8}, {0,7}, {0,1}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,3}, {4,3}, {4,0}, {6,0}, {6,7}, {5,8}, {1,8}, {0,7}, // a {-1}}, {{2,5}, {2,6}, {4,6}, {4,5}, {-1}}, {{-1}}}, {{ {0,0}, {5,0}, {6,1}, {6,3}, {5,4}, {6,5}, {6,7}, {5,8}, {0,8}, {-1}}, // b {{2,5}, {2,6}, {4,6}, {4,5}, {-1}}, {{2,2}, {2,3}, {4,3}, {4,2}, {-1}}}, {{ {1,0}, {5,0}, {5,2}, {2,2}, {2,6}, {5,6}, {5,8}, {1,8}, {0,7}, {0,1}, // c {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {5,0}, {6,1}, {6,7}, {5,8}, {0,8}, {-1}}, // d { {2,2}, {2,6}, {4,6}, {4,2}, {-1}}, {{-1}}}, {{ {0,0}, {6,0}, {6,2}, {2,2}, {2,3}, {6,3}, {6,5}, {2,5}, {2,6}, {6,6}, // e {6,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,3}, {6,3}, {6,5}, {2,5}, {2,6}, {6,6}, {6,8}, {0,8}, // f {-1}}, {{-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,5}, {4,5}, {4,2}, {2,2}, {2,6}, {6,6}, {6,8}, // g {1,8}, {0,7}, {0,1}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,3}, {4,3}, {4,0}, {6,0}, {6,8}, {4,8}, {4,5}, {2,5}, // h {2,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, { {{0,0}, {2,0}, {2,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, // i {{ {1,0}, {5,0}, {6,1}, {6,8}, {0,8}, {0,6}, {4,6}, {4,2}, {2,2}, {2,4}, // j {0,4}, {0,1}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,3}, {5,0}, {6,0}, {6,2}, {4,4}, {6,6}, {6,8}, {5,8}, // k {2,5}, {2,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, { {{0,0}, {5,0}, {5,2}, {2,2}, {2,8}, {0,8}, {-1}}, // l {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,5}, {3,4}, {4,5}, {4,0}, {6,0}, {6,8}, {4,8}, {3,7}, // m {2,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,5}, {4,3}, {4,0}, {6,0}, {6,8}, {4,8}, {4,6}, {2,8}, // n {0,8}, {-1}}, {{-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,7}, {5,8}, {1,8}, {0,7}, {0,1}, {-1}}, // o { {2,2}, {2,6}, {4,6}, {4,2}, {-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,3}, {5,3}, {6,4}, {6,7}, {5,8}, {0,8}, {-1}}, // p {{2,5}, {2,6}, {4,6}, {4,5}, {-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,7}, {5,8}, {1,8}, {0,7}, {0,1}, {-1}}, // q { {2,2}, {3,2}, {2,3}, {3,4}, {4,3}, {4,6}, {2,6}, {-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,3}, {3,3}, {4,2}, {4,0}, {6,0}, {6,3}, {5,4}, {6,5}, // r {6,7}, {5,8}, {0,8}, {-1}}, { {2,5}, {2,6}, {4,6}, {4,5}, {-1}}, {{-1}}}, {{ {0,0}, {5,0}, {6,1}, {6,4}, {5,5}, {2,5}, {2,6}, {6,6}, {6,8}, {1,8}, // s {0,7}, {0,4}, {1,3}, {4,3}, {4,2}, {0,2}, {-1}}, {{-1}}, {{-1}}}, {{ {2,0}, {4,0}, {4,6}, {6,6}, {6,8}, {0,8}, {0,6}, {2,6}, {-1}}, // t { {-1}}, {{-1}}}, {{ {1,0}, {5,0}, {6,1}, {6,8}, {4,8}, {4,2}, {2,2}, {2,8}, {0,8}, {0,1}, // u {-1}}, {{-1}}, {{-1}}}, {{ {3,0}, {6,3}, {6,8}, {4,8}, {4,4}, {3,3}, {2,4}, {2,8}, {0,8}, {0,3}, // v {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {3,1}, {4,0}, {6,0}, {6,8}, {4,8}, {4,3}, {3,4}, {2,3}, // w {2,8}, {0,8}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {2,0}, {2,2}, {3,3}, {4,2}, {4,0}, {6,0}, {6,3}, {5,4}, {6,5}, // x {6,8}, {4,8}, {4,6}, {3,5}, {2,6}, {2,8}, {0,8}, {0,5}, {1,4}, {0,3}, {-1}}, {{-1}}, {{-1}}}, {{ {2,0}, {4,0}, {4,3}, {6,5}, {6,8}, {4,8}, {4,6}, {3,5}, {2,6}, {2,8}, // y {0,8}, {0,5}, {2,3}, {-1}}, {{-1}}, {{-1}}}, {{ {0,0}, {6,0}, {6,2}, {2.5,2}, {6,5.5}, {6,8}, {0,8}, {0,6}, {3.5,6}, // z {0,2.5}, {-1}}, {{-1}}, {{-1}}}, {{ {0,9}, {2,9}, {2,10}, {0,10}, {-1}}, // dots for , and {{4,9}, {6,9}, {6,10}, {4,10}, {-1}}, {{-1}}}, {{ {1,9}, {3,9}, {5,11}, {3,11}, {-1}}, // slash for ,, and {{-1}}, {{-1}}}, {{ {3,9}, {5,9}, {3,11}, {1,11}, {-1}}, // backslash for {{-1}}, {{-1}}}, {{ {1,9}, {2,9}, {3,10}, {4,9}, {5,9}, {3,11}, {-1}}, // hat for {{-1}}, {{-1}}}, {{ {1,9}, {2,9}, {3,10}, {4,9}, {6,11}, {5,11}, {4,10}, {3,11}, {-1}}, // tilde for {{-1}}, {{-1}}}, {{ {2,0}, {3,-1}, {2,-2}, {3,-2}, {4,-1}, {3,-0}, {-1}}, // tail for {{-1}}, {{-1}}}, {{ {1,9}, {5,9}, {5,12}, {1,12}, {-1}}, // circle for {{2,10}, {2,11}, {4, 11}, {4,10}, {-1}}, {{-1}}}, }; // __________________________________________________________________________________________________ KikiCharacter::KikiCharacter ( char c ) { addon = 0; if (c >= 97) { character = c - 65; // map lower case to upper case } else if (c < 0) { //KConsole::printf ("KikiCharacter::KikiCharacter character %c (%d)", c, c); switch (c) { case -68: character = 52; addon = 1; break; // case -74: character = 46; addon = 1; break; // case -76: character = 46; addon = 4; break; // case -77: character = 46; addon = 2; break; // case -79: character = 45; addon = 5; break; // case -83: character = 40; addon = 2; break; // case -87: character = 36; addon = 2; break; // case -89: character = 34; addon = 6; break; // case -91: character = 32; addon = 7; break; // case -92: character = 32; addon = 1; break; // case -93: character = 32; addon = 5; break; // case -95: character = 32; addon = 2; break; // case -96: character = 32; addon = 3; break; // default: KConsole::printf ("KikiCharacter::KikiCharacter unknown character %c (%d)", c, c); break; } } else { character = c - 33; // start at ascii '!' } } // __________________________________________________________________________________________________ float KikiCharacter::getWidth () const { float maxWidth = 0.0; int index = 0; while (KikiCharacterData[character][0][index].x >= 0) { float x = KikiCharacterData[character][0][index].x; if (x > maxWidth) maxWidth = x; index++; } return maxWidth; } // __________________________________________________________________________________________________ void KikiCharacter::display () { glPushMatrix(); position.glTranslate(); render(); if (addon) renderCharacter (57+addon); glPopMatrix(); } // __________________________________________________________________________________________________ void KikiCharacter::renderAddon () { if (addon == 4) // umlaute dots { glTranslatef (0,8,0); renderCharacter (13); glTranslatef (4,0,0); renderCharacter (13); } } // __________________________________________________________________________________________________ void KikiCharacter::render () { int list_color = KikiText::list_color; if (list_color >= 0 && KikiText::display_lists[list_color][character]) { glCallList (KikiText::display_lists[list_color][character]); } else { if (list_color >= 0) { KikiText::display_lists[list_color][character] = glGenLists(1); if (KikiText::display_lists[list_color][character]) { glNewList (KikiText::display_lists[list_color][character], GL_COMPILE_AND_EXECUTE); } } renderCharacter (character); if (list_color >= 0 && KikiText::display_lists[list_color][character]) { glEndList(); } } } // __________________________________________________________________________________________________ void KikiCharacter::renderCharacter ( char c ) { int contourIndex; GLUtesselator * tess = gluNewTess (); gluTessNormal (tess, 0.0, 0.0, 1.0); glNormal3f (0.0, 0.0, 1.0); #ifndef WIN32 gluTessCallback (tess, GLU_TESS_BEGIN, (GLvoid (*)())glBegin); gluTessCallback (tess, GLU_TESS_VERTEX, (GLvoid (*)())glVertex3dv); gluTessCallback (tess, GLU_TESS_END, (GLvoid (*)())glEnd); #else gluTessCallback (tess, GLU_TESS_BEGIN, (void (__stdcall *)())glBegin); gluTessCallback (tess, GLU_TESS_VERTEX, (void (__stdcall *)())glVertex3dv); gluTessCallback (tess, GLU_TESS_END, (void (__stdcall *)())glEnd); #endif gluTessBeginPolygon (tess, NULL); for (contourIndex = 0; contourIndex < 3; contourIndex++) { int index = 0; gluTessBeginContour (tess); while (KikiCharacterData[c][contourIndex][index].x >= 0) { gluTessVertex(tess, (GLdouble*)&KikiCharacterData[c][contourIndex][index], &KikiCharacterData[c][contourIndex][index]); index++; } gluTessEndContour (tess); } gluTessEndPolygon(tess); gluDeleteTess(tess); float color_values[4]; glGetFloatv (GL_CURRENT_COLOR, color_values); for (contourIndex = 0; contourIndex < 3; contourIndex++) { int index = 0; glBegin(GL_QUADS); while (KikiCharacterData[c][contourIndex][index].x >= 0) { GLdouble x = KikiCharacterData[c][contourIndex][index].x; GLdouble y = KikiCharacterData[c][contourIndex][index].y; GLdouble nx, ny; if (KikiCharacterData[c][contourIndex][index+1].x >= 0) { nx = KikiCharacterData[c][contourIndex][index+1].x; ny = KikiCharacterData[c][contourIndex][index+1].y; } else { nx = KikiCharacterData[c][contourIndex][0].x; ny = KikiCharacterData[c][contourIndex][0].y; } KVector normal(KVector(0,0,-1).cross(KVector(nx,ny,0)-KVector(x,y,0))); glNormal3f(normal[X], normal[Y], normal[Z]); glVertex3f (x, y, 0.0); glColor4f (color_values[R], color_values[G], color_values[B], 0.0); glVertex3f (x, y, -KikiText::bevel_depth); glVertex3f (nx, ny, -KikiText::bevel_depth); glColor4fv (color_values); glVertex3f (nx, ny, 0.0); index++; } glEnd(); } } kiki/src/gui/KikiCharacter.h0000666000000000000000000000161107644706104014746 0ustar rootroot/* * KikiCharacter.h * kiki */ #ifndef __KikiCharacter #define __KikiCharacter #include // __________________________________________________________________________________________________ class KikiCharacter { protected: // ..................................................................... PROTECTED char character; char addon; KVector position; public: // ........................................................................ PUBLIC KikiCharacter ( char ); virtual void display (); virtual void render (); virtual void renderAddon (); virtual void renderCharacter ( char ); char getCharacter () const { return character + 33; } void setPosition ( const KVector & pos ) { position = pos; } virtual float getWidth () const; }; #endif kiki/src/gui/KikiColumnMenu.cpp0000666000000000000000000001144210326443251015462 0ustar rootroot/* * KikiColumnMenu.cpp * kiki */ #include "KikiColumnMenu.h" #include // __________________________________________________________________________________________________ KikiColumnMenu::KikiColumnMenu ( int maxColumnItems, int activeItem ) : KikiMenu (activeItem) { max_column_items = maxColumnItems; column_spacing = 6.0; KikiText::flags[ALIGN_CENTER] = false; } // __________________________________________________________________________________________________ void KikiColumnMenu::alignItems () { // ............................................................................ align text lines int numLines = menu_items.size(); width = 0.0; height = 0.0; float value_offset = 0.0; float value_width = 0.0; float extra_width = 0.0; for (std::vector::iterator iter = menu_items.begin(); iter != menu_items.end(); iter++) { if ((*iter)->getWidth() > width) width = (*iter)->getWidth(); height += (*iter)->getHeight() + line_spacing; if ((*iter)->value_text) { value_offset = kMax ((*iter)->item_text->getWidth(), value_offset); value_width = kMax ((*iter)->value_text->getWidth(), value_width); } if ((*iter)->extra_text) { extra_width = kMax ((*iter)->extra_text->getWidth(), extra_width); } } if (value_offset == 0.0) { value_offset = width/2.0; } else { width = kMax (width, value_offset + value_width + extra_width); } float currentHeight; int columns = (int)ceil (numLines / (float)max_column_items); int column_items = (int) ceil (numLines / (float)columns); float column_offset; int column_line_index = 0; int column_index = -1; float column_width = width + column_spacing; width = columns * column_width; height = height / columns + 2 * column_spacing; for (int lineIndex = 0; lineIndex < numLines; lineIndex++) { if (column_line_index % column_items == 0) { column_index++; column_offset = - columns * column_width / 2.0 + column_index * column_width + column_width / 2.0; column_line_index = 0; currentHeight = menu_items[lineIndex]->getHeight() + column_spacing; } else { currentHeight += menu_items[lineIndex]->getHeight() + line_spacing; } float yOffset = -(currentHeight - height/2.0); column_line_index++; if (KikiText::flags[ALIGN_CENTER]) { if (menu_items[lineIndex]->value_text) { menu_items[lineIndex]->item_text->setPosition (KVector (-column_width/2.0 + value_offset + column_offset - menu_items[lineIndex]->item_text->getWidth(), yOffset, 0.0)); menu_items[lineIndex]->value_text->setPosition (KVector (-column_width/2.0 + value_offset + column_offset, yOffset, 0.0)); } else { menu_items[lineIndex]->item_text->setPosition (KVector (menu_items[lineIndex]->item_text->getWidth()/2.0 + column_offset, yOffset, 0.0)); } } else { menu_items[lineIndex]->item_text->setPosition (KVector (column_offset - column_width / 2.0, yOffset, 0.0)); if (menu_items[lineIndex]->value_text) { menu_items[lineIndex]->value_text->setPosition (KVector (column_offset - column_width / 2.0 + value_offset, yOffset, 0.0)); } if (menu_items[lineIndex]->extra_text) { menu_items[lineIndex]->extra_text->setPosition (KVector (column_offset + column_width / 2.0 - extra_width, yOffset, 0.0)); } } } // ............................................................................ adjust projection float distance = kMax (width / projection->getCurrentAspectRatio(), height); projection->KMatrix::reset(); projection->translate (0.0, 0.0, distance); ((KLightingProjection*)projection)->setLightOffset (KVector (-width / (projection->getCurrentAspectRatio() * 2.0), height, 0.0)); projection->setZFar (distance + 10); projection->setZNear (distance - 10); } kiki/src/gui/KikiColumnMenu.h0000666000000000000000000000137710326443317015140 0ustar rootroot/* * KikiColumnMenu.h * kiki */ #ifndef __KikiColumnMenu #define __KikiColumnMenu #include "KikiMenu.h" // __________________________________________________________________________________________________ class KikiColumnMenu : public KikiMenu { public: // ........................................................................ PUBLIC // ........................................................................ (con|de)struction KikiColumnMenu ( int maxColumnItems = 10, int selectedItem = -1 ); virtual void alignItems (); protected: // ..................................................................... PROTECTED float column_spacing; int max_column_items; }; #endif kiki/src/gui/KikiGUI.cpp0000666000000000000000000000620510320557650014030 0ustar rootroot/* * KikiGUI.cpp */ #include "KikiGUI.h" #include "KikiController.h" #include "KikiSound.h" #include "KikiPython.h" #include #include #include #include #include #include #include #include #include // __________________________________________________________________________________________________ KikiGUI::KikiGUI () : KMenuWindow () { depth = INT_MAX-1; } // __________________________________________________________________________________________________ void KikiGUI::init () { KMenuItem * item; KMenu * fileMenu = new KMenu(); KMenu * viewMenu = new KMenu(); addMenuItem(new KSubMenuItem ("file", fileMenu)); fileMenu->addChild(item = new KMenuItem ("quit", Controller.quit_key)); item->addReceiverCallback(&Controller, (KCallbackPtr)&KikiController::quit ); addMenuItem(new KSubMenuItem ("view", viewMenu)); viewMenu->addChild(item = new KStatusMenuItem ("hide python", "show python", "p")); item->addReceiverCallback(Controller.python, (KSetBoolPtr)&KWindow::setVisibility ); item->setProviderCallback(Controller.python, (KGetBoolPtr)&KWindow::getVisibility ); viewMenu->addChild(item = new KStatusMenuItem ("hide console", "show console", "META_e")); item->addReceiverCallback(KConsole::getConsole(), (KSetBoolPtr)&KConsole::setVisibility ); item->setProviderCallback(KConsole::getConsole(), (KGetBoolPtr)&KConsole::getVisibility ); viewMenu->addChild(item = new KStatusMenuItem ("hide shortcuts", "show shortcuts", "s")); item->addReceiverCallback(this, (KSetBoolPtr)&KikiGUI::setShowShortCuts ); item->setProviderCallback(this, (KGetBoolPtr)&KikiGUI::getShowShortCuts ); viewMenu->addChild(item = new KStatusMenuItem ("hide menu", "show menu", "m")); item->addReceiverCallback(this, (KSetBoolPtr)&KikiGUI::setVisibility ); item->setProviderCallback(this, (KGetBoolPtr)&KikiGUI::getVisibility ); viewMenu->addChild(item = new KMenuItem ("save screenshot", "F1")); item->addReceiverCallback(&Controller, (KCallbackPtr)&KikiController::saveScreenShot ); viewMenu->addChild(item = new KStatusMenuItem ("hide fps", "show fps", "ALT_f")); item->addReceiverCallback(&Controller, (KSetBoolPtr)&KikiController::setDisplayFps ); item->setProviderCallback(&Controller, (KGetBoolPtr)&KikiController::getDisplayFps ); layout(); initializeIds(); } // -------------------------------------------------------------------------------------------------------- void KikiGUI::layout () { widget->layout(); } // -------------------------------------------------------------------------------------------------------- void KikiGUI::setShowShortCuts ( bool b ) { if (b != KMenu::show_shortcuts) { KMenu::show_shortcuts = b; layout(); } } // -------------------------------------------------------------------------------------------------------- bool KikiGUI::getShowShortCuts () const { return KMenu::show_shortcuts; } kiki/src/gui/KikiGUI.h0000666000000000000000000000134607644706104013503 0ustar rootroot/* * KikiGUI.h */ #ifndef __KikiGUI #define __KikiGUI #include "KikiGUI.h" #include "KikiMenu.h" #include "KikiScrollMenu.h" #include "KikiColumnMenu.h" #include "KikiPageText.h" #include "KikiScreenText.h" #include class KButtonBox; class KButton; class KLabel; // __________________________________________________________________________________________________ class KikiGUI : public KMenuWindow { public: // ........................................................................ PUBLIC KikiGUI (); void init (); void layout (); void setShowShortCuts ( bool ); bool getShowShortCuts () const; }; #endif kiki/src/gui/KikiMenu.cpp0000666000000000000000000003131010326704731014303 0ustar rootroot/* * KikiMenu.cpp * kiki */ #include "KikiMenu.h" #include "KikiTextLine.h" #include "KikiController.h" #include "KikiSound.h" #include #include #include // __________________________________________________________________________________________________ // __________________________________________________________________________________________________ KikiMenu::KikiMenu ( int selectedItem ) : KikiScreenText () { index_offset = 0; circular = true; if (selectedItem < 0) { active_index = 0; Controller.sound->playSound (KikiSound::MENU_FADE); } else { active_index = selectedItem; getActionWithId (ACTION_SHOW)->setDuration (0); getActionWithId (ACTION_HIDE)->setDuration (0); fade_value = 1.0; } addEventWithName ("next"); addEventWithName ("previous"); addEventWithName ("changed"); escape_active = true; show(); } // __________________________________________________________________________________________________ void KikiMenu::setCurrentIndex (int index) { active_index = 0; } // __________________________________________________________________________________________________ KikiMenuItem * KikiMenu::newItem ( const std::string & itemText, KikiAction * itemAction ) { std::string item_text (itemText); std::string event_name (itemText); unsigned int pos; float scale_factor = 1.0; KikiMenuItem * menu_item = new KikiMenuItem (); if ((pos = item_text.find ("$event(")) != std::string::npos) { item_text.erase (pos, pos+7); event_name = item_text.substr (pos, item_text.find (")", pos)); item_text.erase (pos, item_text.find (")", pos)+1); } if ((pos = item_text.find ("$no_item")) != std::string::npos) { item_text.erase (pos, pos+8); menu_item->ignore = true; } else { addEventWithName (event_name); menu_item->event_name = event_name; if (itemAction) getEventWithName (event_name)->addAction (itemAction); } if ((pos = item_text.find ("|")) != std::string::npos) { std::string valueText(item_text.substr (pos+1, item_text.size())); item_text.erase (pos, item_text.size()); if ((pos = valueText.find("|")) != std::string::npos) { menu_item->extra_text = new KikiTextLine (valueText.substr (pos+1, valueText.size()), scale_factor); valueText.erase (pos, valueText.size()); } menu_item->value_text = new KikiTextLine (valueText, scale_factor); } menu_item->item_text = new KikiTextLine (item_text); return menu_item; } // __________________________________________________________________________________________________ void KikiMenu::addItem ( const std::string & itemText, KikiAction * itemAction, bool option ) { menu_items.push_back (newItem (itemText, itemAction)); menu_items.back()->option = option; alignItems(); } // __________________________________________________________________________________________________ void KikiMenu::alignItems () { // ............................................................................ align text lines int numLines = menu_items.size(); width = 0.0; height = 0.0; float value_offset = 0.0; float value_width = 0.0; for (std::vector::iterator iter = menu_items.begin(); iter != menu_items.end(); iter++) { if ((*iter)->getWidth() > width) width = (*iter)->getWidth(); height += (*iter)->getHeight() + line_spacing; if ((*iter)->value_text) { value_offset = kMax ((*iter)->item_text->getWidth(), value_offset); value_width = kMax ((*iter)->value_text->getWidth(), value_width); } } if (value_offset == 0.0) { value_offset = width/2.0; } else { width = kMax (width, value_offset + value_width); } float currentHeight = menu_items[0]->getHeight(); for (int lineIndex = 0; lineIndex < numLines; lineIndex++) { float yOffset = -(currentHeight - height/2.0); currentHeight += menu_items[lineIndex]->getHeight() + line_spacing; if (KikiText::flags[ALIGN_CENTER]) { if (menu_items[lineIndex]->value_text) { menu_items[lineIndex]->item_text->setPosition (KVector (-width/2.0 + value_offset - menu_items[lineIndex]->item_text->getWidth(), yOffset, 0.0)); menu_items[lineIndex]->value_text->setPosition (KVector (-width/2.0 + value_offset, yOffset, 0.0)); } else { menu_items[lineIndex]->item_text->setPosition (KVector (-menu_items[lineIndex]->item_text->getWidth()/2.0, yOffset, 0.0)); } } else { menu_items[lineIndex]->item_text->setPosition(KVector(0.0, yOffset, 0.0)); if (menu_items[lineIndex]->value_text) { menu_items[lineIndex]->value_text->setPosition (KVector (value_offset, yOffset, 0.0)); } } } // ............................................................................ adjust projection float distance = kMax (width / projection->getCurrentAspectRatio(), height) * 1.2; projection->KMatrix::reset(); projection->translate (0.0, 0.0, distance); ((KLightingProjection*)projection)->setLightOffset (KVector (-width / (projection->getCurrentAspectRatio() * 2.0), height, 0.0)); projection->setZFar (distance + 10); projection->setZNear (distance - 10); } // __________________________________________________________________________________________________ void KikiMenu::performAction ( KikiAction * action ) { KikiScreenText::performAction (action); if (action->getId() == ACTION_SHOW) { fade_value = 1.0; } } // __________________________________________________________________________________________________ void KikiMenu::actionFinished ( KikiAction * action ) { if (action->getId() == ACTION_HIDE) { if (active_index >= 0) { getEventWithName (currentItem()->event_name)->triggerActions(); } else { getEventWithName ("hide")->triggerActions(); } Controller.timer_event->addAction (getActionWithId (ACTION_DELETE)); } else { KikiScreenText::actionFinished (action); } } // __________________________________________________________________________________________________ void KikiMenu::nextItem () { do { if (circular) active_index = (active_index + 1) % menu_items.size(); else active_index = kMin(active_index + 1, menu_items.size()-1); } while (menu_items[active_index]->ignore); } // __________________________________________________________________________________________________ void KikiMenu::previousItem () { do { if (circular) { if (active_index > 0) active_index--; else active_index = (int)menu_items.size() - 1; } else { active_index = kMax(active_index - 1, 0); } } while (menu_items[active_index]->ignore); } // __________________________________________________________________________________________________ bool KikiMenu::handleKey ( const KKey & key ) { std::string keyName = key.getUnmodifiedName (); if (keyName == "DOWN") { nextItem (); getEventWithName ("next")->triggerActions(); getEventWithName ("changed")->triggerActions(); Controller.sound->playSound (KikiSound::MENU_ITEM); } else if (keyName == "UP") { previousItem (); getEventWithName ("previous")->triggerActions(); getEventWithName ("changed")->triggerActions(); Controller.sound->playSound (KikiSound::MENU_ITEM); } else if (keyName == "ESCAPE" && escape_active) { Controller.sound->playSound (KikiSound::MENU_ABORT); active_index = -1; getActionWithId (ACTION_HIDE)->setDuration (500); Controller.timer_event->addAction (getActionWithId (ACTION_HIDE)); KEventHandler::removeFocusKeyHandler (this); } else if (keyName == "RETURN" || keyName == "SPACE") { if (currentItem()->ignore == false) { Controller.sound->playSound (KikiSound::MENU_SELECT); getEventWithName (currentItem()->event_name)->triggerActions(); Controller.timer_event->addAction (getActionWithId (ACTION_DELETE)); KEventHandler::removeFocusKeyHandler (this); } } else if (keyName == "RIGHT" ) { if (currentItem()->option == true && currentItem()->ignore == false) { Controller.sound->playSound (KikiSound::MENU_SELECT); getEventWithName (currentItem()->event_name)->triggerActions(); Controller.timer_event->addAction (getActionWithId (ACTION_DELETE)); KEventHandler::removeFocusKeyHandler (this); } } else if (keyName == "F1") { Controller.saveScreenShot(); } else if ( key.name == Controller.quit_key) { SDL_Event event; event.type = SDL_QUIT; SDL_PushEvent (&event); } return true; } // __________________________________________________________________________________________________ void KikiMenu::display () { for (int index = 0; index < (int)menu_items.size(); index++) { int value_color = base_color; if (index == active_index - index_offset) { glPushMatrix(); glScalef (1.0, 1.0, 2.0); glTranslatef (0, 0, bevel_depth); list_color = bright_color; if (menu_items[index]->value_text) { value_color = base_color; } } else { if (menu_items[index]->value_text) { value_color = dark_color; list_color = base_color; } else { list_color = dark_color; } } if (fade_value != 1.0) { color = KikiText::colors[list_color]; color.setAlpha (fade_value); color.glColor(); list_color = -1; } else { KikiText::colors[list_color].glColor(); } menu_items[index]->item_text->display(); if (menu_items[index]->value_text) { list_color = value_color; if (fade_value != 1.0) { color = KikiText::colors[list_color]; color.setAlpha (fade_value); color.glColor(); list_color = -1; } else { KikiText::colors[list_color].glColor(); } menu_items[index]->value_text->display(); if (menu_items[index]->extra_text) { menu_items[index]->extra_text->display(); } } if (index == active_index - index_offset) { glPopMatrix(); } } } // __________________________________________________________________________________________________ KikiMenuItem * KikiMenu::currentItem() { if (active_index >= 0) return menu_items[active_index]; return NULL; } // __________________________________________________________________________________________________ // __________________________________________________________________________________________________ KikiMenuItem::KikiMenuItem () { ignore = false; option = false; item_text = NULL; value_text = NULL; extra_text = NULL; } // __________________________________________________________________________________________________ float KikiMenuItem::getWidth () const { float width = 0.0; if (item_text) width += item_text->getWidth(); if (value_text) width += value_text->getWidth(); return width; } // __________________________________________________________________________________________________ float KikiMenuItem::getHeight () const { float height = 0.0; if (item_text) height = item_text->getHeight(); if (value_text) height = kMax (value_text->getHeight(), height); return height; } kiki/src/gui/KikiMenu.h0000666000000000000000000000374010326704216013754 0ustar rootroot/* * KikiMenu.h * kiki */ #ifndef __KikiMenu #define __KikiMenu #include "KikiScreenText.h" #include "KikiTextLine.h" // __________________________________________________________________________________________________ class KikiMenuItem { public: KikiMenuItem (); bool ignore; bool option; KikiTextLine * item_text; KikiTextLine * value_text; KikiTextLine * extra_text; std::string event_name; float getWidth () const; float getHeight () const; }; // __________________________________________________________________________________________________ class KikiMenu : public KikiScreenText { public: // ........................................................................ PUBLIC // ........................................................................ (con|de)struction KikiMenu ( int selectedItem = -1 ); // ........................................................................ menu items virtual void addItem ( const std::string & itemText, KikiAction * action = 0, bool option = false); virtual KikiMenuItem * currentItem (); virtual void setCurrentIndex (int index); // ........................................................................ void display (); void performAction ( KikiAction * action ); void actionFinished ( KikiAction * action ); virtual bool handleKey ( const KKey & key ); void setEscapeActive ( bool active = true ) { escape_active = active; } virtual void alignItems (); bool circular; protected: // ..................................................................... PROTECTED int index_offset; int active_index; std::vector menu_items; bool escape_active; KikiMenuItem * newItem ( const std::string & itemText, KikiAction * action = 0 ); virtual void nextItem (); virtual void previousItem (); }; #endif kiki/src/gui/KikiPageText.cpp0000666000000000000000000001043007644706105015126 0ustar rootroot/* * KikiPageText.cpp * kiki */ #include "KikiPageText.h" #include "KikiTextLine.h" #include "KikiController.h" #include "KikiSound.h" #include #include // __________________________________________________________________________________________________ KikiPageText::KikiPageText ( const std::string & pageText, bool nextPage, bool previousPage ) : KikiScreenText () { Controller.sound->playSound (KikiSound::MENU_FADE); setText (pageText, bright_color); addAction (new KikiAction (this, ACTION_NEXT_PAGE, "next")); addAction (new KikiAction (this, ACTION_PREVIOUS_PAGE, "previous")); if (nextPage) addEventWithName ("next"); if (previousPage) addEventWithName ("previous"); show(); } // __________________________________________________________________________________________________ void KikiPageText::actionFinished ( KikiAction * action ) { switch (action->getId()) { case ACTION_NEXT_PAGE: if (getEventWithName ("next")) { getEventWithName ("next")->triggerActions(); } Controller.timer_event->addAction (getActionWithId (ACTION_DELETE)); break; case ACTION_PREVIOUS_PAGE: if (getEventWithName ("previous")) { getEventWithName ("previous")->triggerActions(); } Controller.timer_event->addAction (getActionWithId (ACTION_DELETE)); break; default: KikiScreenText::actionFinished (action); } } // __________________________________________________________________________________________________ bool KikiPageText::handleKey ( const KKey & key ) { bool retval = false; std::string keyName = key.getUnmodifiedName (); if (keyName == "DOWN" || keyName == "PAGEDOWN" || keyName == "RIGHT" || keyName == "RETURN" || keyName == "SPACE") { if (getEventWithName ("next")) { Controller.sound->playSound (KikiSound::MENU_SELECT); startTimedAction (getActionWithId (ACTION_NEXT_PAGE)); } else { KikiEvent * prevEvent = getEventWithName ("previous"); if (prevEvent) { events.erase (std::find (events.begin(), events.end(), prevEvent)); delete prevEvent; } Controller.sound->playSound (KikiSound::MENU_ABORT); Controller.timer_event->addAction (getActionWithId (ACTION_HIDE)); } retval = true; } else if (keyName == "UP" || keyName == "PAGEUP" || keyName == "LEFT") { if (getEventWithName ("previous")) { Controller.sound->playSound (KikiSound::MENU_SELECT); startTimedAction (getActionWithId (ACTION_PREVIOUS_PAGE)); } retval = true; } else { if (keyName == "ESCAPE") retval = true; KikiEvent * nextEvent = getEventWithName ("next"); if (nextEvent) { events.erase (std::find (events.begin(), events.end(), nextEvent)); delete nextEvent; } KikiEvent * prevEvent = getEventWithName ("previous"); if (prevEvent) { events.erase (std::find (events.begin(), events.end(), prevEvent)); delete prevEvent; } Controller.sound->playSound (KikiSound::MENU_ABORT); Controller.timer_event->addAction (getActionWithId (ACTION_HIDE)); } return retval; } // __________________________________________________________________________________________________ void KikiPageText::display () { list_color = bright_color; if (fade_value != 1.0) { color = KikiText::colors[list_color]; color.setAlpha (fade_value); color.glColor(); list_color = -1; } else { KikiText::colors[list_color].glColor(); } //KikiText::colors[list_color].glColor(); for (int index = 0; index < (int)text_lines.size(); index++) { text_lines[index]->display(); } } kiki/src/gui/KikiPageText.h0000666000000000000000000000211107644706105014570 0ustar rootroot/* * KikiPageText.h * kiki */ #ifndef __KikiPageText #define __KikiPageText #include "KikiScreenText.h" // __________________________________________________________________________________________________ class KikiPageText : public KikiScreenText { public: // ........................................................................ PUBLIC // ........................................................................ (con|de)struction KikiPageText ( const std::string & pageText, bool nextPage, bool previousPage = false ); // ........................................................................ void display (); void actionFinished ( KikiAction * action ); bool handleKey ( const KKey & key ); protected: // ..................................................................... PROTECTED enum { ACTION_NEXT_PAGE = KikiScreenText::ACTION_END, ACTION_PREVIOUS_PAGE, ACTINO_END }; }; #endif kiki/src/gui/KikiScreenText.cpp0000666000000000000000000001001207644706105015465 0ustar rootroot/* * KikiScreenText.cpp * kiki */ #include "KikiScreenText.h" #include "KikiTextLine.h" #include "KikiController.h" #include #include #include // __________________________________________________________________________________________________ KikiScreenText::KikiScreenText () : KPickHandler (), KKeyHandler (), KikiText (), KikiActionObject () { depth = INT_MAX-11; // one below console Controller.addPickHandler (this); KEventHandler::setFocusKeyHandler (this); fade_value = 0.0; addEventWithName ("hide"); addAction (new KikiAction (this, ACTION_SHOW, "show", 500)); addAction (new KikiAction (this, ACTION_HIDE, "hide", 500)); addAction (new KikiAction (this, ACTION_DELETE, "delete")); projection = new KLightingProjection (60.0, 0.1, 600.0); } // __________________________________________________________________________________________________ KikiScreenText::~KikiScreenText () { Controller.removePickHandler (this); KEventHandler::removeFocusKeyHandler (this); } // __________________________________________________________________________________________________ void KikiScreenText::show () { startTimedAction (getActionWithId (ACTION_SHOW)); } // __________________________________________________________________________________________________ void KikiScreenText::addText ( const std::string & str, float scaleFactor ) { KikiText::addText (str, scaleFactor); // ............................................................................ adjust projection projection->KMatrix::reset(); projection->translate (0.0, 0.0, kMax(width, height)); ((KLightingProjection*)projection)->setLightOffset (KVector (-width/2.0, height, 0.0)); projection->setZFar (kMax(width, height) + 10); projection->setZNear (kMax(width, height) - 10); } // __________________________________________________________________________________________________ void KikiScreenText::performAction ( KikiAction * action ) { if (action->getId() == ACTION_SHOW) { fade_value = action->getRelativeTime(); } else if (action->getId() == ACTION_HIDE) { fade_value = 1.0 - action->getRelativeTime(); } } // __________________________________________________________________________________________________ void KikiScreenText::actionFinished ( KikiAction * action ) { switch (action->getId()) { case ACTION_HIDE: getEventWithName ("hide")->triggerActions(); Controller.timer_event->addAction (getActionWithId (ACTION_DELETE)); break; case ACTION_DELETE: delete this; break; case ACTION_SHOW: fade_value = 1.0; break; } } // __________________________________________________________________________________________________ bool KikiScreenText::handleKey ( const KKey & key ) { startTimedAction (getActionWithId (ACTION_HIDE)); return false; } // __________________________________________________________________________________________________ void KikiScreenText::display () { if (fade_value != 1.0) { color.setAlpha (fade_value); } KikiText::display(); } // __________________________________________________________________________________________________ void KikiScreenText::display ( int ) { glPushAttrib (GL_CURRENT_BIT); glClear (GL_DEPTH_BUFFER_BIT); projection->initProjection(); glDepthMask(false); glDisable(GL_LIGHTING); glPushMatrix(); glColor4f (0.0, 0.0, 0.0, fade_value * 0.5); glTranslatef (0,0,-bevel_depth); glRectf (-getWidth()*0.6, -getHeight()*0.7, getWidth()*0.6, getHeight()*0.7); glPopMatrix(); glEnable (GL_LIGHTING); glDepthMask(true); ((KikiText*)this)->display(); glPopAttrib(); } kiki/src/gui/KikiScreenText.h0000666000000000000000000000252510325273107015133 0ustar rootroot/* * KikiScreenText.h * kiki */ #ifndef __KikiScreenText #define __KikiScreenText #include "KikiText.h" #include "KikiActionObject.h" #include #include // __________________________________________________________________________________________________ class KikiScreenText : public KPickHandler, public KKeyHandler, public KikiText, public KikiActionObject { public: // ........................................................................ PUBLIC KikiScreenText (); virtual ~KikiScreenText (); void addText ( const std::string &, float scaleFactor = 1.0 ); virtual void display ( int ); virtual void display (); virtual void show (); virtual void performAction ( KikiAction * action ); virtual void actionFinished ( KikiAction * action ); virtual bool handleKey ( const KKey & key ); protected: // ..................................................................... PROTECTED float fade_value; enum { ACTION_SHOW, ACTION_HIDE, ACTION_DELETE, ACTION_END }; }; #endif kiki/src/gui/KikiScrollMenu.cpp0000666000000000000000000000744210326704752015476 0ustar rootroot/* * KikiScrollMenu.cpp * kiki */ #include "KikiScrollMenu.h" #include "KConsole.h" #include // __________________________________________________________________________________________________ KikiScrollMenu::KikiScrollMenu ( int rows, int columns, int activeItem ) : KikiColumnMenu (rows, activeItem) { num_rows = rows; visible_items = rows * columns; offset = index_offset = kMax (0, (active_index - visible_items + 1)); } // __________________________________________________________________________________________________ void KikiScrollMenu::addItem ( const std::string & itemText, KikiAction * itemAction, bool option ) { all_menu_items.push_back (newItem (itemText, itemAction)); } // __________________________________________________________________________________________________ void KikiScrollMenu::show() { for (std::vector::iterator iter = menu_items.begin(); iter != menu_items.end(); iter++) { menu_items.push_back((*iter)); } activeIndexChanged(); KikiColumnMenu::show(); } // __________________________________________________________________________________________________ void KikiScrollMenu::setCurrentIndex (int index) { active_index = 0; activeIndexChanged(); } // __________________________________________________________________________________________________ void KikiScrollMenu::nextItem () { if (circular) active_index = (active_index + 1) % all_menu_items.size(); else active_index = kMin(active_index + 1, all_menu_items.size()-1); activeIndexChanged (); } // __________________________________________________________________________________________________ void KikiScrollMenu::previousItem () { if (circular) { if (active_index > 0) active_index--; else active_index = (int)all_menu_items.size() - 1; } else { active_index = kMax(active_index - 1, 0); } activeIndexChanged (); } // __________________________________________________________________________________________________ int KikiScrollMenu::getCurrentIndex () { return active_index; } // __________________________________________________________________________________________________ void KikiScrollMenu::activeIndexChanged () { int min_index_offset = kMax(0, active_index - visible_items + 1); int max_index_offset = active_index; offset = kMin(max_index_offset, kMax(min_index_offset, offset)); menu_items.clear(); for (int index = offset; index < kMin ((int)all_menu_items.size(), offset + visible_items); index++) { menu_items.push_back (all_menu_items[index]); } index_offset = offset; alignItems(); } // __________________________________________________________________________________________________ KikiMenuItem * KikiScrollMenu::currentItem() { if (active_index >= 0) return all_menu_items[active_index]; return NULL; } // __________________________________________________________________________________________________ bool KikiScrollMenu::handleKey ( const KKey & key ) { std::string keyName = key.getUnmodifiedName (); if (keyName == "LEFT" || keyName == "RIGHT") { active_index += ((keyName == "LEFT") ? -1 : 1) * num_rows; if (circular) { if (active_index < 0) active_index += (int)all_menu_items.size(); else if ((active_index) >= (int)all_menu_items.size()) active_index -= (int)all_menu_items.size(); } else { if (active_index < 0) { offset = index_offset = active_index = 0; } else { active_index = kMin(all_menu_items.size()-1, active_index); } } activeIndexChanged (); getEventWithName ("changed")->triggerActions(); } else { return KikiMenu::handleKey (key); } return true; } kiki/src/gui/KikiScrollMenu.h0000666000000000000000000000240410326704161015126 0ustar rootroot/* * KikiScrollMenu.h * kiki */ #ifndef __KikiScrollMenu #define __KikiScrollMenu #include "KikiColumnMenu.h" // __________________________________________________________________________________________________ class KikiScrollMenu : public KikiColumnMenu { public: // ........................................................................ PUBLIC // ........................................................................ (con|de)struction KikiScrollMenu ( int rows = 5, int columns = 4, int selectedItem = -1 ); // ........................................................................ menu items virtual void addItem ( const std::string & itemText, KikiAction * action = 0, bool option = false ); virtual KikiMenuItem * currentItem (); virtual void show (); virtual int getCurrentIndex (); virtual void setCurrentIndex (int index); protected: // ..................................................................... PROTECTED void activeIndexChanged (); void nextItem (); void previousItem (); bool handleKey ( const KKey & key ); int visible_items; int offset; int num_rows; std::vector all_menu_items; }; #endif kiki/src/gui/KikiText.cpp0000666000000000000000000001302310070562134014317 0ustar rootroot/* * KikiText.cpp * kiki */ #include "KikiText.h" #include "KikiTextLine.h" #include "KikiCharacter.h" #include "KikiController.h" #include #include #include // __________________________________________________________________________________________________ unsigned int KikiText::display_lists[3][58]; std::vector KikiText::colors(3); const char * KikiText::color_names[] = { "base", "bright", "dark" }; int KikiText::list_color = -1; float KikiText::bevel_depth = 4.0; // __________________________________________________________________________________________________ KikiText::KikiText ( const std::string & text, bool centered, int colorIndex ) { color = colors[colorIndex]; line_spacing = 4.0; width = height = 0.0; flags.resize(FLAGS_END); flags[ANIMATE] = false; flags[ALIGN_CENTER] = centered; if (text != "") { addText (text); } } // __________________________________________________________________________________________________ KikiText::~KikiText () { clear(); } // __________________________________________________________________________________________________ void KikiText::setText ( const std::string & str, int colorIndex ) { clear(); color = colors[colorIndex]; addText (str, 1.0); } // __________________________________________________________________________________________________ void KikiText::clear () { while (text_lines.empty() == false) { delete text_lines.back(); text_lines.pop_back(); } width = height = 0.0; } // __________________________________________________________________________________________________ bool KikiText::isEmpty () const { return text_lines.empty(); } // __________________________________________________________________________________________________ std::string KikiText::getText () const { std::string text; for (std::vector::const_iterator iter = text_lines.begin(); iter != text_lines.end(); iter++) { if (text != "\n") text += "\n"; text += (*iter)->getText(); } return text; } // __________________________________________________________________________________________________ void KikiText::invalidateLists ( int index ) { for (int c = 0; c < 58; c++) { if (display_lists[index][c]) { glDeleteLists(display_lists[index][c], 1); display_lists[index][c] = 0; } } } // __________________________________________________________________________________________________ void KikiText::reinit () { invalidateLists(0); invalidateLists(1); invalidateLists(2); } // __________________________________________________________________________________________________ void KikiText::init () { for (int i = 0; i < 3; i++) { for (int c = 0; c < 58; c++) { display_lists[i][c] = 0; } } } // __________________________________________________________________________________________________ void KikiText::setObjectColor ( const char * color_name, const KColor & color ) { for (int i = 0; i < 3; i++) { if (strcmp(color_names[i], color_name) == 0) { if (colors[i] != color) { invalidateLists(i); } colors[i] = color; return; } } } // __________________________________________________________________________________________________ void KikiText::addText ( const std::string & str, float scaleFactor ) { std::vector lines = kStringGetComponents ( str, "\n" ); for (std::vector::iterator iter = lines.begin(); iter != lines.end(); iter++) { text_lines.push_back (new KikiTextLine((*iter), scaleFactor)); } // ............................................................................ align text lines int numLines = text_lines.size(); width = 0.0; height = 0.0; for (std::vector::iterator tliter = text_lines.begin(); tliter != text_lines.end(); tliter++) { if ((*tliter)->getWidth() > width) { width = (*tliter)->getWidth(); } height += (*tliter)->getHeight() + line_spacing; } float currentHeight = text_lines[0]->getHeight(); for (int lineIndex = 0; lineIndex < numLines; lineIndex++) { float yOffset = -(currentHeight - height/2.0); currentHeight += text_lines[lineIndex]->getHeight() + line_spacing; if (flags[ALIGN_CENTER]) { text_lines[lineIndex]->setPosition (KVector(-text_lines[lineIndex]->getWidth()/2.0, yOffset, 0.0)); } else { text_lines[lineIndex]->setPosition (KVector (0.0, yOffset, 0.0)); } } } // __________________________________________________________________________________________________ void KikiText::display () { color.glColor(); list_color = -1; for (int i = 0; i < 3; i++) { if (color == colors[i]) { list_color = i; break; } } for (std::vector::iterator iter = text_lines.begin(); iter != text_lines.end(); iter++) { (*iter)->display(); } } kiki/src/gui/KikiText.h0000666000000000000000000000555507644706105014012 0ustar rootroot/* * KikiText.h * kiki */ #ifndef __KikiText #define __KikiText #include #include #include class KikiTextLine; // __________________________________________________________________________________________________ class KikiText { public: // ........................................................................ PUBLIC enum { base_color, bright_color, dark_color }; // ........................................................................ (con|de)struction KikiText ( const std::string & text = "", bool center = true, int color = base_color ); virtual ~KikiText (); // ........................................................................ virtual void setText ( const std::string & str, int colorIndex = base_color ); std::string getText () const; virtual void addText ( const std::string &, float scaleFactor = 1.0 ); void clear (); bool isEmpty () const; const KColor & getColor () const { return color; } void setColor ( const KColor & c ) { color = c; } void setAlpha ( float alpha ) { color.setAlpha(alpha); } bool isAnimated () const { return flags[ANIMATE]; } void setAnimated ( bool b ) { flags[ANIMATE] = b; } bool isCentered () const { return flags[ALIGN_CENTER]; } void setCentered ( bool b ) { flags[ALIGN_CENTER] = b; } float getWidth () const { return width; } float getHeight () const { return height; } virtual void display (); // ........................................................................ static color handling static void setObjectColor ( const char * color_name, const KColor & color ); static void reinit (); static void init (); static void invalidateLists ( int index ); protected: // ..................................................................... PROTECTED friend class KikiCharacter; // ........................................................................ colors static const char * color_names[]; static std::vector colors; KColor color; // ........................................................................ display lists static unsigned int display_lists[3][58]; static int list_color; // ........................................................................ depth static float bevel_depth; // ........................................................................ text lines std::vector text_lines; float width, height; float line_spacing; std::vector flags; enum { ANIMATE, ALIGN_CENTER, FLAGS_END }; }; #endif kiki/src/gui/KikiTextLine.cpp0000666000000000000000000000434210317764672015152 0ustar rootroot/* * KikiTextLine.cpp * kiki */ #include "KikiTextLine.h" #include "KikiCharacter.h" #include "KikiText.h" #include "KikiController.h" #include // __________________________________________________________________________________________________ KikiTextLine::KikiTextLine ( const std::string & str, float scaleFactor ) { scale_factor = scaleFactor; width = 0.0; character_spacing = 1.0; space_width = 5.0; if (str != "") setText(str); } // __________________________________________________________________________________________________ KikiTextLine::~KikiTextLine () { while (characters.empty() == false) { delete characters.back(); characters.pop_back(); } } // __________________________________________________________________________________________________ void KikiTextLine::addCharacter ( char c ) { KikiCharacter * newCharacter = new KikiCharacter(c); characters.push_back(newCharacter); width += character_spacing; newCharacter->setPosition(KVector(width, 0.0, 0.0)); width += newCharacter->getWidth(); } // __________________________________________________________________________________________________ void KikiTextLine::setText ( const std::string & str ) { text = str; unsigned int pos; if ((pos = text.find ("$scale(")) != std::string::npos) { text.erase (pos, pos+7); scale_factor = atof (text.substr (pos, text.find (")", pos)).c_str()); text.erase (pos, text.find (")", pos)+1); } for (int i = 0; i < (int)text.size(); i++) { if (text[i] == ' ') { width += space_width; } else { if (text[i] != -61) addCharacter (text[i]); } } } // __________________________________________________________________________________________________ void KikiTextLine::display () { glPushMatrix(); matrix.glMultMatrix(); glScalef(scale_factor, scale_factor, scale_factor); for (std::vector::iterator iter = characters.begin(); iter != characters.end(); iter++) { (*iter)->display(); } glPopMatrix(); } kiki/src/gui/KikiTextLine.h0000666000000000000000000000253210326433516014604 0ustar rootroot/* * KikiTextLine.h * kiki */ #ifndef __KikiTextLine #define __KikiTextLine #include #include class KikiCharacter; // __________________________________________________________________________________________________ class KikiTextLine { protected: // ..................................................................... PROTECTED KMatrix matrix; std::vector characters; std::string text; float width; float scale_factor; void addCharacter ( char ); public: // ........................................................................ PUBLIC float space_width; float character_spacing; KikiTextLine ( const std::string & str = "", float scaleFactor = 1.0 ); ~KikiTextLine (); void setText ( const std::string & str ); std::string getText () const { return text; } void setPosition ( const KVector & v ) { matrix.setPosition(v); } float getWidth () const { return width * scale_factor; } float getHeight () const { return 8.0 * scale_factor; } void setScaleFactor ( float scaleFactor ) { scale_factor = scaleFactor; } float getScaleFactor () const { return scale_factor; } void display (); }; #endif kiki/src/items/0000777000000000000000000000000010336064717012426 5ustar rootrootkiki/src/items/cylinder.h0000666000000000000000000004034307644706106014417 0ustar rootroot#ifndef __obj_cylinder #define __obj_cylinder #define render_cylinder { \ glInterleavedArrays (GL_N3F_V3F, 0, cylinderInterleavedQuadStrips); \ for (int i = 0; i < cylinderNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, cylinderQuadStripIndices[i]/6, \ (cylinderQuadStripIndices[i+1] - cylinderQuadStripIndices[i])/6); \ } \ } static int cylinderNumQuadStrips = 16; static int cylinderQuadStripIndices[17] = { 0, 120, 240, 360, 480, 600, 720, 840, 960, 1080, 1200, 1320, 1440, 1560, 1680, 1800, 1920 }; static float cylinderInterleavedQuadStrips[1920] = { 0.000, 0.000, -1.000, -0.118, 0.284, 0.215, 0.000, 0.000, -1.000, -0.207, 0.499, 0.215, 0.000, 0.000, -1.000, 0.118, 0.284, 0.215, 0.000, 0.000, -1.000, 0.207, 0.499, 0.215, -0.000, 0.000, -1.000, 0.285, 0.117, 0.215, -0.000, 0.000, -1.000, 0.500, 0.206, 0.215, -0.000, 0.000, -1.000, 0.285, -0.119, 0.215, -0.000, 0.000, -1.000, 0.500, -0.208, 0.215, -0.000, 0.000, -1.000, 0.118, -0.285, 0.215, -0.000, 0.000, -1.000, 0.207, -0.501, 0.215, -0.000, 0.000, -1.000, -0.118, -0.285, 0.215, -0.000, 0.000, -1.000, -0.207, -0.501, 0.215, 0.000, 0.000, -1.000, -0.285, -0.119, 0.215, 0.000, 0.000, -1.000, -0.500, -0.208, 0.215, 0.000, 0.000, -1.000, -0.285, 0.117, 0.215, 0.000, 0.000, -1.000, -0.500, 0.206, 0.215, 0.000, 0.000, -1.000, -0.118, 0.284, 0.215, 0.000, 0.000, -1.000, -0.207, 0.499, 0.215, 0.000, 0.000, -1.000, 0.118, 0.284, 0.215, 0.000, 0.000, -1.000, 0.207, 0.499, 0.215, -0.383, -0.924, -0.000, 0.118, 0.284, 0.315, -0.383, -0.924, -0.000, 0.118, 0.284, 0.215, -0.924, -0.383, -0.000, 0.285, 0.117, 0.315, -0.924, -0.383, -0.000, 0.285, 0.117, 0.215, -0.924, 0.383, 0.000, 0.285, -0.119, 0.315, -0.924, 0.383, 0.000, 0.285, -0.119, 0.215, -0.383, 0.924, 0.000, 0.118, -0.285, 0.315, -0.383, 0.924, 0.000, 0.118, -0.285, 0.215, 0.383, 0.924, 0.000, -0.118, -0.285, 0.315, 0.383, 0.924, 0.000, -0.118, -0.285, 0.215, 0.924, 0.383, 0.000, -0.285, -0.119, 0.315, 0.924, 0.383, 0.000, -0.285, -0.119, 0.215, 0.924, -0.383, -0.000, -0.285, 0.117, 0.315, 0.924, -0.383, -0.000, -0.285, 0.117, 0.215, 0.383, -0.924, -0.000, -0.118, 0.284, 0.315, 0.383, -0.924, -0.000, -0.118, 0.284, 0.215, -0.383, -0.924, -0.000, 0.118, 0.284, 0.315, -0.383, -0.924, -0.000, 0.118, 0.284, 0.215, -0.924, -0.383, -0.000, 0.285, 0.117, 0.315, -0.924, -0.383, -0.000, 0.285, 0.117, 0.215, 0.000, -0.000, 1.000, 0.207, 0.499, 0.315, 0.000, -0.000, 1.000, 0.118, 0.284, 0.315, 0.000, -0.000, 1.000, 0.500, 0.206, 0.315, 0.000, -0.000, 1.000, 0.285, 0.117, 0.315, -0.000, -0.000, 1.000, 0.500, -0.208, 0.315, -0.000, -0.000, 1.000, 0.285, -0.119, 0.315, -0.000, -0.000, 1.000, 0.207, -0.501, 0.315, -0.000, -0.000, 1.000, 0.118, -0.285, 0.315, 0.000, -0.000, 1.000, -0.207, -0.501, 0.315, 0.000, -0.000, 1.000, -0.118, -0.285, 0.315, -0.000, -0.000, 1.000, -0.500, -0.208, 0.315, -0.000, -0.000, 1.000, -0.285, -0.119, 0.315, 0.000, -0.000, 1.000, -0.500, 0.206, 0.315, 0.000, -0.000, 1.000, -0.285, 0.117, 0.315, -0.000, -0.000, 1.000, -0.207, 0.499, 0.315, -0.000, -0.000, 1.000, -0.118, 0.284, 0.315, 0.000, -0.000, 1.000, 0.207, 0.499, 0.315, 0.000, -0.000, 1.000, 0.118, 0.284, 0.315, 0.000, -0.000, 1.000, 0.500, 0.206, 0.315, 0.000, -0.000, 1.000, 0.285, 0.117, 0.315, -0.383, 0.924, 0.000, -0.207, 0.499, 0.215, -0.383, 0.924, 0.000, -0.207, 0.499, 0.315, 0.383, 0.924, 0.000, 0.207, 0.499, 0.215, 0.383, 0.924, 0.000, 0.207, 0.499, 0.315, 0.924, 0.383, 0.000, 0.500, 0.206, 0.215, 0.924, 0.383, 0.000, 0.500, 0.206, 0.315, 0.924, -0.383, -0.000, 0.500, -0.208, 0.215, 0.924, -0.383, -0.000, 0.500, -0.208, 0.315, 0.383, -0.924, -0.000, 0.207, -0.501, 0.215, 0.383, -0.924, -0.000, 0.207, -0.501, 0.315, -0.383, -0.924, -0.000, -0.207, -0.501, 0.215, -0.383, -0.924, -0.000, -0.207, -0.501, 0.315, -0.924, -0.383, -0.000, -0.500, -0.208, 0.215, -0.924, -0.383, -0.000, -0.500, -0.208, 0.315, -0.924, 0.383, 0.000, -0.500, 0.206, 0.215, -0.924, 0.383, 0.000, -0.500, 0.206, 0.315, -0.383, 0.924, 0.000, -0.207, 0.499, 0.215, -0.383, 0.924, 0.000, -0.207, 0.499, 0.315, 0.383, 0.924, 0.000, 0.207, 0.499, 0.215, 0.383, 0.924, 0.000, 0.207, 0.499, 0.315, 0.000, 0.000, -1.000, -0.118, 0.284, 0.397, 0.000, 0.000, -1.000, -0.207, 0.499, 0.397, 0.000, 0.000, -1.000, 0.118, 0.284, 0.397, 0.000, 0.000, -1.000, 0.207, 0.499, 0.397, -0.000, 0.000, -1.000, 0.285, 0.117, 0.397, -0.000, 0.000, -1.000, 0.500, 0.206, 0.397, -0.000, 0.000, -1.000, 0.285, -0.119, 0.397, -0.000, 0.000, -1.000, 0.500, -0.208, 0.397, -0.000, 0.000, -1.000, 0.118, -0.285, 0.397, -0.000, 0.000, -1.000, 0.207, -0.501, 0.397, -0.000, 0.000, -1.000, -0.118, -0.285, 0.397, -0.000, 0.000, -1.000, -0.207, -0.501, 0.397, 0.000, 0.000, -1.000, -0.285, -0.119, 0.397, 0.000, 0.000, -1.000, -0.500, -0.208, 0.397, 0.000, 0.000, -1.000, -0.285, 0.117, 0.397, 0.000, 0.000, -1.000, -0.500, 0.206, 0.397, 0.000, 0.000, -1.000, -0.118, 0.284, 0.397, 0.000, 0.000, -1.000, -0.207, 0.499, 0.397, 0.000, 0.000, -1.000, 0.118, 0.284, 0.397, 0.000, 0.000, -1.000, 0.207, 0.499, 0.397, -0.383, -0.924, -0.000, 0.118, 0.284, 0.497, -0.383, -0.924, -0.000, 0.118, 0.284, 0.397, -0.924, -0.383, -0.000, 0.285, 0.117, 0.497, -0.924, -0.383, -0.000, 0.285, 0.117, 0.397, -0.924, 0.383, 0.000, 0.285, -0.119, 0.497, -0.924, 0.383, 0.000, 0.285, -0.119, 0.397, -0.383, 0.924, 0.000, 0.118, -0.285, 0.497, -0.383, 0.924, 0.000, 0.118, -0.285, 0.397, 0.383, 0.924, 0.000, -0.118, -0.285, 0.497, 0.383, 0.924, 0.000, -0.118, -0.285, 0.397, 0.924, 0.383, 0.000, -0.285, -0.119, 0.497, 0.924, 0.383, 0.000, -0.285, -0.119, 0.397, 0.924, -0.383, -0.000, -0.285, 0.117, 0.497, 0.924, -0.383, -0.000, -0.285, 0.117, 0.397, 0.383, -0.924, -0.000, -0.118, 0.284, 0.497, 0.383, -0.924, -0.000, -0.118, 0.284, 0.397, -0.383, -0.924, -0.000, 0.118, 0.284, 0.497, -0.383, -0.924, -0.000, 0.118, 0.284, 0.397, -0.924, -0.383, -0.000, 0.285, 0.117, 0.497, -0.924, -0.383, -0.000, 0.285, 0.117, 0.397, 0.000, -0.000, 1.000, 0.207, 0.499, 0.497, 0.000, -0.000, 1.000, 0.118, 0.284, 0.497, -0.000, -0.000, 1.000, 0.500, 0.206, 0.497, -0.000, -0.000, 1.000, 0.285, 0.117, 0.497, 0.000, -0.000, 1.000, 0.500, -0.208, 0.497, 0.000, -0.000, 1.000, 0.285, -0.119, 0.497, -0.000, -0.000, 1.000, 0.207, -0.501, 0.497, -0.000, -0.000, 1.000, 0.118, -0.285, 0.497, 0.000, -0.000, 1.000, -0.207, -0.501, 0.497, 0.000, -0.000, 1.000, -0.118, -0.285, 0.497, 0.000, -0.000, 1.000, -0.500, -0.208, 0.497, 0.000, -0.000, 1.000, -0.285, -0.119, 0.497, -0.000, -0.000, 1.000, -0.500, 0.206, 0.497, -0.000, -0.000, 1.000, -0.285, 0.117, 0.497, -0.000, -0.000, 1.000, -0.207, 0.499, 0.497, -0.000, -0.000, 1.000, -0.118, 0.284, 0.497, 0.000, -0.000, 1.000, 0.207, 0.499, 0.497, 0.000, -0.000, 1.000, 0.118, 0.284, 0.497, -0.000, -0.000, 1.000, 0.500, 0.206, 0.497, -0.000, -0.000, 1.000, 0.285, 0.117, 0.497, -0.383, 0.924, 0.000, -0.207, 0.499, 0.397, -0.383, 0.924, 0.000, -0.207, 0.499, 0.497, 0.383, 0.924, 0.000, 0.207, 0.499, 0.397, 0.383, 0.924, 0.000, 0.207, 0.499, 0.497, 0.924, 0.383, 0.000, 0.500, 0.206, 0.397, 0.924, 0.383, 0.000, 0.500, 0.206, 0.497, 0.924, -0.383, -0.000, 0.500, -0.208, 0.397, 0.924, -0.383, -0.000, 0.500, -0.208, 0.497, 0.383, -0.924, -0.000, 0.207, -0.501, 0.397, 0.383, -0.924, -0.000, 0.207, -0.501, 0.497, -0.383, -0.924, -0.000, -0.207, -0.501, 0.397, -0.383, -0.924, -0.000, -0.207, -0.501, 0.497, -0.924, -0.383, -0.000, -0.500, -0.208, 0.397, -0.924, -0.383, -0.000, -0.500, -0.208, 0.497, -0.924, 0.383, 0.000, -0.500, 0.206, 0.397, -0.924, 0.383, 0.000, -0.500, 0.206, 0.497, -0.383, 0.924, 0.000, -0.207, 0.499, 0.397, -0.383, 0.924, 0.000, -0.207, 0.499, 0.497, 0.383, 0.924, 0.000, 0.207, 0.499, 0.397, 0.383, 0.924, 0.000, 0.207, 0.499, 0.497, -0.385, 0.923, 0.000, -0.208, 0.498, 0.050, -0.385, 0.923, 0.000, -0.208, 0.498, 0.133, 0.380, 0.925, 0.000, 0.206, 0.499, 0.050, 0.380, 0.925, 0.000, 0.206, 0.499, 0.133, 0.923, 0.385, 0.000, 0.499, 0.207, 0.050, 0.923, 0.385, 0.000, 0.499, 0.207, 0.133, 0.925, -0.380, -0.000, 0.500, -0.207, 0.050, 0.925, -0.380, -0.000, 0.500, -0.207, 0.133, 0.385, -0.923, -0.000, 0.208, -0.500, 0.050, 0.385, -0.923, -0.000, 0.208, -0.500, 0.133, -0.380, -0.925, -0.000, -0.206, -0.501, 0.050, -0.380, -0.925, -0.000, -0.206, -0.501, 0.133, -0.923, -0.385, -0.000, -0.499, -0.209, 0.050, -0.923, -0.385, -0.000, -0.499, -0.209, 0.133, -0.925, 0.380, 0.000, -0.500, 0.205, 0.050, -0.925, 0.380, 0.000, -0.500, 0.205, 0.133, -0.385, 0.923, 0.000, -0.208, 0.498, 0.050, -0.385, 0.923, 0.000, -0.208, 0.498, 0.133, 0.380, 0.925, 0.000, 0.206, 0.499, 0.050, 0.380, 0.925, 0.000, 0.206, 0.499, 0.133, 0.281, 0.684, -0.673, 0.148, 0.360, -0.116, 0.281, 0.684, -0.673, 0.206, 0.499, 0.050, 0.683, 0.285, -0.673, 0.360, 0.149, -0.116, 0.683, 0.285, -0.673, 0.499, 0.207, 0.050, 0.684, -0.281, -0.673, 0.360, -0.149, -0.116, 0.684, -0.281, -0.673, 0.500, -0.207, 0.050, 0.285, -0.683, -0.673, 0.150, -0.361, -0.116, 0.285, -0.683, -0.673, 0.208, -0.500, 0.050, -0.281, -0.684, -0.673, -0.148, -0.361, -0.116, -0.281, -0.684, -0.673, -0.206, -0.501, 0.050, -0.683, -0.285, -0.673, -0.360, -0.151, -0.116, -0.683, -0.285, -0.673, -0.499, -0.209, 0.050, -0.684, 0.281, -0.673, -0.360, 0.147, -0.116, -0.684, 0.281, -0.673, -0.500, 0.205, 0.050, -0.285, 0.683, -0.673, -0.150, 0.359, -0.116, -0.285, 0.683, -0.673, -0.208, 0.498, 0.050, 0.281, 0.684, -0.673, 0.148, 0.360, -0.116, 0.281, 0.684, -0.673, 0.206, 0.499, 0.050, 0.683, 0.285, -0.673, 0.360, 0.149, -0.116, 0.683, 0.285, -0.673, 0.499, 0.207, 0.050, 0.001, 0.002, 1.000, 0.206, 0.499, -0.327, 0.001, 0.002, 1.000, 0.148, 0.360, -0.327, 0.002, 0.001, 1.000, 0.499, 0.207, -0.327, 0.002, 0.001, 1.000, 0.360, 0.149, -0.327, 0.002, -0.001, 1.000, 0.500, -0.207, -0.327, 0.002, -0.001, 1.000, 0.361, -0.149, -0.327, 0.001, -0.002, 1.000, 0.208, -0.500, -0.327, 0.001, -0.002, 1.000, 0.150, -0.361, -0.327, -0.001, -0.002, 1.000, -0.206, -0.501, -0.327, -0.001, -0.002, 1.000, -0.148, -0.362, -0.327, -0.002, -0.001, 1.000, -0.499, -0.209, -0.327, -0.002, -0.001, 1.000, -0.360, -0.151, -0.327, -0.002, 0.001, 1.000, -0.500, 0.205, -0.327, -0.002, 0.001, 1.000, -0.361, 0.148, -0.327, -0.001, 0.002, 1.000, -0.208, 0.498, -0.327, -0.001, 0.002, 1.000, -0.150, 0.359, -0.327, 0.001, 0.002, 1.000, 0.206, 0.499, -0.327, 0.001, 0.002, 1.000, 0.148, 0.360, -0.327, 0.002, 0.001, 1.000, 0.499, 0.207, -0.327, 0.002, 0.001, 1.000, 0.360, 0.149, -0.327, 0.380, 0.925, 0.004, 0.148, 0.360, -0.327, 0.380, 0.925, 0.004, 0.148, 0.360, -0.116, 0.923, 0.385, 0.004, 0.360, 0.149, -0.327, 0.923, 0.385, 0.004, 0.360, 0.149, -0.116, 0.925, -0.380, 0.004, 0.361, -0.149, -0.327, 0.925, -0.380, 0.004, 0.360, -0.149, -0.116, 0.385, -0.923, 0.004, 0.150, -0.361, -0.327, 0.385, -0.923, 0.004, 0.150, -0.361, -0.116, -0.380, -0.925, 0.004, -0.148, -0.362, -0.327, -0.380, -0.925, 0.004, -0.148, -0.361, -0.116, -0.923, -0.385, 0.004, -0.360, -0.151, -0.327, -0.923, -0.385, 0.004, -0.360, -0.151, -0.116, -0.925, 0.380, 0.004, -0.361, 0.148, -0.327, -0.925, 0.380, 0.004, -0.360, 0.147, -0.116, -0.385, 0.923, 0.004, -0.150, 0.359, -0.327, -0.385, 0.923, 0.004, -0.150, 0.359, -0.116, 0.380, 0.925, 0.004, 0.148, 0.360, -0.327, 0.380, 0.925, 0.004, 0.148, 0.360, -0.116, 0.923, 0.385, 0.004, 0.360, 0.149, -0.327, 0.923, 0.385, 0.004, 0.360, 0.149, -0.116, 0.380, 0.925, 0.000, 0.206, 0.499, -0.494, 0.380, 0.925, 0.000, 0.206, 0.499, -0.327, 0.923, 0.385, 0.000, 0.499, 0.207, -0.494, 0.923, 0.385, 0.000, 0.499, 0.207, -0.327, 0.925, -0.380, -0.000, 0.500, -0.207, -0.494, 0.925, -0.380, -0.000, 0.500, -0.207, -0.327, 0.385, -0.923, -0.000, 0.208, -0.500, -0.494, 0.385, -0.923, -0.000, 0.208, -0.500, -0.327, -0.380, -0.925, -0.000, -0.206, -0.501, -0.494, -0.380, -0.925, -0.000, -0.206, -0.501, -0.327, -0.923, -0.385, -0.000, -0.499, -0.209, -0.494, -0.923, -0.385, -0.000, -0.499, -0.209, -0.327, -0.925, 0.380, 0.000, -0.500, 0.205, -0.494, -0.925, 0.380, 0.000, -0.500, 0.205, -0.327, -0.385, 0.923, 0.000, -0.208, 0.498, -0.494, -0.385, 0.923, 0.000, -0.208, 0.498, -0.327, 0.380, 0.925, 0.000, 0.206, 0.499, -0.494, 0.380, 0.925, 0.000, 0.206, 0.499, -0.327, 0.923, 0.385, 0.000, 0.499, 0.207, -0.494, 0.923, 0.385, 0.000, 0.499, 0.207, -0.327, 0.000, 0.000, -1.000, -0.119, 0.284, -0.494, 0.000, 0.000, -1.000, -0.208, 0.498, -0.494, -0.000, 0.000, -1.000, 0.118, 0.285, -0.494, -0.000, 0.000, -1.000, 0.206, 0.499, -0.494, -0.000, 0.000, -1.000, 0.285, 0.118, -0.494, -0.000, 0.000, -1.000, 0.499, 0.207, -0.494, -0.000, 0.000, -1.000, 0.286, -0.118, -0.494, -0.000, 0.000, -1.000, 0.500, -0.207, -0.494, -0.000, 0.000, -1.000, 0.119, -0.286, -0.494, -0.000, 0.000, -1.000, 0.208, -0.500, -0.494, 0.000, 0.000, -1.000, -0.118, -0.287, -0.494, 0.000, 0.000, -1.000, -0.206, -0.501, -0.494, 0.000, 0.000, -1.000, -0.285, -0.120, -0.494, 0.000, 0.000, -1.000, -0.499, -0.209, -0.494, 0.000, 0.000, -1.000, -0.286, 0.117, -0.494, 0.000, 0.000, -1.000, -0.500, 0.205, -0.494, 0.000, 0.000, -1.000, -0.119, 0.284, -0.494, 0.000, 0.000, -1.000, -0.208, 0.498, -0.494, -0.000, 0.000, -1.000, 0.118, 0.285, -0.494, -0.000, 0.000, -1.000, 0.206, 0.499, -0.494, -0.380, -0.925, -0.000, 0.118, 0.285, 0.133, -0.380, -0.925, -0.000, 0.118, 0.285, -0.494, -0.923, -0.385, -0.000, 0.285, 0.118, 0.133, -0.923, -0.385, -0.000, 0.285, 0.118, -0.494, -0.925, 0.380, 0.000, 0.286, -0.119, 0.133, -0.925, 0.380, 0.000, 0.286, -0.118, -0.494, -0.385, 0.923, 0.000, 0.119, -0.286, 0.133, -0.385, 0.923, 0.000, 0.119, -0.286, -0.494, 0.380, 0.925, 0.000, -0.118, -0.287, 0.133, 0.380, 0.925, 0.000, -0.118, -0.287, -0.494, 0.923, 0.385, 0.000, -0.285, -0.120, 0.133, 0.923, 0.385, 0.000, -0.285, -0.120, -0.494, 0.925, -0.380, -0.000, -0.286, 0.117, 0.133, 0.925, -0.380, -0.000, -0.286, 0.117, -0.494, 0.385, -0.923, -0.000, -0.119, 0.284, 0.133, 0.385, -0.923, -0.000, -0.119, 0.284, -0.494, -0.380, -0.925, -0.000, 0.118, 0.285, 0.133, -0.380, -0.925, -0.000, 0.118, 0.285, -0.494, -0.923, -0.385, -0.000, 0.285, 0.118, 0.133, -0.923, -0.385, -0.000, 0.285, 0.118, -0.494, -0.000, -0.000, 1.000, 0.206, 0.499, 0.133, -0.000, -0.000, 1.000, 0.118, 0.285, 0.133, -0.000, -0.000, 1.000, 0.499, 0.207, 0.133, -0.000, -0.000, 1.000, 0.285, 0.118, 0.133, -0.000, -0.000, 1.000, 0.500, -0.207, 0.133, -0.000, -0.000, 1.000, 0.286, -0.119, 0.133, 0.000, -0.000, 1.000, 0.208, -0.500, 0.133, 0.000, -0.000, 1.000, 0.119, -0.286, 0.133, 0.000, -0.000, 1.000, -0.206, -0.501, 0.133, 0.000, -0.000, 1.000, -0.118, -0.287, 0.133, 0.000, -0.000, 1.000, -0.499, -0.209, 0.133, 0.000, -0.000, 1.000, -0.285, -0.120, 0.133, 0.000, -0.000, 1.000, -0.500, 0.205, 0.133, 0.000, -0.000, 1.000, -0.286, 0.117, 0.133, 0.000, -0.000, 1.000, -0.208, 0.498, 0.133, 0.000, -0.000, 1.000, -0.119, 0.284, 0.133, -0.000, -0.000, 1.000, 0.206, 0.499, 0.133, -0.000, -0.000, 1.000, 0.118, 0.285, 0.133, -0.000, -0.000, 1.000, 0.499, 0.207, 0.133, -0.000, -0.000, 1.000, 0.285, 0.118, 0.133, }; #endif // __obj_cylinder kiki/src/items/gear.h0000666000000000000000000003611507644706106013526 0ustar rootroot#ifndef __obj_gear #define __obj_gear #define render_gear { \ glInterleavedArrays (GL_N3F_V3F, 0, gearInterleavedQuads); \ glDrawArrays (GL_QUADS, 0, gearNumQuads*4); \ glInterleavedArrays (GL_N3F_V3F, 0, gearInterleavedQuadStrips); \ for (int i = 0; i < gearNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, gearQuadStripIndices[i]/6, \ (gearQuadStripIndices[i+1] - gearQuadStripIndices[i])/6); \ } \ } static int gearNumQuads = 48; static float gearInterleavedQuads[1152] = { 0.981, 0.195, -0.000, 0.375, 0.155, 0.087, 0.981, 0.195, -0.000, 0.406, -0.000, 0.087, 0.981, 0.195, -0.000, 0.406, -0.000, -0.087, 0.981, 0.195, -0.000, 0.375, 0.155, -0.087, 0.556, 0.831, -0.000, 0.155, 0.375, 0.087, 0.556, 0.831, -0.000, 0.287, 0.287, 0.087, 0.556, 0.831, -0.000, 0.287, 0.287, -0.087, 0.556, 0.831, -0.000, 0.155, 0.375, -0.087, -0.195, 0.981, -0.000,-0.155, 0.375, 0.087, -0.195, 0.981, -0.000, 0.000, 0.406, 0.087, -0.195, 0.981, -0.000, 0.000, 0.406, -0.087, -0.195, 0.981, -0.000,-0.155, 0.375, -0.087, -0.831, 0.556, -0.000,-0.375, 0.155, 0.087, -0.831, 0.556, -0.000,-0.287, 0.287, 0.087, -0.831, 0.556, -0.000,-0.287, 0.287, -0.087, -0.831, 0.556, -0.000,-0.375, 0.155, -0.087, -0.981, -0.195, 0.000,-0.375, -0.155, 0.087, -0.981, -0.195, 0.000,-0.406, 0.000, 0.087, -0.981, -0.195, 0.000,-0.406, 0.000, -0.087, -0.981, -0.195, 0.000,-0.375, -0.155, -0.087, -0.556, -0.831, 0.000,-0.155, -0.375, 0.087, -0.556, -0.831, 0.000,-0.287, -0.287, 0.087, -0.556, -0.831, 0.000,-0.287, -0.287, -0.087, -0.556, -0.831, 0.000,-0.155, -0.375, -0.087, 0.195, -0.981, 0.000, 0.155, -0.375, 0.087, 0.195, -0.981, 0.000,-0.000, -0.406, 0.087, 0.195, -0.981, 0.000,-0.000, -0.406, -0.087, 0.195, -0.981, 0.000, 0.155, -0.375, -0.087, 0.831, -0.556, 0.000, 0.375, -0.155, 0.087, 0.831, -0.556, 0.000, 0.287, -0.287, 0.087, 0.831, -0.556, 0.000, 0.287, -0.287, -0.087, 0.831, -0.556, 0.000, 0.375, -0.155, -0.087, -0.021, -1.000, 0.000, 0.534, -0.159, -0.056, -0.021, -1.000, 0.000, 0.534, -0.159, 0.056, -0.021, -1.000, 0.000, 0.375, -0.155, 0.087, -0.021, -1.000, 0.000, 0.375, -0.155, -0.087, 0.187, -0.037, -0.982, 0.554, -0.058, -0.056, 0.187, -0.037, -0.982, 0.534, -0.159, -0.056, 0.143, -0.046, -0.989, 0.375, -0.155, -0.087, 0.149, -0.012, -0.989, 0.406, -0.000, -0.087, 0.363, 0.932, -0.000, 0.554, -0.058, 0.056, 0.363, 0.932, -0.000, 0.554, -0.058, -0.056, 0.363, 0.932, -0.000, 0.406, -0.000, -0.087, 0.363, 0.932, -0.000, 0.406, -0.000, 0.087, 0.981, -0.195, 0.000, 0.554, -0.058, 0.056, 0.981, -0.195, 0.000, 0.534, -0.159, 0.056, 0.981, -0.195, 0.000, 0.534, -0.159, -0.056, 0.981, -0.195, 0.000, 0.554, -0.058, -0.056, 0.187, -0.037, 0.982, 0.534, -0.159, 0.056, 0.187, -0.037, 0.982, 0.554, -0.058, 0.056, 0.149, -0.012, 0.989, 0.406, -0.000, 0.087, 0.143, -0.046, 0.989, 0.375, -0.155, 0.087, -0.722, -0.692, 0.000, 0.266, -0.490, -0.056, -0.722, -0.692, 0.000, 0.266, -0.490, 0.056, -0.722, -0.692, 0.000, 0.155, -0.375, 0.087, -0.722, -0.692, 0.000, 0.155, -0.375, -0.087, 0.106, -0.159, -0.982, 0.351, -0.433, -0.056, 0.106, -0.159, -0.982, 0.266, -0.490, -0.056, 0.069, -0.133, -0.989, 0.155, -0.375, -0.087, 0.097, -0.114, -0.989, 0.287, -0.287, -0.087, 0.916, 0.402, -0.000, 0.351, -0.433, 0.056, 0.916, 0.402, -0.000, 0.351, -0.433, -0.056, 0.916, 0.402, -0.000, 0.287, -0.287, -0.087, 0.916, 0.402, -0.000, 0.287, -0.287, 0.087, 0.556, -0.831, 0.000, 0.351, -0.433, 0.056, 0.556, -0.831, 0.000, 0.266, -0.490, 0.056, 0.556, -0.831, 0.000, 0.266, -0.490, -0.056, 0.556, -0.831, 0.000, 0.351, -0.433, -0.056, 0.106, -0.159, 0.982, 0.266, -0.490, 0.056, 0.106, -0.159, 0.982, 0.351, -0.433, 0.056, 0.097, -0.114, 0.989, 0.287, -0.287, 0.087, 0.069, -0.133, 0.989, 0.155, -0.375, 0.087, -1.000, 0.021, -0.000,-0.159, -0.534, -0.056, -1.000, 0.021, -0.000,-0.159, -0.534, 0.056, -1.000, 0.021, -0.000,-0.155, -0.375, 0.087, -1.000, 0.021, -0.000,-0.155, -0.375, -0.087, -0.037, -0.187, -0.982,-0.058, -0.554, -0.056, -0.037, -0.187, -0.982,-0.159, -0.534, -0.056, -0.046, -0.143, -0.989,-0.155, -0.375, -0.087, -0.012, -0.149, -0.989,-0.000, -0.406, -0.087, 0.932, -0.363, 0.000,-0.058, -0.554, 0.056, 0.932, -0.363, 0.000,-0.058, -0.554, -0.056, 0.932, -0.363, 0.000,-0.000, -0.406, -0.087, 0.932, -0.363, 0.000,-0.000, -0.406, 0.087, -0.195, -0.981, 0.000,-0.058, -0.554, 0.056, -0.195, -0.981, 0.000,-0.159, -0.534, 0.056, -0.195, -0.981, 0.000,-0.159, -0.534, -0.056, -0.195, -0.981, 0.000,-0.058, -0.554, -0.056, -0.037, -0.187, 0.982,-0.159, -0.534, 0.056, -0.037, -0.187, 0.982,-0.058, -0.554, 0.056, -0.012, -0.149, 0.989,-0.000, -0.406, 0.087, -0.046, -0.143, 0.989,-0.155, -0.375, 0.087, -0.692, 0.722, -0.000,-0.490, -0.266, -0.056, -0.692, 0.722, -0.000,-0.490, -0.266, 0.056, -0.692, 0.722, -0.000,-0.375, -0.155, 0.087, -0.692, 0.722, -0.000,-0.375, -0.155, -0.087, -0.159, -0.106, -0.982,-0.433, -0.351, -0.056, -0.159, -0.106, -0.982,-0.490, -0.266, -0.056, -0.133, -0.069, -0.989,-0.375, -0.155, -0.087, -0.114, -0.097, -0.989,-0.287, -0.287, -0.087, 0.402, -0.916, 0.000,-0.433, -0.351, 0.056, 0.402, -0.916, 0.000,-0.433, -0.351, -0.056, 0.402, -0.916, 0.000,-0.287, -0.287, -0.087, 0.402, -0.916, 0.000,-0.287, -0.287, 0.087, -0.831, -0.556, 0.000,-0.433, -0.351, 0.056, -0.831, -0.556, 0.000,-0.490, -0.266, 0.056, -0.831, -0.556, 0.000,-0.490, -0.266, -0.056, -0.831, -0.556, 0.000,-0.433, -0.351, -0.056, -0.159, -0.106, 0.982,-0.490, -0.266, 0.056, -0.159, -0.106, 0.982,-0.433, -0.351, 0.056, -0.114, -0.097, 0.989,-0.287, -0.287, 0.087, -0.133, -0.069, 0.989,-0.375, -0.155, 0.087, 0.021, 1.000, -0.000,-0.534, 0.159, -0.056, 0.021, 1.000, -0.000,-0.534, 0.159, 0.056, 0.021, 1.000, -0.000,-0.375, 0.155, 0.087, 0.021, 1.000, -0.000,-0.375, 0.155, -0.087, -0.187, 0.037, -0.982,-0.554, 0.058, -0.056, -0.187, 0.037, -0.982,-0.534, 0.159, -0.056, -0.143, 0.046, -0.989,-0.375, 0.155, -0.087, -0.149, 0.012, -0.989,-0.406, 0.000, -0.087, -0.363, -0.932, 0.000,-0.554, 0.058, 0.056, -0.363, -0.932, 0.000,-0.554, 0.058, -0.056, -0.363, -0.932, 0.000,-0.406, 0.000, -0.087, -0.363, -0.932, 0.000,-0.406, 0.000, 0.087, -0.981, 0.195, -0.000,-0.554, 0.058, 0.056, -0.981, 0.195, -0.000,-0.534, 0.159, 0.056, -0.981, 0.195, -0.000,-0.534, 0.159, -0.056, -0.981, 0.195, -0.000,-0.554, 0.058, -0.056, -0.187, 0.037, 0.982,-0.534, 0.159, 0.056, -0.187, 0.037, 0.982,-0.554, 0.058, 0.056, -0.149, 0.012, 0.989,-0.406, 0.000, 0.087, -0.143, 0.046, 0.989,-0.375, 0.155, 0.087, 0.722, 0.692, -0.000,-0.266, 0.490, -0.056, 0.722, 0.692, -0.000,-0.266, 0.490, 0.056, 0.722, 0.692, -0.000,-0.155, 0.375, 0.087, 0.722, 0.692, -0.000,-0.155, 0.375, -0.087, -0.106, 0.159, -0.982,-0.351, 0.433, -0.056, -0.106, 0.159, -0.982,-0.266, 0.490, -0.056, -0.069, 0.133, -0.989,-0.155, 0.375, -0.087, -0.097, 0.114, -0.989,-0.287, 0.287, -0.087, -0.916, -0.402, 0.000,-0.351, 0.433, 0.056, -0.916, -0.402, 0.000,-0.351, 0.433, -0.056, -0.916, -0.402, 0.000,-0.287, 0.287, -0.087, -0.916, -0.402, 0.000,-0.287, 0.287, 0.087, -0.556, 0.831, -0.000,-0.351, 0.433, 0.056, -0.556, 0.831, -0.000,-0.266, 0.490, 0.056, -0.556, 0.831, -0.000,-0.266, 0.490, -0.056, -0.556, 0.831, -0.000,-0.351, 0.433, -0.056, -0.106, 0.159, 0.982,-0.266, 0.490, 0.056, -0.106, 0.159, 0.982,-0.351, 0.433, 0.056, -0.097, 0.114, 0.989,-0.287, 0.287, 0.087, -0.069, 0.133, 0.989,-0.155, 0.375, 0.087, 1.000, -0.021, 0.000, 0.159, 0.534, -0.056, 1.000, -0.021, 0.000, 0.159, 0.534, 0.056, 1.000, -0.021, 0.000, 0.155, 0.375, 0.087, 1.000, -0.021, 0.000, 0.155, 0.375, -0.087, 0.037, 0.187, -0.982, 0.058, 0.554, -0.056, 0.037, 0.187, -0.982, 0.159, 0.534, -0.056, 0.046, 0.143, -0.989, 0.155, 0.375, -0.087, 0.012, 0.149, -0.989, 0.000, 0.406, -0.087, -0.932, 0.363, -0.000, 0.058, 0.554, 0.056, -0.932, 0.363, -0.000, 0.058, 0.554, -0.056, -0.932, 0.363, -0.000, 0.000, 0.406, -0.087, -0.932, 0.363, -0.000, 0.000, 0.406, 0.087, 0.195, 0.981, -0.000, 0.058, 0.554, 0.056, 0.195, 0.981, -0.000, 0.159, 0.534, 0.056, 0.195, 0.981, -0.000, 0.159, 0.534, -0.056, 0.195, 0.981, -0.000, 0.058, 0.554, -0.056, 0.037, 0.187, 0.982, 0.159, 0.534, 0.056, 0.037, 0.187, 0.982, 0.058, 0.554, 0.056, 0.012, 0.149, 0.989, 0.000, 0.406, 0.087, 0.046, 0.143, 0.989, 0.155, 0.375, 0.087, 0.692, -0.722, 0.000, 0.490, 0.266, -0.056, 0.692, -0.722, 0.000, 0.490, 0.266, 0.056, 0.692, -0.722, 0.000, 0.375, 0.155, 0.087, 0.692, -0.722, 0.000, 0.375, 0.155, -0.087, 0.159, 0.106, -0.982, 0.433, 0.351, -0.056, 0.159, 0.106, -0.982, 0.490, 0.266, -0.056, 0.133, 0.069, -0.989, 0.375, 0.155, -0.087, 0.114, 0.097, -0.989, 0.287, 0.287, -0.087, -0.402, 0.916, -0.000, 0.433, 0.351, 0.056, -0.402, 0.916, -0.000, 0.433, 0.351, -0.056, -0.402, 0.916, -0.000, 0.287, 0.287, -0.087, -0.402, 0.916, -0.000, 0.287, 0.287, 0.087, 0.831, 0.556, -0.000, 0.433, 0.351, 0.056, 0.831, 0.556, -0.000, 0.490, 0.266, 0.056, 0.831, 0.556, -0.000, 0.490, 0.266, -0.056, 0.831, 0.556, -0.000, 0.433, 0.351, -0.056, 0.159, 0.106, 0.982, 0.490, 0.266, 0.056, 0.159, 0.106, 0.982, 0.433, 0.351, 0.056, 0.114, 0.097, 0.989, 0.287, 0.287, 0.087, 0.133, 0.069, 0.989, 0.375, 0.155, 0.087, }; static int gearNumQuadStrips = 3; static int gearQuadStripIndices[4] = { 0, 216, 432, 648 }; static float gearInterleavedQuadStrips[648] = { 0.120, -0.050, 0.991, 0.208, -0.086, 0.111, 0.143, -0.046, 0.989, 0.375, -0.155, 0.087, 0.130, 0.000, 0.991, 0.226, 0.000, 0.111, 0.149, -0.012, 0.989, 0.406, -0.000, 0.087, 0.120, 0.050, 0.991, 0.208, 0.086, 0.111, 0.133, 0.069, 0.989, 0.375, 0.155, 0.087, 0.092, 0.092, 0.991, 0.160, 0.160, 0.111, 0.114, 0.097, 0.989, 0.287, 0.287, 0.087, 0.050, 0.120, 0.991, 0.086, 0.208, 0.111, 0.046, 0.143, 0.989, 0.155, 0.375, 0.087, -0.000, 0.130, 0.991, -0.000, 0.226, 0.111, 0.012, 0.149, 0.989, 0.000, 0.406, 0.087, -0.050, 0.120, 0.991, -0.086, 0.208, 0.111, -0.069, 0.133, 0.989, -0.155, 0.375, 0.087, -0.092, 0.092, 0.991, -0.160, 0.160, 0.111, -0.097, 0.114, 0.989, -0.287, 0.287, 0.087, -0.120, 0.050, 0.991, -0.208, 0.086, 0.111, -0.143, 0.046, 0.989, -0.375, 0.155, 0.087, -0.130, 0.000, 0.991, -0.226, 0.000, 0.111, -0.149, 0.012, 0.989, -0.406, 0.000, 0.087, -0.120, -0.050, 0.991, -0.208, -0.086, 0.111, -0.133, -0.069, 0.989, -0.375, -0.155, 0.087, -0.092, -0.092, 0.991, -0.160, -0.160, 0.111, -0.114, -0.097, 0.989, -0.287, -0.287, 0.087, -0.050, -0.120, 0.991, -0.086, -0.208, 0.111, -0.046, -0.143, 0.989, -0.155, -0.375, 0.087, 0.000, -0.130, 0.991, 0.000, -0.226, 0.111, -0.012, -0.149, 0.989, -0.000, -0.406, 0.087, 0.050, -0.120, 0.991, 0.086, -0.208, 0.111, 0.069, -0.133, 0.989, 0.155, -0.375, 0.087, 0.092, -0.092, 0.991, 0.160, -0.160, 0.111, 0.097, -0.114, 0.989, 0.287, -0.287, 0.087, 0.120, -0.050, 0.991, 0.208, -0.086, 0.111, 0.143, -0.046, 0.989, 0.375, -0.155, 0.087, 0.130, 0.000, 0.991, 0.226, 0.000, 0.111, 0.149, -0.012, 0.989, 0.406, -0.000, 0.087, -1.000, -0.000, -0.000, 0.226, -0.000, -0.111, -1.000, -0.000, -0.000, 0.226, 0.000, 0.111, -0.924, -0.383, 0.000, 0.208, 0.086, -0.111, -0.924, -0.383, 0.000, 0.208, 0.086, 0.111, -0.707, -0.707, 0.000, 0.160, 0.160, -0.111, -0.707, -0.707, 0.000, 0.160, 0.160, 0.111, -0.383, -0.924, 0.000, 0.086, 0.208, -0.111, -0.383, -0.924, 0.000, 0.086, 0.208, 0.111, 0.000, -1.000, 0.000, -0.000, 0.226, -0.111, 0.000, -1.000, 0.000, -0.000, 0.226, 0.111, 0.383, -0.924, 0.000, -0.086, 0.208, -0.111, 0.383, -0.924, 0.000, -0.086, 0.208, 0.111, 0.707, -0.707, 0.000, -0.160, 0.160, -0.111, 0.707, -0.707, 0.000, -0.160, 0.160, 0.111, 0.924, -0.383, 0.000, -0.208, 0.086, -0.111, 0.924, -0.383, 0.000, -0.208, 0.086, 0.111, 1.000, 0.000, 0.000, -0.226, -0.000, -0.111, 1.000, 0.000, 0.000, -0.226, 0.000, 0.111, 0.924, 0.383, -0.000, -0.208, -0.086, -0.111, 0.924, 0.383, -0.000, -0.208, -0.086, 0.111, 0.707, 0.707, -0.000, -0.160, -0.160, -0.111, 0.707, 0.707, -0.000, -0.160, -0.160, 0.111, 0.383, 0.924, -0.000, -0.086, -0.208, -0.111, 0.383, 0.924, -0.000, -0.086, -0.208, 0.111, -0.000, 1.000, -0.000, 0.000, -0.226, -0.111, -0.000, 1.000, -0.000, 0.000, -0.226, 0.111, -0.383, 0.924, -0.000, 0.086, -0.208, -0.111, -0.383, 0.924, -0.000, 0.086, -0.208, 0.111, -0.707, 0.707, -0.000, 0.160, -0.160, -0.111, -0.707, 0.707, -0.000, 0.160, -0.160, 0.111, -0.924, 0.383, -0.000, 0.208, -0.086, -0.111, -0.924, 0.383, -0.000, 0.208, -0.086, 0.111, -1.000, -0.000, -0.000, 0.226, -0.000, -0.111, -1.000, -0.000, -0.000, 0.226, 0.000, 0.111, -0.924, -0.383, 0.000, 0.208, 0.086, -0.111, -0.924, -0.383, 0.000, 0.208, 0.086, 0.111, 0.149, -0.012, -0.989, 0.406, -0.000, -0.087, 0.130, -0.000, -0.991, 0.226, -0.000, -0.111, 0.133, 0.069, -0.989, 0.375, 0.155, -0.087, 0.120, 0.050, -0.991, 0.208, 0.086, -0.111, 0.114, 0.097, -0.989, 0.287, 0.287, -0.087, 0.092, 0.092, -0.991, 0.160, 0.160, -0.111, 0.046, 0.143, -0.989, 0.155, 0.375, -0.087, 0.050, 0.120, -0.991, 0.086, 0.208, -0.111, 0.012, 0.149, -0.989, 0.000, 0.406, -0.087, -0.000, 0.130, -0.991, -0.000, 0.226, -0.111, -0.069, 0.133, -0.989, -0.155, 0.375, -0.087, -0.050, 0.120, -0.991, -0.086, 0.208, -0.111, -0.097, 0.114, -0.989, -0.287, 0.287, -0.087, -0.092, 0.092, -0.991, -0.160, 0.160, -0.111, -0.143, 0.046, -0.989, -0.375, 0.155, -0.087, -0.120, 0.050, -0.991, -0.208, 0.086, -0.111, -0.149, 0.012, -0.989, -0.406, 0.000, -0.087, -0.130, -0.000, -0.991, -0.226, -0.000, -0.111, -0.133, -0.069, -0.989, -0.375, -0.155, -0.087, -0.120, -0.050, -0.991, -0.208, -0.086, -0.111, -0.114, -0.097, -0.989, -0.287, -0.287, -0.087, -0.092, -0.092, -0.991, -0.160, -0.160, -0.111, -0.046, -0.143, -0.989, -0.155, -0.375, -0.087, -0.050, -0.120, -0.991, -0.086, -0.208, -0.111, -0.012, -0.149, -0.989, -0.000, -0.406, -0.087, 0.000, -0.130, -0.991, 0.000, -0.226, -0.111, 0.069, -0.133, -0.989, 0.155, -0.375, -0.087, 0.050, -0.120, -0.991, 0.086, -0.208, -0.111, 0.097, -0.114, -0.989, 0.287, -0.287, -0.087, 0.092, -0.092, -0.991, 0.160, -0.160, -0.111, 0.143, -0.046, -0.989, 0.375, -0.155, -0.087, 0.120, -0.050, -0.991, 0.208, -0.086, -0.111, 0.149, -0.012, -0.989, 0.406, -0.000, -0.087, 0.130, -0.000, -0.991, 0.226, -0.000, -0.111, 0.133, 0.069, -0.989, 0.375, 0.155, -0.087, 0.120, 0.050, -0.991, 0.208, 0.086, -0.111, }; #endif // __obj_gear kiki/src/items/generator.h0000666000000000000000000003416110070562134014561 0ustar rootroot#ifndef __obj_generator #define __obj_generator #define render_generator { \ glInterleavedArrays (GL_N3F_V3F, 0, generatorInterleavedQuads); \ glDrawArrays (GL_QUADS, 0, generatorNumQuads*4); \ glInterleavedArrays (GL_N3F_V3F, 0, generatorInterleavedQuadStrips); \ for (int i = 0; i < generatorNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, generatorQuadStripIndices[i]/6, \ (generatorQuadStripIndices[i+1] - generatorQuadStripIndices[i])/6); \ } \ glInterleavedArrays (GL_N3F_V3F, 0, generatorInterleavedTriangleFans); \ for (int ii = 0; ii < generatorNumTriangleFans; ii++) { \ glDrawArrays (GL_TRIANGLE_FAN, generatorTriangleFanIndices[ii]/6, \ (generatorTriangleFanIndices[ii+1] - generatorTriangleFanIndices[ii])/6); \ } \ } static int generatorNumQuads = 8; static float generatorInterleavedQuads[192] = { 0.924, 0.383, 0.000, 0.383, 0.330, 0.155, 0.924, 0.383, 0.000, 0.500, 0.047, 0.155, 0.924, 0.383, 0.000, 0.500, 0.047, -0.153, 0.924, 0.383, 0.000, 0.383, 0.330, -0.153, -0.924, -0.383, 0.000,-0.387, -0.321, 0.155, -0.924, -0.383, 0.000,-0.504, -0.038, 0.155, -0.924, -0.383, 0.000,-0.504, -0.038, -0.153, -0.924, -0.383, 0.000,-0.387, -0.321, -0.153, 0.924, -0.383, 0.000, 0.500, -0.038, 0.155, 0.924, -0.383, 0.000, 0.383, -0.321, 0.155, 0.924, -0.383, 0.000, 0.383, -0.321, -0.153, 0.924, -0.383, 0.000, 0.500, -0.038, -0.153, -0.383, 0.924, 0.000,-0.327, 0.389, 0.155, -0.383, 0.924, 0.000,-0.044, 0.506, 0.155, -0.383, 0.924, 0.000,-0.044, 0.506, -0.153, -0.383, 0.924, 0.000,-0.327, 0.389, -0.153, 0.383, -0.924, 0.000, 0.323, -0.380, 0.155, 0.383, -0.924, 0.000, 0.040, -0.498, 0.155, 0.383, -0.924, 0.000, 0.040, -0.498, -0.153, 0.383, -0.924, 0.000, 0.323, -0.380, -0.153, 0.383, 0.924, 0.000, 0.040, 0.506, 0.155, 0.383, 0.924, 0.000, 0.323, 0.389, 0.155, 0.383, 0.924, 0.000, 0.323, 0.389, -0.153, 0.383, 0.924, 0.000, 0.040, 0.506, -0.153, -0.924, 0.383, 0.000,-0.504, 0.047, 0.155, -0.924, 0.383, 0.000,-0.387, 0.330, 0.155, -0.924, 0.383, 0.000,-0.387, 0.330, -0.153, -0.924, 0.383, 0.000,-0.504, 0.047, -0.153, -0.383, -0.924, 0.000,-0.044, -0.498, 0.155, -0.383, -0.924, 0.000,-0.327, -0.380, 0.155, -0.383, -0.924, 0.000,-0.327, -0.380, -0.153, -0.383, -0.924, 0.000,-0.044, -0.498, -0.153, }; static int generatorNumQuadStrips = 12; static int generatorQuadStripIndices[13] = { 0, 120, 240, 360, 480, 552, 624, 696, 768, 840, 912, 984, 1056 }; static float generatorInterleavedQuadStrips[1056] = { 0.707, 0.707, 0.000, 0.141, 0.141, -0.076, 0.707, 0.707, 0.000, 0.141, 0.141, 0.078, 1.000, 0.000, -0.000, 0.200, 0.000, -0.076, 1.000, 0.000, -0.000, 0.200, 0.000, 0.078, 0.707, -0.707, -0.000, 0.141, -0.141, -0.076, 0.707, -0.707, -0.000, 0.141, -0.141, 0.078, 0.000, -1.000, -0.000, 0.000, -0.200, -0.076, 0.000, -1.000, -0.000, 0.000, -0.200, 0.078, -0.707, -0.707, -0.000, -0.141, -0.141, -0.076, -0.707, -0.707, -0.000, -0.141, -0.141, 0.078, -1.000, -0.000, 0.000, -0.200, 0.000, -0.076, -1.000, -0.000, 0.000, -0.200, 0.000, 0.078, -0.707, 0.707, 0.000, -0.141, 0.141, -0.076, -0.707, 0.707, 0.000, -0.141, 0.141, 0.078, -0.000, 1.000, 0.000, -0.000, 0.200, -0.076, -0.000, 1.000, 0.000, -0.000, 0.200, 0.078, 0.707, 0.707, 0.000, 0.141, 0.141, -0.076, 0.707, 0.707, 0.000, 0.141, 0.141, 0.078, 1.000, 0.000, -0.000, 0.200, 0.000, -0.076, 1.000, 0.000, -0.000, 0.200, 0.000, 0.078, -0.000, 0.710, 0.704, -0.000, 0.200, 0.078, -0.000, 0.710, 0.704, -0.000, 0.059, 0.220, 0.502, 0.502, 0.704, 0.141, 0.141, 0.078, 0.502, 0.502, 0.704, 0.042, 0.042, 0.220, 0.710, -0.000, 0.704, 0.200, 0.000, 0.078, 0.710, -0.000, 0.704, 0.059, -0.000, 0.220, 0.502, -0.502, 0.704, 0.141, -0.141, 0.078, 0.502, -0.502, 0.704, 0.042, -0.042, 0.220, 0.000, -0.710, 0.704, 0.000, -0.200, 0.078, 0.000, -0.710, 0.704, 0.000, -0.059, 0.220, -0.502, -0.502, 0.704, -0.141, -0.141, 0.078, -0.502, -0.502, 0.704, -0.042, -0.042, 0.220, -0.710, -0.000, 0.704, -0.200, 0.000, 0.078, -0.710, -0.000, 0.704, -0.059, -0.000, 0.220, -0.502, 0.502, 0.704, -0.141, 0.141, 0.078, -0.502, 0.502, 0.704, -0.042, 0.042, 0.220, -0.000, 0.710, 0.704, -0.000, 0.200, 0.078, -0.000, 0.710, 0.704, -0.000, 0.059, 0.220, 0.502, 0.502, 0.704, 0.141, 0.141, 0.078, 0.502, 0.502, 0.704, 0.042, 0.042, 0.220, -0.000, 1.000, 0.000, -0.000, 0.100, 0.354, -0.000, 1.000, 0.000, -0.000, 0.100, 0.500, 0.707, 0.707, 0.000, 0.071, 0.071, 0.354, 0.707, 0.707, 0.000, 0.071, 0.071, 0.500, 1.000, 0.000, -0.000, 0.100, -0.000, 0.354, 1.000, 0.000, -0.000, 0.100, -0.000, 0.500, 0.707, -0.707, -0.000, 0.071, -0.071, 0.354, 0.707, -0.707, -0.000, 0.071, -0.071, 0.500, 0.000, -1.000, -0.000, 0.000, -0.100, 0.354, 0.000, -1.000, -0.000, 0.000, -0.100, 0.500, -0.707, -0.707, -0.000, -0.071, -0.071, 0.354, -0.707, -0.707, -0.000, -0.071, -0.071, 0.500, -1.000, -0.000, 0.000, -0.100, -0.000, 0.354, -1.000, -0.000, 0.000, -0.100, -0.000, 0.500, -0.707, 0.707, 0.000, -0.071, 0.071, 0.354, -0.707, 0.707, 0.000, -0.071, 0.071, 0.500, -0.000, 1.000, 0.000, -0.000, 0.100, 0.354, -0.000, 1.000, 0.000, -0.000, 0.100, 0.500, 0.707, 0.707, 0.000, 0.071, 0.071, 0.354, 0.707, 0.707, 0.000, 0.071, 0.071, 0.500, 0.676, 0.676, -0.291, 0.042, 0.042, 0.220, 0.676, 0.676, -0.291, 0.071, 0.071, 0.354, 0.957, 0.000, -0.291, 0.059, -0.000, 0.220, 0.957, 0.000, -0.291, 0.100, -0.000, 0.354, 0.676, -0.676, -0.291, 0.042, -0.042, 0.220, 0.676, -0.676, -0.291, 0.071, -0.071, 0.354, 0.000, -0.957, -0.291, 0.000, -0.059, 0.220, 0.000, -0.957, -0.291, 0.000, -0.100, 0.354, -0.676, -0.676, -0.291, -0.042, -0.042, 0.220, -0.676, -0.676, -0.291, -0.071, -0.071, 0.354, -0.957, 0.000, -0.291, -0.059, -0.000, 0.220, -0.957, 0.000, -0.291, -0.100, -0.000, 0.354, -0.676, 0.676, -0.291, -0.042, 0.042, 0.220, -0.676, 0.676, -0.291, -0.071, 0.071, 0.354, 0.000, 0.957, -0.291, -0.000, 0.059, 0.220, 0.000, 0.957, -0.291, -0.000, 0.100, 0.354, 0.676, 0.676, -0.291, 0.042, 0.042, 0.220, 0.676, 0.676, -0.291, 0.071, 0.071, 0.354, 0.957, 0.000, -0.291, 0.059, -0.000, 0.220, 0.957, 0.000, -0.291, 0.100, -0.000, 0.354, 0.756, 0.295, 0.585, -0.044, -0.498, 0.155, 0.756, 0.295, 0.585, -0.054, -0.321, 0.078, -0.326, 0.743, 0.585, -0.327, -0.380, 0.155, -0.326, 0.743, 0.585, -0.195, -0.262, 0.078, -0.326, 0.743, -0.585, -0.327, -0.380, -0.153, -0.326, 0.743, -0.585, -0.195, -0.262, -0.076, 0.756, 0.295, -0.585, -0.044, -0.498, -0.153, 0.756, 0.295, -0.585, -0.054, -0.321, -0.076, 0.756, 0.295, 0.585, -0.044, -0.498, 0.155, 0.756, 0.295, 0.585, -0.054, -0.321, 0.078, -0.326, 0.743, 0.585, -0.327, -0.380, 0.155, -0.326, 0.743, 0.585, -0.195, -0.262, 0.078, 0.295, -0.756, 0.585, -0.504, 0.047, 0.155, 0.295, -0.756, 0.585, -0.327, 0.056, 0.078, 0.743, 0.326, 0.585, -0.387, 0.330, 0.155, 0.743, 0.326, 0.585, -0.268, 0.198, 0.078, 0.743, 0.326, -0.585, -0.387, 0.330, -0.153, 0.743, 0.326, -0.585, -0.268, 0.198, -0.076, 0.295, -0.756, -0.585, -0.504, 0.047, -0.153, 0.295, -0.756, -0.585, -0.327, 0.056, -0.076, 0.295, -0.756, 0.585, -0.504, 0.047, 0.155, 0.295, -0.756, 0.585, -0.327, 0.056, 0.078, 0.743, 0.326, 0.585, -0.387, 0.330, 0.155, 0.743, 0.326, 0.585, -0.268, 0.198, 0.078, -0.756, -0.295, 0.585, 0.040, 0.506, 0.155, -0.756, -0.295, 0.585, 0.050, 0.329, 0.078, 0.326, -0.743, 0.585, 0.323, 0.389, 0.155, 0.326, -0.743, 0.585, 0.191, 0.271, 0.078, 0.326, -0.743, -0.585, 0.323, 0.389, -0.153, 0.326, -0.743, -0.585, 0.191, 0.271, -0.076, -0.756, -0.295, -0.585, 0.040, 0.506, -0.153, -0.756, -0.295, -0.585, 0.050, 0.329, -0.076, -0.756, -0.295, 0.585, 0.040, 0.506, 0.155, -0.756, -0.295, 0.585, 0.050, 0.329, 0.078, 0.326, -0.743, 0.585, 0.323, 0.389, 0.155, 0.326, -0.743, 0.585, 0.191, 0.271, 0.078, 0.326, 0.743, 0.585, 0.323, -0.380, 0.155, 0.326, 0.743, 0.585, 0.191, -0.262, 0.078, -0.756, 0.295, 0.585, 0.040, -0.498, 0.155, -0.756, 0.295, 0.585, 0.050, -0.321, 0.078, -0.756, 0.295, -0.585, 0.040, -0.498, -0.153, -0.756, 0.295, -0.585, 0.050, -0.321, -0.076, 0.326, 0.743, -0.585, 0.323, -0.380, -0.153, 0.326, 0.743, -0.585, 0.191, -0.262, -0.076, 0.326, 0.743, 0.585, 0.323, -0.380, 0.155, 0.326, 0.743, 0.585, 0.191, -0.262, 0.078, -0.756, 0.295, 0.585, 0.040, -0.498, 0.155, -0.756, 0.295, 0.585, 0.050, -0.321, 0.078, -0.326, -0.743, 0.585, -0.327, 0.389, 0.155, -0.326, -0.743, 0.585, -0.195, 0.271, 0.078, 0.756, -0.295, 0.585, -0.044, 0.506, 0.155, 0.756, -0.295, 0.585, -0.054, 0.329, 0.078, 0.756, -0.295, -0.585, -0.044, 0.506, -0.153, 0.756, -0.295, -0.585, -0.054, 0.329, -0.076, -0.326, -0.743, -0.585, -0.327, 0.389, -0.153, -0.326, -0.743, -0.585, -0.195, 0.271, -0.076, -0.326, -0.743, 0.585, -0.327, 0.389, 0.155, -0.326, -0.743, 0.585, -0.195, 0.271, 0.078, 0.756, -0.295, 0.585, -0.044, 0.506, 0.155, 0.756, -0.295, 0.585, -0.054, 0.329, 0.078, -0.295, 0.756, 0.585, 0.500, -0.038, 0.155, -0.295, 0.756, 0.585, 0.323, -0.047, 0.078, -0.743, -0.326, 0.585, 0.383, -0.321, 0.155, -0.743, -0.326, 0.585, 0.265, -0.189, 0.078, -0.743, -0.326, -0.585, 0.383, -0.321, -0.153, -0.743, -0.326, -0.585, 0.265, -0.189, -0.076, -0.295, 0.756, -0.585, 0.500, -0.038, -0.153, -0.295, 0.756, -0.585, 0.323, -0.047, -0.076, -0.295, 0.756, 0.585, 0.500, -0.038, 0.155, -0.295, 0.756, 0.585, 0.323, -0.047, 0.078, -0.743, -0.326, 0.585, 0.383, -0.321, 0.155, -0.743, -0.326, 0.585, 0.265, -0.189, 0.078, 0.743, -0.326, 0.585, -0.387, -0.321, 0.155, 0.743, -0.326, 0.585, -0.268, -0.189, 0.078, 0.295, 0.756, 0.585, -0.504, -0.038, 0.155, 0.295, 0.756, 0.585, -0.327, -0.047, 0.078, 0.295, 0.756, -0.585, -0.504, -0.038, -0.153, 0.295, 0.756, -0.585, -0.327, -0.047, -0.076, 0.743, -0.326, -0.585, -0.387, -0.321, -0.153, 0.743, -0.326, -0.585, -0.268, -0.189, -0.076, 0.743, -0.326, 0.585, -0.387, -0.321, 0.155, 0.743, -0.326, 0.585, -0.268, -0.189, 0.078, 0.295, 0.756, 0.585, -0.504, -0.038, 0.155, 0.295, 0.756, 0.585, -0.327, -0.047, 0.078, -0.743, 0.326, 0.585, 0.383, 0.330, 0.155, -0.743, 0.326, 0.585, 0.265, 0.198, 0.078, -0.295, -0.756, 0.585, 0.500, 0.047, 0.155, -0.295, -0.756, 0.585, 0.323, 0.056, 0.078, -0.295, -0.756, -0.585, 0.500, 0.047, -0.153, -0.295, -0.756, -0.585, 0.323, 0.056, -0.076, -0.743, 0.326, -0.585, 0.383, 0.330, -0.153, -0.743, 0.326, -0.585, 0.265, 0.198, -0.076, -0.743, 0.326, 0.585, 0.383, 0.330, 0.155, -0.743, 0.326, 0.585, 0.265, 0.198, 0.078, -0.295, -0.756, 0.585, 0.500, 0.047, 0.155, -0.295, -0.756, 0.585, 0.323, 0.056, 0.078, }; static int generatorNumTriangleFans = 12; static int generatorTriangleFanIndices[13] = { 0, 36, 72, 108, 138, 162, 186, 210, 234, 258, 282, 306, 330 }; static float generatorInterleavedTriangleFans[330] = { -0.000, -0.000, 1.000, 0.000, -0.100, 0.500, 0.000, -0.000, 1.000, 0.071, -0.071, 0.500, 0.000, -0.000, 1.000, -0.000, 0.100, 0.500, -0.000, -0.000, 1.000, -0.071, 0.071, 0.500, -0.000, -0.000, 1.000, -0.100, -0.000, 0.500, -0.000, -0.000, 1.000, -0.071, -0.071, 0.500, -0.000, 0.000, -1.000, 0.141, -0.141, -0.076, 0.000, 0.000, -1.000, 0.000, -0.200, -0.076, 0.000, 0.000, -1.000, -0.141, -0.141, -0.076, 0.000, 0.000, -1.000, -0.200, 0.000, -0.076, -0.000, 0.000, -1.000, -0.141, 0.141, -0.076, -0.000, 0.000, -1.000, 0.200, 0.000, -0.076, -0.000, 0.000, -1.000, -0.141, 0.141, -0.076, -0.000, 0.000, -1.000, -0.000, 0.200, -0.076, -0.000, 0.000, -1.000, 0.141, 0.141, -0.076, -0.000, 0.000, -1.000, 0.200, 0.000, -0.076, -0.000, 0.000, -1.000, 0.141, -0.141, -0.076, 0.000, 0.000, -1.000, -0.200, 0.000, -0.076, 0.000, -0.000, 1.000, -0.000, 0.100, 0.500, -0.000, -0.000, 1.000, 0.000, -0.100, 0.500, 0.000, -0.000, 1.000, 0.071, -0.071, 0.500, 0.000, -0.000, 1.000, 0.100, -0.000, 0.500, 0.000, -0.000, 1.000, 0.071, 0.071, 0.500, -0.924, -0.383, -0.000, 0.265, 0.198, -0.076, -0.924, -0.383, -0.000, 0.323, 0.056, -0.076, -0.924, -0.383, -0.000, 0.323, 0.056, 0.078, -0.924, -0.383, -0.000, 0.265, 0.198, 0.078, 0.924, 0.383, -0.000, -0.268, -0.189, -0.076, 0.924, 0.383, -0.000, -0.327, -0.047, -0.076, 0.924, 0.383, -0.000, -0.327, -0.047, 0.078, 0.924, 0.383, -0.000, -0.268, -0.189, 0.078, -0.924, 0.383, -0.000, 0.323, -0.047, -0.076, -0.924, 0.383, -0.000, 0.265, -0.189, -0.076, -0.924, 0.383, -0.000, 0.265, -0.189, 0.078, -0.924, 0.383, -0.000, 0.323, -0.047, 0.078, 0.383, -0.924, -0.000, -0.195, 0.271, -0.076, 0.383, -0.924, -0.000, -0.054, 0.329, -0.076, 0.383, -0.924, -0.000, -0.054, 0.329, 0.078, 0.383, -0.924, -0.000, -0.195, 0.271, 0.078, -0.383, 0.924, -0.000, 0.191, -0.262, -0.076, -0.383, 0.924, -0.000, 0.050, -0.321, -0.076, -0.383, 0.924, -0.000, 0.050, -0.321, 0.078, -0.383, 0.924, -0.000, 0.191, -0.262, 0.078, -0.383, -0.924, -0.000, 0.050, 0.329, -0.076, -0.383, -0.924, -0.000, 0.191, 0.271, -0.076, -0.383, -0.924, -0.000, 0.191, 0.271, 0.078, -0.383, -0.924, -0.000, 0.050, 0.329, 0.078, 0.924, -0.383, -0.000, -0.327, 0.056, -0.076, 0.924, -0.383, -0.000, -0.268, 0.198, -0.076, 0.924, -0.383, -0.000, -0.268, 0.198, 0.078, 0.924, -0.383, -0.000, -0.327, 0.056, 0.078, 0.383, 0.924, -0.000, -0.054, -0.321, -0.076, 0.383, 0.924, -0.000, -0.195, -0.262, -0.076, 0.383, 0.924, -0.000, -0.195, -0.262, 0.078, 0.383, 0.924, -0.000, -0.054, -0.321, 0.078, }; #endif // __obj_generator kiki/src/items/KikiAtom.cpp0000666000000000000000000001270110326710163014633 0ustar rootroot/* * KikiAtom.cpp * kiki */ #include "KikiAtom.h" #include "KikiNeutron.h" #include "KikiBot.h" #include "KikiSound.h" #include "KikiController.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiAtom, KikiObject ) KDL_CLASS_INTROSPECTION_1 ( KikiMovesAtom, KikiAtom ) KDL_CLASS_INTROSPECTION_1 ( KikiValueAtom, KikiAtom ) KIKI_OBJECT_VALUES ( KikiAtom, false ) KIKI_OBJECT_VALUES_1 ( KikiMovesAtom, false, neutron ) KIKI_OBJECT_VALUES_1 ( KikiValueAtom, true, neutron ) // __________________________________________________________________________________________________ static float KikiNeutronOrbits [9][6] = // values for neutron orbit plane normals and start angles { {0,0,1, 0}, {0,1,0, 180}, {1,0,0, 180}, {0,1,1, 90}, {1,0,1, -90}, {-1,-1,0, 180}, {0,1,-1, 45}, {1,0,-1, -45}, {1,-1,0, -45} }; int KikiAtom::num_neutrons = 9; static int VALUE_CHANGED_EVENT; // __________________________________________________________________________________________________ KikiAtom::KikiAtom ( int neutrons ) : KikiObject() { value = neutrons/(float)num_neutrons; nucleus_size = neutrons/(num_neutrons*2.0); for (int i = 0; i < neutrons; i++) addNeutron(); } // __________________________________________________________________________________________________ KikiValueAtom::KikiValueAtom ( float range_start, float range_end, float start_value, int levels ) : KikiAtom (0) { range[0] = range_start; range[1] = range_end; increment = (range_end - range_start) / levels; VALUE_CHANGED_EVENT = addEventWithName("value changed"); setValue(mapValue(start_value)); nucleus_size = kMax(0.1, nucleus_size); // minimum nucleus size } // __________________________________________________________________________________________________ float KikiValueAtom::mapValue ( float unmapped_value ) const { return (unmapped_value - range[0])/(range[1] - range[0]); } // __________________________________________________________________________________________________ float KikiValueAtom::unmapValue ( float mapped_value ) const { return mapped_value * (range[1] - range[0]) + range[0]; } // __________________________________________________________________________________________________ void KikiValueAtom::bulletImpact () { float newValue = unmapValue(value) + increment; if (newValue > range[1]) { increment = -increment; if (value == 1.0) newValue = range[1] + increment; } else if (newValue < range[0]) { increment = -increment; if (value == 0.0) newValue = range[0] + increment; } setValue(mapValue(newValue)); nucleus_size = kMax(0.1, nucleus_size); // minimum nucleus size events[VALUE_CHANGED_EVENT]->triggerActions(); } // __________________________________________________________________________________________________ KikiAtom::~KikiAtom () { while (neutrons.empty() == false) { deleteNeutron(); } } // __________________________________________________________________________________________________ void KikiAtom::deleteNeutron () { delete neutrons.back(); neutrons.pop_back(); } // __________________________________________________________________________________________________ void KikiAtom::addNeutron () { KVector orbitNormal(KikiNeutronOrbits[neutrons.size()][0], KikiNeutronOrbits[neutrons.size()][1], KikiNeutronOrbits[neutrons.size()][2]); KikiNeutron * newNeutron = new KikiNeutron(orbitNormal, KikiNeutronOrbits[neutrons.size()][3]); neutrons.push_back(newNeutron); } // __________________________________________________________________________________________________ void KikiAtom::initAction ( KikiAction * action ) { Controller.sound->playSound(KikiSound::ATOM_DIGEST); } // __________________________________________________________________________________________________ void KikiAtom::performAction ( KikiAction * action ) { setValue (1.0 - action->getRelativeTime()); } // __________________________________________________________________________________________________ void KikiAtom::actionFinished ( KikiAction * action ) { delete this; } // __________________________________________________________________________________________________ void KikiAtom::setValue ( float v ) { value = kMin(kMax(0.0, v), 1.0); nucleus_size = value/2.0; while (value * num_neutrons < neutrons.size()) { deleteNeutron (); } while (floor(value * num_neutrons) > neutrons.size()) { addNeutron (); } } // __________________________________________________________________________________________________ void KikiAtom::render () { glPushAttrib(GL_CURRENT_BIT); glPushMatrix(); getNucleusColor().glColor(); kDisplaySolidSphere(nucleus_size/2.0); // nucleus (is this the correct spelling ?) std::vector::iterator neutronIter = neutrons.begin(); getNeutronColor().glColor(); while (neutronIter != neutrons.end()) { (*neutronIter)->display(); neutronIter++; } glPopMatrix(); glPopAttrib(); } kiki/src/items/KikiAtom.h0000666000000000000000000000515010326710163014300 0ustar rootroot/* * KikiAtom.h * kiki */ #ifndef __KikiAtom #define __KikiAtom #include "KikiObject.h" class KikiNeutron; // __________________________________________________________________________________________________ class KikiAtom : public KikiObject { KIKI_OBJECT_HEADER protected: // ..................................................................... PROTECTED static int num_neutrons; std::vector neutrons; float nucleus_size; float value; void addNeutron (); void deleteNeutron (); public: // ........................................................................ PUBLIC KikiAtom ( int neutrons = 9 ); ~KikiAtom (); void initAction ( KikiAction * action ); void performAction ( KikiAction * action ); void actionFinished ( KikiAction * action ); void setValue ( float value ); virtual float getValue () const { return value; } void render (); virtual const KColor & getNucleusColor () = 0; virtual const KColor & getNeutronColor () = 0; }; // __________________________________________________________________________________________________ class KikiMovesAtom : public KikiAtom { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiMovesAtom ( int neutrons = 9 ) : KikiAtom (neutrons) {} const KColor & getNucleusColor () { return colors[0]; } const KColor & getNeutronColor () { return colors[1]; } }; // __________________________________________________________________________________________________ class KikiValueAtom : public KikiAtom { KIKI_OBJECT_HEADER protected: // ..................................................................... PROTECTED float range[2]; float increment; float mapValue ( float unmapped_value ) const; float unmapValue ( float mapped_value ) const; public: // ........................................................................ PUBLIC KikiValueAtom ( float range_start = 0.0, float range_end = 1.0, float start_value = 1.0, int levels = 9 ); float getValue () const { return unmapValue(value); } void bulletImpact (); const KColor & getNucleusColor () { return colors[0]; } const KColor & getNeutronColor () { return colors[1]; } }; #endif kiki/src/items/KikiBillBoard.cpp0000666000000000000000000000343207644706107015602 0ustar rootroot/* * KikiBillBoard.cpp * kiki */ #include "KikiBillBoard.h" #include "KikiController.h" #include "KikiWorld.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiBillBoard, KikiObject ) KIKI_OBJECT_VALUES ( KikiBillBoard, false ) // __________________________________________________________________________________________________ KikiBillBoard::KikiBillBoard () : KikiObject () { size = 1.0; } // __________________________________________________________________________________________________ void KikiBillBoard::displayTextureWithSize ( GLuint textureId, float size ) { glPushAttrib (GL_TEXTURE_BIT | GL_LIGHTING_BIT); glDisable (GL_LIGHTING); glEnable (GL_TEXTURE_2D); glPushMatrix(); KQuaternion quat = Controller.world->getProjection()->getQuaternion(); KMatrix (quat).glMultMatrix(); glBindTexture (GL_TEXTURE_2D, textureId); float w = size/2.0; float h = size/2.0; glBegin (GL_QUADS); glNormal3f (0,0,1); glTexCoord2f (0.0f, 0.0f); glVertex2f (-w, h); glTexCoord2f (0.0f, 1.0f); glVertex2f (-w,-h); glTexCoord2f (1.0f, 1.0f); glVertex2f ( w,-h); glTexCoord2f (1.0f, 0.0f); glVertex2f ( w, h); glEnd(); glPopMatrix(); glDisable (GL_TEXTURE_2D); glEnable (GL_LIGHTING); glPopAttrib(); } // __________________________________________________________________________________________________ void KikiBillBoard::display() { glPushMatrix(); getColor().glColor(); current_position.glTranslate(); displayTextureWithSize (getTextureId(), size); glPopMatrix(); } kiki/src/items/KikiBillBoard.h0000666000000000000000000000140507644706107015245 0ustar rootroot/* * KikiBillBoard.h * kiki */ #ifndef __KikiBillBoard #define __KikiBillBoard #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiBillBoard : public KikiObject { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiBillBoard (); virtual KColor getColor () = 0; virtual GLuint getTextureId () = 0; virtual void display (); static void displayTextureWithSize ( GLuint textureId, float size ); protected: // ..................................................................... PROTECTED float size; }; #endif kiki/src/items/KikiBomb.cpp0000666000000000000000000001153407645543105014627 0ustar rootroot/* * KikiBomb.cpp * kiki */ #include "KikiBomb.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiSound.h" #include "KikiPlayer.h" #define K_INCLUDE_GLUT #include "KIncludeTools.h" // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiBomb, KikiPushable ) KIKI_OBJECT_VALUES ( KikiBomb, true ) KDL_CLASS_INTROSPECTION_1 ( KikiBombSplitter, KikiBomb ) KIKI_OBJECT_VALUES ( KikiBombSplitter, false ) // __________________________________________________________________________________________________ KikiBomb::KikiBomb () : KikiPushable () { angle = 0.0; size = 1.0; splitted = false; addEventWithName ("explode"); addAction (new KikiAction (this, ACTION_ROTATE, "rotation", 2000, KikiAction::CONTINUOUS)); addAction (new KikiAction (this, ACTION_IMPLODE, "implode", 100)); addAction (new KikiAction (this, ACTION_EXPLODE, "explode", 100)); startTimedAction (getActionWithId (ACTION_ROTATE)); } // __________________________________________________________________________________________________ KikiBombSplitter::KikiBombSplitter ( const KVector & dir ) : KikiBomb () { size = 0.0; splitted = true; direction = dir; startTimedAction (getActionWithId (ACTION_EXPLODE)); } // __________________________________________________________________________________________________ void KikiBomb::splitterInDirection ( const KVector & dir ) { bool splitter = false; KikiPos pos = getPos() + dir; if (Controller.world->isUnoccupiedPos (pos)) { splitter = true; } else { KikiObject * occupant = Controller.world->getRealOccupantAtPos (pos); if (occupant) { if (occupant->getClassId() >= KikiBomb::classId()) { occupant->bulletImpact(); return; } /* else if (occupant->getClassId() >= KikiBot::classId()) { ((KikiBot*)occupant)->getStatus()->addHealth (-0.2); // bombs damage seriously } */ if (Controller.world->mayObjectPushToPos (this, pos, getActionWithId (ACTION_EXPLODE)->getDuration())) { splitter = true; } } } if (splitter) { Controller.world->addObjectAtPos (new KikiBombSplitter (dir), pos); } } // __________________________________________________________________________________________________ void KikiBomb::bulletImpact () { if (!splitted) { splitted = true; static float directions[6][3] = {{1,0,0}, {0,1,0}, {0,0,1}, {-1,0,0}, {0,-1,0}, {0,0,-1}}; for (int i = 0; i < 6; i++) { splitterInDirection (KVector (directions[i][X], directions[i][Y], directions[i][Z])); } startTimedAction (getActionWithId (ACTION_IMPLODE)); Controller.sound->playSoundAtPos (KikiSound::BOMB_EXPLODE, getPos()); getEventWithName ("explode")->triggerActions(); } } // __________________________________________________________________________________________________ void KikiBomb::performAction ( KikiAction * action ) { switch (action->getId()) { case ACTION_ROTATE: angle += action->getRelativeDelta() * 360; break; case ACTION_IMPLODE: size = 1.0 - action->getRelativeTime(); break; case ACTION_EXPLODE: size = action->getRelativeTime(); break; default: KikiPushable::performAction (action); } } // __________________________________________________________________________________________________ void KikiBomb::actionFinished ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_IMPLODE) { delete this; } else if (actionId == ACTION_EXPLODE) { splitterInDirection (direction); Controller.sound->playSoundAtPos (KikiSound::BOMB_SPLITTER, getPos()); startTimedAction (getActionWithId (ACTION_IMPLODE)); } else { KikiPushable::actionFinished (action); } } // __________________________________________________________________________________________________ void KikiBomb::render () { colors[KikiBomb_base_color].glColor(); glScalef(size*0.3, size*0.3, size*0.3); glRotatef(angle, 1.0, 0.0, 0.0); glRotatef(90, 0.0, 1.0, 0.0); glRotatef(angle, 1.0, 0.0, 0.0); glutSolidDodecahedron (); glRotatef(90, 1.0, 0.0, 0.0); glutSolidDodecahedron (); } kiki/src/items/KikiBomb.h0000666000000000000000000000254407644706107014277 0ustar rootroot/* * KikiBomb.h * kiki */ #ifndef __KikiBomb #define __KikiBomb #include "KikiPushable.h" // __________________________________________________________________________________________________ class KikiBomb : public KikiPushable { KIKI_OBJECT_HEADER protected: // ..................................................................... PROTECTED float angle; float size; bool splitted; void splitterInDirection ( const KVector & direction ); enum { ACTION_ROTATE = KikiPushable::ACTION_END, ACTION_IMPLODE, ACTION_EXPLODE, ACTION_END }; public: // ........................................................................ PUBLIC KikiBomb (); virtual void performAction ( KikiAction * action ); virtual void actionFinished ( KikiAction * action ); void bulletImpact (); void render (); }; // __________________________________________________________________________________________________ class KikiBombSplitter : public KikiBomb { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiBombSplitter ( const KVector & direction ); }; #endif kiki/src/items/KikiBullet.cpp0000666000000000000000000001210110326710722015155 0ustar rootroot/* * KikiBullet.cpp * kiki */ #include "KikiBullet.h" #include "KikiWorld.h" #include "KikiSound.h" #include "KikiMutant.h" #include "KikiBotStatus.h" #include "KikiStatusDisplay.h" #include #include KDL_CLASS_INTROSPECTION_1 (KikiBullet, KikiObject) KIKI_OBJECT_VALUES (KikiBullet, false) // __________________________________________________________________________________________________ #define KIKI_BULLET_RADIUS 0.1 // __________________________________________________________________________________________________ KikiBullet::KikiBullet () : KikiObject () { size = KIKI_BULLET_RADIUS; color = colors[KikiBullet_base_color]; src_object = NULL; addAction (new KikiAction (this, ACTION_FLY, "fly", 40)); addAction (new KikiAction (this, ACTION_EXPLODE, "explode", 200)); } // __________________________________________________________________________________________________ void KikiBullet::shootFromBot ( KikiBot * bot ) { //if (bot->getStatus()->getEnergy() >= 0.01 || Controller.player_status->isVisible() == false) { KikiBullet * bullet = new KikiBullet (); Controller.world->addObject(bullet); bullet->direction = bot->getCurrentDir(); bullet->setPosition((KVector)bot->getPos() + bullet->direction/2.0); bullet->src_object = bot; bullet->color = bot->getBodyColor(); bullet->color.setAlpha(0.8); //if (bot->getClassId() >= KikiMutant::classId()) // mutants loose energy when shooting //{ // bot->getStatus()->addEnergy(-0.01); //} Controller.sound->playSoundAtPos(KikiSound::BULLET_SHOT, bot->getPos()); if (bullet->hitObjectAtPos (bullet->position + bullet->direction/2.0)) return; Controller.timer_event->addAction (bullet->getActionWithId(ACTION_FLY)); } //else //{ // Controller.sound->playSoundAtPos(KikiSound::BOT_NO_ENERGY, bot->getPos()); //} } // __________________________________________________________________________________________________ void KikiBullet::performAction ( KikiAction * action ) { float relTime = action->getRelativeTime(); int actionId = action->getId(); if (actionId == ACTION_FLY) { current_position = position + relTime * direction; } else if (actionId == ACTION_EXPLODE) { size = KIKI_BULLET_RADIUS + relTime/2.0; color.setAlpha(0.8 * (1.0-relTime)); } } // __________________________________________________________________________________________________ void KikiBullet::display () { glPushAttrib(GL_CURRENT_BIT); glPushMatrix(); current_position.glTranslate(); color.glColor(); kDisplaySolidSphere(size); glPopMatrix(); glPopAttrib(); } // __________________________________________________________________________________________________ bool KikiBullet::hitObjectAtPos ( const KikiPos & pos ) { if (Controller.world->isInvalidPos(pos) || Controller.world->isOccupiedPos(pos)) { KikiObject * hitObject = Controller.world->getRealOccupantAtPos (pos); if (hitObject != src_object) { if (hitObject) { hitObject->bulletImpact(); if (hitObject->getClassId() >= KikiMutant::classId() && ((KikiMutant*)hitObject)->isDead() == false) { Controller.sound->playSoundAtPos(KikiSound::BULLET_HIT_MUTANT, pos); } else if (hitObject == (KikiBot*)Controller.player) { Controller.sound->playSoundAtPos(KikiSound::BULLET_HIT_PLAYER, pos); } else { Controller.sound->playSoundAtPos(KikiSound::BULLET_HIT_OBJECT, pos); } } else { Controller.sound->playSoundAtPos(KikiSound::BULLET_HIT_WALL, pos); } Controller.timer_event->addAction (getActionWithId(ACTION_EXPLODE)); return true; } } return false; } // __________________________________________________________________________________________________ void KikiBullet::finishAction ( KikiAction * action ) { std::string actionName = action->getName(); if (actionName == "fly") { position = current_position; } } // __________________________________________________________________________________________________ void KikiBullet::actionFinished ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_FLY) { if (hitObjectAtPos (position + direction/2.0)) { return; } Controller.timer_event->addAction (getActionWithId(ACTION_FLY)); } else if (actionId == ACTION_EXPLODE) { Controller.world->deleteObject(this); } } kiki/src/items/KikiBullet.h0000666000000000000000000000233607644706107014646 0ustar rootroot/* * KikiBullet.h * kiki */ #ifndef __KikiBullet #define __KikiBullet #include "KikiObject.h" #include "KikiPos.h" #include class KikiBot; // __________________________________________________________________________________________________ class KikiBullet : public KikiObject { KIKI_OBJECT_HEADER // ........................................................................ PROTECTED protected: // ..................................................................... PROTECTED float size; KColor color; KikiObject * src_object; bool hitObjectAtPos ( const KikiPos & pos ); enum { ACTION_FLY, ACTION_EXPLODE }; // ........................................................................ PUBLIC public: // ........................................................................ PUBLIC KikiBullet (); static void shootFromBot ( KikiBot * bot ); void performAction ( KikiAction * action ); void finishAction ( KikiAction * action ); void actionFinished ( KikiAction * action ); void display (); }; #endif kiki/src/items/KikiCellText.cpp0000666000000000000000000000350207644706107015472 0ustar rootroot/* * KikiCellText.cpp * kiki */ #include "KikiCellText.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiCellText, KikiObject ) KIKI_OBJECT_VALUES ( KikiCellText, false ) // __________________________________________________________________________________________________ KikiCellText::KikiCellText (const std::string & text, float height, bool center, int colorIndex ) : KikiObject(), KikiText (text, center, colorIndex) { offset = NULL; cell_height = height; } // __________________________________________________________________________________________________ void KikiCellText::setOffset ( const KVector & v ) { if (offset) { delete offset; } offset = new KVector(v); } // __________________________________________________________________________________________________ void KikiCellText::display () { loadId(); glPushAttrib (GL_CURRENT_BIT | GL_ENABLE_BIT | GL_POLYGON_BIT); glPushMatrix (); glTranslatef (position[X], position[Y], position[Z]); KMatrix (current_orientation).glMultMatrix(); if (offset) { glTranslatef ((*offset)[X], (*offset)[Y], (*offset)[Z]); } float factor = cell_height/height; glScalef (factor, factor, factor); if (picked) { glPushAttrib (GL_CURRENT_BIT); glDisable (GL_LIGHTING); glColor4f (1.0, 1.0, 1.0, 1.0); glPushMatrix(); glScalef (width, height, 1); kDisplayWireCube (1.0); glPopMatrix(); glEnable (GL_LIGHTING); glPopAttrib(); } KikiText::display(); glPopMatrix(); glPopAttrib(); } kiki/src/items/KikiCellText.h0000666000000000000000000000152707644706107015144 0ustar rootroot/* * KikiCellText.h * kiki */ #ifndef __KikiCellText #define __KikiCellText #include "KikiObject.h" #include "KikiText.h" // __________________________________________________________________________________________________ class KikiCellText : public KikiObject, public KikiText { KIKI_OBJECT_HEADER protected: // ..................................................................... PROTECTED KVector * offset; float cell_height; public: // ........................................................................ PUBLIC KikiCellText ( const std::string & text, float height = 1.0, bool center = true, int colorIndex = base_color ); void setOffset ( const KVector & offset ); void display (); }; #endif kiki/src/items/KikiGate.cpp0000666000000000000000000001112607644706107014627 0ustar rootroot/* * KikiGate.cpp * kiki */ #include "KikiGate.h" #include "KikiWorld.h" #include "KikiPlayer.h" #include "KikiSound.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiGate, KikiSwitch ) KIKI_OBJECT_VALUES_1 ( KikiGate, false, sphere ) static int ENTER_EVENT; // __________________________________________________________________________________________________ KikiGate::KikiGate ( bool open ) : KikiSwitch (open) { ENTER_EVENT = addEventWithName ("enter"); value = 0.0; getActionWithId(ACTION_ROTATE)->setDuration(3000); sound_on = KikiSound::GATE_OPEN; sound_off = KikiSound::GATE_CLOSE; } // __________________________________________________________________________________________________ void KikiGate::newCellMate ( KikiObject * object ) { if (object == Controller.getPlayer() && active) // if new cell mate is player and gate is active { Controller.sound->playSound (KikiSound::GATE_WARP); events[ENTER_EVENT]->triggerActions(); // trigger actions } } // __________________________________________________________________________________________________ void KikiGate::renderBar ( float r, float b, float h ) { glBegin(GL_QUAD_STRIP); glNormal3f(0,1,0); glVertex3f(-r, h, -r); glVertex3f(-b, h, -b); glVertex3f( r, h, -r); glVertex3f( b, h, -b); glVertex3f( r, h, r); glVertex3f( b, h, b); glVertex3f(-r, h, r); glVertex3f(-b, h, b); glVertex3f(-r, h, -r); glVertex3f(-b, h, -b); glEnd(); glBegin(GL_QUAD_STRIP); glNormal3f(0,-1,0); glVertex3f(-b, -h, -b); glVertex3f(-r, -h, -r); glVertex3f( b, -h, -b); glVertex3f( r, -h, -r); glVertex3f( b, -h, b); glVertex3f( r, -h, r); glVertex3f(-b, -h, b); glVertex3f(-r, -h, r); glVertex3f(-b, -h, -b); glVertex3f(-r, -h, -r); glEnd(); glBegin(GL_QUADS); glNormal3f(0,0,-1); glVertex3f(-r, -h, -r); glVertex3f(-r, h, -r); glVertex3f( r, h, -r); glVertex3f( r, -h, -r); glNormal3f(1,0,0); glVertex3f( r, -h, -r); glVertex3f( r, h, -r); glVertex3f( r, h, r); glVertex3f( r, -h, r); glNormal3f(0,0,1); glVertex3f( r, -h, r); glVertex3f( r, h, r); glVertex3f(-r, h, r); glVertex3f(-r, -h, r); glNormal3f(-1,0,0); glVertex3f(-r, -h, r); glVertex3f(-r, h, r); glVertex3f(-r, h, -r); glVertex3f(-r, -h, -r); glNormal3f(0,0,1); glVertex3f(-b, h, -b); glVertex3f(-b, -h, -b); glVertex3f( b, -h, -b); glVertex3f( b, h, -b); glNormal3f(-1,0,0); glVertex3f( b, h, -b); glVertex3f( b, -h, -b); glVertex3f( b, -h, b); glVertex3f( b, h, b); glNormal3f(0,0,-1); glVertex3f( b, h, b); glVertex3f( b, -h, b); glVertex3f(-b, -h, b); glVertex3f(-b, h, b); glNormal3f(1,0,0); glVertex3f(-b, h, b); glVertex3f(-b, -h, b); glVertex3f(-b, -h, -b); glVertex3f(-b, h, -b); glEnd(); } // __________________________________________________________________________________________________ void KikiGate::render () { KColor gate_color = colors[KikiGate_base_color]; if (active == false) { gate_color.setAlpha (gate_color.getAlpha()/4.0); } gate_color.glColor(); float v = sin(DEG2RAD(angle)); float av = kAbs(v); float b = 0.29 + av * 0.1; float h = 0.1 - av * 0.05; float r = 0.49; float t = v * (0.49 - h); float s = 1.0 - av * 0.5; glEnable(GL_POLYGON_OFFSET_FILL); glPushMatrix(); glScalef(s, 1.0, s); glTranslatef (0, t, 0); glPolygonOffset(0.1, 0.1); renderBar (r, b, h); glTranslatef (0, -2*t, 0); glPolygonOffset(0.2, 0.2); renderBar (r, b, h); glPopMatrix(); glPushMatrix(); glRotatef (90, 1.0, 0.0, 0.0); glScalef(s, 1.0, s); glTranslatef (0, t, 0); glPolygonOffset(0.3, 0.3); renderBar (r, b, h); glTranslatef (0, -2*t, 0); glPolygonOffset(0.4, 0.4); renderBar (r, b, h); glPopMatrix(); glPushMatrix(); glRotatef (-90, 0.0, 0.0, 1.0); glScalef(s, 1.0, s); glTranslatef (0, t, 0); glPolygonOffset(0.5, 0.5); renderBar (r, b, h); glTranslatef (0, -2*t, 0); glPolygonOffset(0.6, 0.6); renderBar (r, b, h); glPopMatrix(); glDisable(GL_POLYGON_OFFSET_FILL); if (active) { colors[KikiGate_sphere_color].glColor(); kDisplaySolidSphere(0.20); } } kiki/src/items/KikiGate.h0000666000000000000000000000134407644706107014275 0ustar rootroot/* * KikiGate.h * kiki */ #ifndef __KikiGate #define __KikiGate #include "KikiSwitch.h" // __________________________________________________________________________________________________ class KikiGate : public KikiSwitch { KIKI_OBJECT_HEADER protected: // ..................................................................... PROTECTED float value; void renderBar ( float, float, float ); public: // ........................................................................ PUBLIC KikiGate ( bool open = false ); void bulletImpact () {} void newCellMate ( KikiObject * object ); void render (); }; #endif kiki/src/items/KikiGear.cpp0000666000000000000000000000773507644706107014640 0ustar rootroot/* * KikiGear.cpp * kiki */ #include "KikiGear.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiSound.h" #include "gear.h" #include "valve.h" #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiGear, KikiValve ) KIKI_OBJECT_VALUES ( KikiGear, true ) // __________________________________________________________________________________________________ KikiGear::KikiGear ( int face ) : KikiValve (face) { } // __________________________________________________________________________________________________ KikiPos * KikiGear::getNeighborDirections () { static KikiPos neighbors[3][4] = { {KikiPos (0,1,0), KikiPos (0,-1,0), KikiPos (0,0,1), KikiPos (0,0,-1)}, {KikiPos (1,0,0), KikiPos (-1,0,0), KikiPos (0,0,1), KikiPos (0,0,-1)}, {KikiPos (1,0,0), KikiPos (-1,0,0), KikiPos (0,1,0), KikiPos (0,-1,0)}}; return neighbors[face % 3]; } // __________________________________________________________________________________________________ std::vector KikiGear::getNeighborGears () { std::vector neighbor_gears; KikiPos * neighbor_dirs = getNeighborDirections(); KikiPos pos = getPos(); for (int i = 0; i < 4; i++) { KikiObject * neighbor = Controller.world->getOccupantAtPos (pos + neighbor_dirs[i]); if (neighbor && neighbor->getClassId() >= KikiGear::classId()) { KikiGear * neighbor_gear = (KikiGear*)neighbor; if (neighbor_gear->face == face) { neighbor_gears.push_back (neighbor_gear); } } } return neighbor_gears; } // __________________________________________________________________________________________________ void KikiGear::initAction ( KikiAction * action ) { KikiValve::initAction (action); if (action->getId() == ACTION_PUSH) { setActive (false); } } // __________________________________________________________________________________________________ void KikiGear::actionFinished ( KikiAction * action ) { KikiValve::actionFinished (action); int actionId = action->getId(); if (actionId == ACTION_PUSH || actionId == ACTION_FALL) { if (move_action == NULL) { updateActive(); } } } // __________________________________________________________________________________________________ void KikiGear::updateActive () { setActive (false); std::vector neighbors = getNeighborGears(); for (std::vector::iterator iter = neighbors.begin(); iter != neighbors.end(); iter++) { if ((*iter)->active) { setActive (true); return; } } } // __________________________________________________________________________________________________ void KikiGear::setActive ( bool a ) { if (active != a) { active = a; Controller.sound->playSound (active ? KikiSound::GEAR_ON : KikiSound::GEAR_OFF); std::vector neighbors = getNeighborGears(); for (std::vector::iterator iter = neighbors.begin(); iter != neighbors.end(); iter++) { if (active) { (*iter)->setActive (true); } else { (*iter)->updateActive (); } } } } // __________________________________________________________________________________________________ void KikiGear::render () { if (active) { glRotatef (clockwise ? angle : -angle, 0.0, 0.0, 1.0); } KikiValve::colors[0].glColor(); render_valve; glTranslatef (0.0, 0.0, 0.4); colors[0].glColor(); render_gear; } kiki/src/items/KikiGear.h0000666000000000000000000000161007644706107014267 0ustar rootroot/* * KikiGear.h * kiki */ #ifndef __KikiGear #define __KikiGear #include "KikiValve.h" // __________________________________________________________________________________________________ class KikiGear : public KikiValve { public: // ........................................................................ PUBLIC KikiGear ( int face = KikiFace::PZ ); virtual void render (); virtual void initAction ( KikiAction * action ); virtual void actionFinished ( KikiAction * action ); virtual void setActive ( bool active = true ); virtual void updateActive (); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER KikiPos * getNeighborDirections (); std::vector getNeighborGears (); }; #endif kiki/src/items/KikiGenerator.cpp0000666000000000000000000000334007644706107015674 0ustar rootroot/* * KikiGenerator.cpp * kiki */ #include "KikiGenerator.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiSound.h" #include "KikiWire.h" #include #include "gear.h" #include "generator.h" // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiGenerator, KikiGear ) KIKI_OBJECT_VALUES ( KikiGenerator, true ) // __________________________________________________________________________________________________ KikiGenerator::KikiGenerator ( int face ) : KikiGear (face) { } // __________________________________________________________________________________________________ void KikiGenerator::activateWires () { KikiObjectList wires = Controller.world->getObjectsOfTypeAtPos (KikiWire::classId(), getPos()); for (KikiObjectIter iter = wires.begin(); iter != wires.end(); iter++) { ((KikiWire*)*iter)->setActive (active); } } // __________________________________________________________________________________________________ void KikiGenerator::setActive ( bool a ) { if (active != a) { KikiGear::setActive (a); activateWires(); Controller.sound->playSound (active ? KikiSound::GENERATOR_ON : KikiSound::GENERATOR_OFF); } } // __________________________________________________________________________________________________ void KikiGenerator::render () { if (active) { glRotatef (clockwise ? angle : -angle, 0.0, 0.0, 1.0); } colors[0].glColor(); render_generator; KikiGear::colors[0].glColor(); glTranslatef (0.0, 0.0, 0.4); render_gear; } kiki/src/items/KikiGenerator.h0000666000000000000000000000127007644706107015341 0ustar rootroot/* * KikiGenerator.h * kiki */ #ifndef __KikiGenerator #define __KikiGenerator #include "KikiGear.h" // __________________________________________________________________________________________________ class KikiGenerator : public KikiGear { public: // ........................................................................ PUBLIC KikiGenerator ( int face = KikiFace::PZ ); void render (); void setActive ( bool active = true ); void activateWires (); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER }; #endif kiki/src/items/KikiItems.h0000666000000000000000000000101207644706107014466 0ustar rootroot/* * KikiItems.h * kiki */ #ifndef __KikiItems #define __KikiItems #include "KikiWall.h" #include "KikiStone.h" #include "KikiAtom.h" #include "KikiBomb.h" #include "KikiSpikes.h" #include "KikiSwitch.h" #include "KikiGate.h" #include "KikiCellText.h" #include "KikiLight.h" #include "KikiBullet.h" #include "KikiWire.h" #include "KikiWireStone.h" #include "KikiGear.h" #include "KikiValve.h" #include "KikiMotorCylinder.h" #include "KikiMotorGear.h" #include "KikiGenerator.h" #endif kiki/src/items/KikiLight.cpp0000666000000000000000000000437007644706110015013 0ustar rootroot/* * KikiLight.cpp * kiki */ #include "KikiLight.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiBillBoard.h" #include KDL_CLASS_INTROSPECTION_1 ( KikiLight, KikiObject ) KIKI_OBJECT_VALUES_3 ( KikiLight, false, diffuse, specular, halo ) // __________________________________________________________________________________________________ KikiLight::KikiLight () : KikiObject(), KLight () { radius = 4.0; setup(); } // __________________________________________________________________________________________________ KikiLight::KikiLight ( const KVector & pos, float r ) : KikiObject(), KLight () { radius = r; //spot_position = position; setPosition (pos); spot_position[W] = 1.0; setup(); Controller.world->addObject (this); } // __________________________________________________________________________________________________ KikiLight::~KikiLight () { if (light_number) { glDisable(light_number); } } // __________________________________________________________________________________________________ void KikiLight::setup () { halo_radius = 1.0; quadratic_attenuation = 1.0/(radius*radius); ambient_color = colors[KikiLight_base_color]; diffuse_color = colors[KikiLight_diffuse_color]; specular_color = colors[KikiLight_specular_color]; initialize (); } // __________________________________________________________________________________________________ void KikiLight::setPosition ( const KVector & pos ) { KLight::setPosition (KVector(pos[X], pos[Y], pos[Z], 1.0)); KikiObject::setPosition (pos); } // __________________________________________________________________________________________________ void KikiLight::display() { if (light_number == 0) return; KLight::setPosition (KVector(position[X], position[Y], position[Z], 1.0)); glDepthMask (false); glPushMatrix(); colors[KikiLight_halo_color].glColor(); position.glTranslate(); KikiBillBoard::displayTextureWithSize (Controller.world->getTextureId (KikiWorld::TEXTURE_GRADIENT), 1.0); glPopMatrix(); glDepthMask (true); } kiki/src/items/KikiLight.h0000666000000000000000000000214407644706110014455 0ustar rootroot/* * KikiLight.h * kiki */ #ifndef __KikiLight #define __KikiLight #include "KikiObject.h" #include // __________________________________________________________________________________________________ class KikiLight : public KikiObject, public KLight { public: // ........................................................................ PUBLIC KikiLight (); KikiLight ( const KVector & position, float radius = 4.0 ); ~KikiLight (); void setPosition ( const KVector & position ); void display (); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER friend class KikiWorld; friend class KikiWire; float radius; float halo_radius; void setup (); }; // __________________________________________________________________________________________________ typedef std::vector KikiLightList; typedef KikiLightList::iterator KikiLightIter; #endif kiki/src/items/KikiMotorCylinder.cpp0000666000000000000000000000464107644706110016537 0ustar rootroot/* * KikiMotorCylinder.cpp * kiki */ #include "KikiMotorCylinder.h" #include "KikiController.h" #include "KikiSound.h" #include "KikiGear.h" #include "cylinder.h" #include "kolben.h" #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiMotorCylinder, KikiObject ) KIKI_OBJECT_VALUES ( KikiMotorCylinder, true ) // __________________________________________________________________________________________________ KikiMotorCylinder::KikiMotorCylinder ( int face ) : KikiObject () { value = 0.0; active = false; orientation = KikiFace::orientationForFace (face); addAction (new KikiAction (this, ACTION_TUCKER, "tucker", 500, KikiAction::REPEAT)); setActive (true); } // __________________________________________________________________________________________________ void KikiMotorCylinder::setActive ( bool a ) { if (active != a) { active = a; if (active) { // ............................................................. start tucker startTimedAction (getActionWithId (ACTION_TUCKER)); } else { stopAction (getActionWithId (ACTION_TUCKER)); } } } // __________________________________________________________________________________________________ void KikiMotorCylinder::performAction ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_TUCKER) { float relTime = action->getRelativeTime(); value = (relTime < 0.5) ? relTime : 1.0 - relTime; value *= 2; } } // __________________________________________________________________________________________________ void KikiMotorCylinder::finishAction ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_TUCKER) { Controller.sound->playSoundAtPos (KikiSound::MOTOR, getPos()); } } // __________________________________________________________________________________________________ void KikiMotorCylinder::render () { colors[0].glColor(); KMatrix (orientation).glMultMatrix(); render_cylinder; glTranslatef (0.0, 0.0, -0.5 * sin(value)); KikiGear::getObjectColor(0).glColor(); render_kolben; } kiki/src/items/KikiMotorCylinder.h0000666000000000000000000000144607644706110016204 0ustar rootroot/* * KikiMotorCylinder.h * kiki */ #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiMotorCylinder : public KikiObject { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiMotorCylinder ( int face = KikiFace::PZ ); void setActive ( bool active ); void performAction ( KikiAction * action ); void finishAction ( KikiAction * action ); void render (); protected: // ..................................................................... PROTECTED enum { ACTION_TUCKER }; bool active; float value; }; kiki/src/items/KikiMotorGear.cpp0000666000000000000000000000162407644706110015642 0ustar rootroot/* * KikiMotorGear.cpp * kiki */ #include "KikiMotorGear.h" #include "gear.h" #include "motor.h" // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiMotorGear, KikiGear ) KIKI_OBJECT_VALUES ( KikiMotorGear, true ) // __________________________________________________________________________________________________ KikiMotorGear::KikiMotorGear ( int face ) : KikiGear (face) { setActive (true); } // __________________________________________________________________________________________________ void KikiMotorGear::render () { colors[0].glColor(); render_motor; if (active) { glRotatef (clockwise ? angle : -angle, 0.0, 0.0, 1.0); } KikiGear::getObjectColor(0).glColor(); glTranslatef (0.0, 0.0, 0.4); render_gear; } kiki/src/items/KikiMotorGear.h0000666000000000000000000000121407644706110015302 0ustar rootroot/* * KikiMotorGear.h * kiki */ #ifndef __KikiMotorGear #define __KikiMotorGear #include "KikiGear.h" // __________________________________________________________________________________________________ class KikiMotorGear : public KikiGear { public: // ........................................................................ PUBLIC KikiMotorGear ( int face = KikiFace::PZ ); void updateActive () {} void render (); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER }; #endif kiki/src/items/KikiNeutron.cpp0000666000000000000000000000223507644706110015374 0ustar rootroot/* * KikiNeutron.cpp * kiki */ #include "KikiNeutron.h" #include "KikiAtom.h" #include "KikiController.h" #include // __________________________________________________________________________________________________ KikiNeutron::KikiNeutron ( const KVector & orbitNormal, float startAngle ) { start_angle = startAngle; // ............................................................. init the orbit rotation KVector orbit_normal (orbitNormal.normal()); KVector zVector(0.0, 0.0, 1.0); angle = zVector.angle(orbitNormal); if (angle != 0) // normal is not aligned with z-axis { orientation = KQuaternion::rotationAroundVector (angle, zVector.cross (orbit_normal)); } } // __________________________________________________________________________________________________ void KikiNeutron::display () { glPushMatrix(); orientation.glRotate(); angle += Controller.getRelativeDelta() * 360.0; glRotatef(start_angle + angle, 0.0, 0.0, 1.0); glTranslatef(0.4, 0.0, 0.0); kDisplaySolidSphere(0.1); glPopMatrix(); } kiki/src/items/KikiNeutron.h0000666000000000000000000000122407644706110015036 0ustar rootroot/* * KikiNeutron.h * kiki */ #ifndef __KikiNeutron #define __KikiNeutron #include // __________________________________________________________________________________________________ class KikiNeutron { protected: // ..................................................................... PROTECTED float start_angle; float angle; KQuaternion orientation; public: // ........................................................................ PUBLIC KikiNeutron ( const KVector & orbitNormal, float startAngle ); void display (); }; #endif kiki/src/items/KikiPushable.cpp0000666000000000000000000001123307644706110015503 0ustar rootroot/* * KikiPushable.cpp * kiki */ #include "KikiPushable.h" #include "KikiWorld.h" #include "KikiSound.h" #include "KikiPlayer.h" #include "KikiBomb.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiPushable, KikiObject ) KIKI_OBJECT_VALUES ( KikiPushable, true ) // __________________________________________________________________________________________________ KikiPushable::KikiPushable () : KikiObject () { landing_sound = KikiSound::STONE_LAND; pushing_sound = KikiSound::STONE_MOVE; pusher = NULL; direction = KVector(); addAction (new KikiAction (this, ACTION_PUSH, "push")); addAction (new KikiAction (this, ACTION_FALL, "fall", 40)); } // __________________________________________________________________________________________________ void KikiPushable::pushedByObjectInDirection ( KikiObject * object, const KVector & dir, int duration ) { KikiAction * pushAction = getActionWithId (ACTION_PUSH); pusher = object; move_action = pushAction; direction = dir; //KConsole::printf ("pushedByObjectInDirection [%f %f %f]", direction[X], direction[Y], direction[Z]); pushAction->setDuration (Controller.unmapMsTime (duration)); Controller.timer_event->addAction (pushAction); } // __________________________________________________________________________________________________ void KikiPushable::initAction ( KikiAction * action ) { switch (action->getId()) { case ACTION_PUSH: Controller.sound->playSound (pushing_sound); case ACTION_FALL: //KConsole::printf ("KikiPushable::initAction object will move to pos [%f %f %f]", //(position + direction)[0], (position + direction)[1], (position + direction)[2]); Controller.world->objectWillMoveToPos (this, position + direction, action->getDuration()); } } // __________________________________________________________________________________________________ void KikiPushable::performAction ( KikiAction * action ) { switch (action->getId()) { case ACTION_PUSH: case ACTION_FALL: setCurrentPosition (position + action->getRelativeTime() * direction); } } // __________________________________________________________________________________________________ void KikiPushable::finishAction ( KikiAction * action ) { switch (action->getId()) { case ACTION_PUSH: case ACTION_FALL: move_action = NULL; Controller.world->objectMovedFromPos (this, position); // update world position setPosition (current_position); } } // __________________________________________________________________________________________________ void KikiPushable::actionFinished ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_PUSH || actionId == ACTION_FALL) { KVector gravityDir = direction; if (actionId == ACTION_PUSH) { if (pusher->getClassId() >= KikiBot::classId()) { gravityDir = ((KikiBot*)pusher)->getDown(); } else if (pusher->getClassId() >= KikiBomb::classId()) { if (getClassId() >= KikiBot::classId()) { if (direction == (KVector)((KikiBot*)this)->getUp()) { // bots don't fall through bomb splitter direction.reset(); return; } else { gravityDir = ((KikiBot*)this)->getDown(); // bots pushed by bombs fall down } } else { direction.reset(); return; // objects pushed by bombs don't fall } } } if (Controller.world->isUnoccupiedPos (position + gravityDir)) { direction = gravityDir; move_action = getActionWithId (ACTION_FALL); Controller.timer_event->addAction (move_action); } else { direction.reset (); Controller.sound->playSoundAtPos (landing_sound, position); } } } kiki/src/items/KikiPushable.h0000666000000000000000000000227307644706110015154 0ustar rootroot/* * KikiPushable.h * kiki */ #ifndef __KikiPushable #define __KikiPushable #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiPushable : public KikiObject { KIKI_OBJECT_HEADER friend class KikiWorld; protected: // ..................................................................... PROTECTED enum { ACTION_PUSH, ACTION_FALL, ACTION_END }; int pushing_sound, landing_sound; KikiObject * pusher; public: // ........................................................................ PUBLIC KikiPushable (); virtual void pushedByObjectInDirection ( KikiObject * object, const KVector & direction, int duration ); virtual void initAction ( KikiAction * action ); virtual void performAction ( KikiAction * action ); virtual void finishAction ( KikiAction * action ); virtual void actionFinished ( KikiAction * action ); }; #endif kiki/src/items/KikiSpikes.cpp0000666000000000000000000001124307644706110015177 0ustar rootroot/* * KikiSpikes.cpp * kiki */ #include "KikiSpikes.h" #include "KikiWorld.h" #include "KikiPlayer.h" #include "KikiSound.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiSpikes, KikiObject ) KIKI_OBJECT_VALUES ( KikiSpikes, false ) // __________________________________________________________________________________________________ #define MIN_SPIKE_VALUE 0.00f // __________________________________________________________________________________________________ unsigned int KikiSpikes::spike_list = 0; // __________________________________________________________________________________________________ KikiSpikes::KikiSpikes ( int f ) : KikiObject() { face = f; spiked_bot = NULL; spike = MIN_SPIKE_VALUE; addAction (new KikiAction (this, 0, "spike", 2000, KikiAction::REPEAT)); startTimedAction (actions[0]); if (spike_list == 0) { initialize(); } } // __________________________________________________________________________________________________ void KikiSpikes::initialize () { if (spike_list) { glDeleteLists (spike_list, 1); } spike_list = glGenLists(1); if (spike_list) { glNewList (spike_list, GL_COMPILE); int subdiv = 8; int numSpikes = 3; float offset = 1.0/(2.0*numSpikes)-0.5; float radius = 0.1; for (int i = 0; i < numSpikes; i++) { for (int j = 0; j < numSpikes; j++) { glPushMatrix(); glTranslated(i/(float)numSpikes+offset, j/(float)numSpikes+offset, 0.0); kDisplaySolidCylinder(radius, 0.0, 1.0, subdiv); glPopMatrix(); } } glEndList(); } else { KConsole::printError("KikiSpikes::KikiSpikes unable to create display list"); } } // __________________________________________________________________________________________________ void KikiSpikes::performAction ( KikiAction * action ) { float relTime = action->getRelativeTime(); if (relTime < 0.33) // ........................... spikes grow { spike = kMax (relTime, MIN_SPIKE_VALUE); if (relTime == 0) { Controller.sound->playSoundAtPos (KikiSound::SPIKES_START, position); } } else // .......................................... spikes shrink or rest { spike = kMax(0.66 - relTime, MIN_SPIKE_VALUE); } if (spiked_bot) { if (relTime == 0) { // ......................................................... spike bot spikeBot (spiked_bot); } else if (relTime < 0.66) { // ......................................................... punish bot spiked_bot->getStatus()->addHealth (-action->getRelativeDelta()/5.0); } else { // ......................................................... release bot spiked_bot->setSpiked(false); } } } // __________________________________________________________________________________________________ void KikiSpikes::spikeBot ( KikiBot * bot ) { if (bot->isDead()) { spiked_bot = NULL; } else { spiked_bot = bot; spiked_bot->setSpiked(true); if (spiked_bot == Controller.player) { Controller.sound->playSound(KikiSound::BOT_SPIKED); } } } // __________________________________________________________________________________________________ void KikiSpikes::newCellMate ( KikiObject * object ) { if (object->getClassId() >= KikiBot::classId()) // bot spiked { if (spike != MIN_SPIKE_VALUE) { spikeBot ((KikiBot*)object); } else { spiked_bot = (KikiBot*)object; } } } // __________________________________________________________________________________________________ void KikiSpikes::cellMateLeft ( KikiObject * object ) { if (object == spiked_bot) { spiked_bot = NULL; } } // __________________________________________________________________________________________________ void KikiSpikes::render () { KikiFace::transformationForFace (face); colors[KikiSpikes_base_color].glColor(); glScalef (1.0, 1.0, spike); glCallList(spike_list); } kiki/src/items/KikiSpikes.h0000666000000000000000000000211507644706110014642 0ustar rootroot/* * KikiSpikes.h * kiki */ #ifndef __KikiSpikes #define __KikiSpikes #include "KikiObject.h" class KikiBot; // __________________________________________________________________________________________________ class KikiSpikes : public KikiObject { public: // ........................................................................ PUBLIC KikiSpikes ( int face = KikiFace::PZ ); void performAction ( KikiAction * action ); void newCellMate ( KikiObject * object ); void cellMateLeft ( KikiObject * object ); void render (); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER friend class KikiWorld; static unsigned int spike_list; // display list for spikes static void initialize (); int face; float spike; // size of spikes KikiBot * spiked_bot; // spiked bot (to release it again :-) void spikeBot ( KikiBot * bot ); }; #endif kiki/src/items/KikiStone.cpp0000666000000000000000000000302410323447646015033 0ustar rootroot/* * KikiStone.cpp * kiki */ #include "KikiStone.h" #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiStone, KikiPushable ) KIKI_OBJECT_VALUES ( KikiStone, true ) // __________________________________________________________________________________________________ KikiStone::KikiStone (KColor * c, bool s) : KikiPushable () { slippery = s; color = NULL; if (c) color = new KColor(*c); } // __________________________________________________________________________________________________ KikiStone::~KikiStone () { if (color) delete color; } // __________________________________________________________________________________________________ void KikiStone::render () { if (color) color->glColor(); else colors[KikiStone_base_color].glColor(); if (isSlippery()) { float s = 0.48f; float o = 0.5-(s+0.02f)/2; glPushMatrix(); glTranslated(o, o, o); kDisplaySolidCube (s); glTranslated(-2*o, 0.0, 0.0); kDisplaySolidCube (s); glTranslated(0.0, -2*o, 0.0); kDisplaySolidCube (s); glTranslated(2*o, 0.0, 0.0); kDisplaySolidCube (s); glTranslated(0.0, 0.0, -2*o); kDisplaySolidCube (s); glTranslated(0.0, 2*o, 0.0); kDisplaySolidCube (s); glTranslated(-2*o, 0.0, 0.0); kDisplaySolidCube (s); glTranslated(0.0, -2*o, 0.0); kDisplaySolidCube (s); glPopMatrix(); } else { kDisplaySolidCube (0.98); } } kiki/src/items/KikiStone.h0000666000000000000000000000120110320250063014451 0ustar rootroot/* * KikiStone.h * kiki */ #ifndef __KikiStone #define __KikiStone #include "KikiPushable.h" // __________________________________________________________________________________________________ class KikiStone : public KikiPushable { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiStone (KColor * c = NULL, bool slippery = false); ~KikiStone (); virtual void render (); virtual bool isSlippery() { return slippery; } bool slippery; KColor * color; }; #endif kiki/src/items/KikiSwitch.cpp0000666000000000000000000001045607645543105015213 0ustar rootroot/* * KikiSwitch.cpp * kiki */ #include "KikiSwitch.h" #include "KikiController.h" #include "KikiSound.h" #include "KikiLight.h" #include #include #define K_INCLUDE_GLUT #include "KIncludeTools.h" // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiSwitch, KikiObject ) KIKI_OBJECT_VALUES_1 ( KikiSwitch, true, sphere ) static int SWITCH_OFF_EVENT; static int SWITCH_ON_EVENT; static int SWITCHED_EVENT; // __________________________________________________________________________________________________ KikiSwitch::KikiSwitch ( bool on ) : KikiObject() { angle = 0.0; light = NULL; active = on; sound_on = KikiSound::SWITCH_ON; sound_off = KikiSound::SWITCH_OFF; SWITCH_OFF_EVENT = addEventWithName ("off"); SWITCH_ON_EVENT = addEventWithName ("on"); SWITCHED_EVENT = addEventWithName ("switched"); addAction (new KikiAction (this, ACTION_TOGGLE, "toggle", 0)); addAction (new KikiAction (this, ACTION_ROTATE, "rotation", 2000, KikiAction::CONTINUOUS)); if (active) { startTimedAction (getActionWithId(ACTION_ROTATE)); light = new KikiLight (position, 3.0); light->addReceiverCallback((KObject*)this, (KCallbackPtr)&KikiSwitch::lightDeleted, KIKI_NOTIFICATION_OBJECT_DELETED); } } // __________________________________________________________________________________________________ KikiSwitch::~KikiSwitch () { if (light) delete light; } // __________________________________________________________________________________________________ void KikiSwitch::lightDeleted () { light = NULL; } // __________________________________________________________________________________________________ void KikiSwitch::setActive ( bool status ) { if (active != status) { active = status; if (active) { // ............................................................. start the orbit rotation startTimedAction (getActionWithId(ACTION_ROTATE)); Controller.sound->playSound (sound_on); events[SWITCH_ON_EVENT]->triggerActions(); light = new KikiLight (position, 3.0); light->addReceiverCallback((KObject*)this, (KCallbackPtr)&KikiSwitch::lightDeleted, KIKI_NOTIFICATION_OBJECT_DELETED); } else { stopAction (getActionWithId(ACTION_ROTATE)); Controller.sound->playSound (sound_off); events[SWITCH_OFF_EVENT]->triggerActions(); if (light) { delete light; light = NULL; } } events[SWITCHED_EVENT]->triggerActions(); } } // __________________________________________________________________________________________________ void KikiSwitch::setPosition ( const KVector & pos ) { if (light) { light->setPosition(pos); } KikiObject::setPosition(pos); } // __________________________________________________________________________________________________ void KikiSwitch::performAction ( KikiAction * action ) { int actionId = action->getId(); if (actionId == ACTION_TOGGLE) { toggle(); } else { angle += action->getRelativeDelta() * 360; } } // __________________________________________________________________________________________________ void KikiSwitch::render () { float radius = 0.5; float innerRadius = 0.05; colors[KikiSwitch_base_color].glColor(); glPushMatrix(); glRotatef(angle, 1.0, 0.0, 0.0); glutSolidTorus (innerRadius, (radius-innerRadius), 6, 8); glRotatef(90, 0.0, 1.0, 0.0); glRotatef(angle, 1.0, 0.0, 0.0); glutSolidTorus (innerRadius, (radius-innerRadius), 6, 8); glRotatef(90, 1.0, 0.0, 0.0); glutSolidTorus (innerRadius, (radius-innerRadius), 6, 8); glPopMatrix(); if (active) { colors[KikiSwitch_sphere_color].glColor(); kDisplaySolidSphere(0.3); } } kiki/src/items/KikiSwitch.h0000666000000000000000000000212507644706110014646 0ustar rootroot/* * KikiSwitch.h * kiki */ #ifndef __KikiSwitch #define __KikiSwitch #include "KikiObject.h" class KikiLight; // __________________________________________________________________________________________________ class KikiSwitch : public KikiObject { KIKI_OBJECT_HEADER protected: bool active; int sound_on, sound_off; float angle; KikiLight * light; enum { ACTION_TOGGLE, ACTION_ROTATE, ACTION_END }; public: // ........................................................................ PUBLIC KikiSwitch ( bool on = false ); ~KikiSwitch (); void lightDeleted (); virtual void performAction ( KikiAction * action ); void bulletImpact () { toggle(); } void toggle () { setActive(!active); } void setActive ( bool active ); bool isActive () const { return active; } void render (); void setPosition ( const KVector & position ); }; #endif kiki/src/items/KikiTest.cpp0000666000000000000000000000171110070562134014650 0ustar rootroot/* * KikiTest.cpp * kiki */ #include "KikiTest.h" //#include "test.h" #include #if defined(__APPLE__) && defined(__MACH__) || defined(_WIN32) #include #else #include #endif // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiTest1, KikiObject ) KIKI_OBJECT_VALUES ( KikiTest1, true ) // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiTest2, KikiObject ) KIKI_OBJECT_VALUES ( KikiTest2, true ) // __________________________________________________________________________________________________ void KikiTest1::render () { glColor3f(1.0, 1.0, 1.0); //render_test; } // __________________________________________________________________________________________________ void KikiTest2::render () { } kiki/src/items/KikiTest.h0000666000000000000000000000150307644706110014323 0ustar rootroot/* * KikiTest.h * kiki */ #ifndef __KikiTest #define __KikiTest #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiTest1 : public KikiObject { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiTest1 () : KikiObject () {} void render (); }; // __________________________________________________________________________________________________ class KikiTest2 : public KikiObject { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiTest2 () : KikiObject () {} void render (); }; #endif kiki/src/items/KikiValve.cpp0000666000000000000000000000415007644706110015015 0ustar rootroot/* * KikiValve.cpp * kiki */ #include "KikiValve.h" #include "valve.h" // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiValve, KikiPushable ) KIKI_OBJECT_VALUES ( KikiValve, true ) // __________________________________________________________________________________________________ KikiValve::KikiValve ( int f ) : KikiPushable () { face = f; angle = 0.0; active = false; addAction (new KikiAction (this, ACTION_ROTATE, "rotation", 2000, KikiAction::REPEAT)); startTimedAction (getActionWithId (ACTION_ROTATE)); } // __________________________________________________________________________________________________ void KikiValve::display () { KikiObject::preDisplay(); KMatrix m (KikiFace::orientationForFace (face)); m.glMultMatrix(); render(); KikiObject::postDisplay(); } // __________________________________________________________________________________________________ void KikiValve::setPosition ( const KVector & pos ) { KikiPushable::setPosition (pos); KikiPos p = getPos (); int dir = face%3; int sum = ((dir == KikiFace::Y || dir == KikiFace::Z) ? p.x : 0) + ((dir == KikiFace::X || dir == KikiFace::Z) ? p.y : 0) + ((dir == KikiFace::X || dir == KikiFace::Y) ? p.z : 0); clockwise = sum % 2; } // __________________________________________________________________________________________________ void KikiValve::performAction ( KikiAction * action ) { switch (action->getId()) { case ACTION_ROTATE: angle += action->getRelativeDelta() * 360; break; default: KikiPushable::performAction (action); } } // __________________________________________________________________________________________________ void KikiValve::render () { colors[0].glColor(); glRotatef (clockwise ? angle : -angle, 0.0, 0.0, 1.0); render_valve; } kiki/src/items/KikiValve.h0000666000000000000000000000170607644706110014466 0ustar rootroot/* * KikiValve.h * kiki */ #ifndef __KikiValve #define __KikiValve #include "KikiPushable.h" // __________________________________________________________________________________________________ class KikiValve : public KikiPushable { public: // ........................................................................ PUBLIC KikiValve ( int face = KikiFace::PZ ); virtual void display (); virtual void render (); virtual void performAction ( KikiAction * action ); virtual void setPosition ( const KVector & pos ); bool isActive () const { return active; } protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER enum { ACTION_ROTATE = KikiPushable::ACTION_END, ACTION_END }; int face; float angle; bool clockwise; bool active; }; #endif kiki/src/items/KikiWall.cpp0000666000000000000000000000340007644706111014635 0ustar rootroot/* * KikiWall.cpp * kiki */ #include "KikiWall.h" #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiWall, KikiObject ) KIKI_OBJECT_VALUES_1 ( KikiWall, true, plate ) // __________________________________________________________________________________________________ void KikiWall::render () { glDisable(GL_LIGHTING); colors[KikiWall_base_color].glColor(); glDepthMask(false); kDisplaySolidCube(1.0); glDepthMask(true); float s = 0.45; float d = 0.5; colors[KikiWall_plate_color].glColor(); glEnable(GL_LIGHTING); glBegin(GL_QUADS); glNormal3f (0.0, 0.0, 1.0); glVertex3f ( s, -s, d); glVertex3f ( s, s, d); glVertex3f (-s, s, d); glVertex3f (-s, -s, d); glNormal3f (0.0, 0.0, -1.0); glVertex3f (-s, -s, -d); glVertex3f (-s, s, -d); glVertex3f ( s, s, -d); glVertex3f ( s, -s, -d); glNormal3f (0.0, 1.0, 0.0); glVertex3f (-s, d, -s); glVertex3f (-s, d, s); glVertex3f ( s, d, s); glVertex3f ( s, d, -s); glNormal3f (0.0, -1.0, 0.0); glVertex3f ( s, -d, -s); glVertex3f ( s, -d, s); glVertex3f (-s, -d, s); glVertex3f (-s, -d, -s); glNormal3f (1.0, 0.0, 0.0); glVertex3f (d, s, -s); glVertex3f (d, s, s); glVertex3f (d, -s, s); glVertex3f (d, -s, -s); glNormal3f (-1.0, 0.0, 0.0); glVertex3f (-d, -s, -s); glVertex3f (-d, -s, s); glVertex3f (-d, s, s); glVertex3f (-d, s, -s); glEnd(); } kiki/src/items/KikiWall.h0000666000000000000000000000071607644706111014311 0ustar rootroot/* * KikiWall.h * kiki */ #ifndef __KikiWall #define __KikiWall #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiWall : public KikiObject { KIKI_OBJECT_HEADER public: // ........................................................................ PUBLIC KikiWall () {} void render (); }; #endif kiki/src/items/KikiWire.cpp0000666000000000000000000001552710336064717014662 0ustar rootroot/* * KikiWire.cpp * kiki */ #include "wire.h" #include "KikiWire.h" #include "KikiBillBoard.h" #include "KikiSwitch.h" #include "KikiController.h" #include "KikiWorld.h" #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiWire, KikiObject ) KIKI_OBJECT_VALUES_1 ( KikiWire, false, light ) static int SWITCH_OFF_EVENT; static int SWITCH_ON_EVENT; static int SWITCHED_EVENT; // __________________________________________________________________________________________________ KikiWire::KikiWire (int f, int connection_dirs) : KikiObject () { connections = connection_dirs; active = false; value = 1.0; face = f; SWITCH_OFF_EVENT = addEventWithName ("off"); SWITCH_ON_EVENT = addEventWithName ("on"); SWITCHED_EVENT = addEventWithName ("switched"); } // __________________________________________________________________________________________________ void KikiWire::updateActive () { std::vector neighbors = getNeighborWires(); for (std::vector::iterator iter = neighbors.begin(); iter != neighbors.end(); iter++) { if ((*iter)->active) { setActive (true); } } } // __________________________________________________________________________________________________ void KikiWire::setActive ( bool a ) { if (active != a) { active = a; std::vector neighbors = getNeighborWires(); bool active_neighbor = false; if (active) { for (std::vector::iterator iter = neighbors.begin(); iter != neighbors.end(); iter++) { if ((*iter)->active) { active_neighbor = true; break; } } } for (std::vector::iterator iter = neighbors.begin(); iter != neighbors.end(); iter++) { (*iter)->setActive (active); } KikiSwitch * cellSwitch = (KikiSwitch*)Controller.world->getObjectOfTypeAtPos (KikiSwitch::classId(), getPos ()); if (cellSwitch) { cellSwitch->setActive (active); } events[active ? SWITCH_ON_EVENT : SWITCH_OFF_EVENT]->triggerActions(); events[SWITCHED_EVENT]->triggerActions(); } } // __________________________________________________________________________________________________ std::vector KikiWire::getNeighborWires () { std::vector neighbor_wires; std::vector point_list = getConnectionPoints(); std::vector neighbor_dirs; KQuaternion rot = KikiFace::orientationForFace (face); KVector n = KikiFace::normalVectorForFace (face); neighbor_dirs.push_back (KVector (0,0,0)); if (connections & RIGHT) { neighbor_dirs.push_back (rot.rotate (KVector (1,0,0))); neighbor_dirs.push_back (rot.rotate (KVector (1,0,0)) + n); } if (connections & LEFT) { neighbor_dirs.push_back (rot.rotate (KVector (-1,0,0))); neighbor_dirs.push_back (rot.rotate (KVector (-1,0,0)) + n); } if (connections & UP) { neighbor_dirs.push_back (rot.rotate (KVector (0,1,0))); neighbor_dirs.push_back (rot.rotate (KVector (0,1,0)) + n); } if (connections & DOWN) { neighbor_dirs.push_back (rot.rotate (KVector (0,-1,0))); neighbor_dirs.push_back (rot.rotate (KVector (0,-1,0)) + n); } for (int i = 0; i < (int)neighbor_dirs.size(); i++) { KikiObjectList neighbors = Controller.world->getObjectsOfTypeAtPos (getClassId(), position + neighbor_dirs[i]); for (KikiObjectIter iter = neighbors.begin(); iter != neighbors.end(); iter++) { if (*iter == this) continue; std::vector neighbor_points = ((KikiWire*)*iter)->getConnectionPoints(); for (std::vector::iterator point = point_list.begin(); point != point_list.end(); point++) { for (std::vector::iterator neighbor_point = neighbor_points.begin(); neighbor_point != neighbor_points.end(); neighbor_point++) { if (((*neighbor_point) - (*point)).length() < 0.1) { neighbor_wires.push_back ((KikiWire*)*iter); } } } } } return neighbor_wires; } // __________________________________________________________________________________________________ std::vector KikiWire::getConnectionPoints () { std::vector point_list; KVector to_border = 0.5 * KikiFace::normalVectorForFace (face); KQuaternion rot = KikiFace::orientationForFace (face); if (connections & RIGHT) { point_list.push_back (position + to_border + rot.rotate(KVector (0.5, 0, 0))); } if (connections & LEFT) { point_list.push_back (position + to_border + rot.rotate(KVector (-0.5, 0, 0))); } if (connections & UP) { point_list.push_back (position + to_border + rot.rotate(KVector (0, 0.5, 0))); } if (connections & DOWN) { point_list.push_back (position + to_border + rot.rotate(KVector (0, -0.5, 0))); } return point_list; } // __________________________________________________________________________________________________ void KikiWire::display () { KikiObject::preDisplay(); KVector face_normal = KikiFace::normalVectorForFace (face); float o = 0.005; ((0.5-o) * face_normal).glTranslate(); glPushMatrix(); KMatrix mat(KikiFace::orientationForFace (face)); mat.glMultMatrix(); colors[KikiWire_base_color].glColor(); render_wire; glDisable (GL_CULL_FACE); float h = 0.05; float s = 0.5+o; glNormal3f(0.0, 0.0, 1.0); if (connections & RIGHT) glRectf ( 0.0, -h, s, h); if (connections & LEFT) glRectf (-s, -h, 0.0, h); if (connections & UP) glRectf (-h, 0.0, h, s); if (connections & DOWN) glRectf (-h, -s, h, 0.0); glEnable (GL_CULL_FACE); glPopMatrix(); if (active) { KColor c (colors[KikiWire_light_color]); c.setAlpha (value); c.glColor(); (face_normal * -0.1).glTranslate(); KikiBillBoard::displayTextureWithSize (Controller.world->getTextureId(KikiWorld::TEXTURE_GRADIENT), 0.15); } KikiObject::postDisplay(); } kiki/src/items/KikiWire.h0000666000000000000000000000171707644706111014322 0ustar rootroot/* * KikiWire.h * kiki */ #ifndef __KikiWire #define __KikiWire #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiWire : public KikiObject { public: // ........................................................................ PUBLIC enum { UP=1, RIGHT, DOWN=4, VERTICAL, LEFT=8, HORIZONTAL=10, ALL=15 }; KikiWire ( int face = KikiFace::PZ, int connections = ALL ); void display (); virtual void setActive ( bool active = true ); virtual void updateActive (); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER bool active; int connections; int face; float value; std::vector getNeighborWires (); std::vector getConnectionPoints (); }; #endif kiki/src/items/KikiWireStone.cpp0000666000000000000000000000716407644706111015670 0ustar rootroot/* * KikiWireStone.cpp * kiki */ #include "KikiWireStone.h" #include "KikiWire.h" #include "KikiController.h" #include "KikiWorld.h" #include "KikiGenerator.h" #include "KikiWall.h" #include #include // __________________________________________________________________________________________________ KDL_CLASS_INTROSPECTION_1 ( KikiWireStone, KikiStone ) KIKI_OBJECT_VALUES ( KikiWireStone, true ) // __________________________________________________________________________________________________ KikiWireStone::KikiWireStone () : KikiStone () { for (int i = 0; i < 6; i++) { wires[i] = NULL; } } // __________________________________________________________________________________________________ void KikiWireStone::initAction ( KikiAction * action ) { switch (action->getId()) { case ACTION_PUSH: case ACTION_FALL: for (int i = 0; i < 6; i++) { if (wires[i]) { Controller.world->unsetObject (wires[i]); wires[i]->setActive (false); } } KikiObjectList generators = Controller.world->getObjectsOfType (KikiGenerator::classId()); for (KikiObjectIter iter = generators.begin(); iter != generators.end(); iter++) { if (((KikiGenerator*)*iter)->isActive()) { ((KikiGenerator*)*iter)->activateWires(); } } } KikiStone::initAction (action); } // __________________________________________________________________________________________________ void KikiWireStone::setPosition ( const KVector & pos ) { for (int i = 0; i < 6; i++) { KVector newPos = pos - KikiFace::normalVectorForFace (i); if (isFreePos (newPos)) { if (wires[i] == NULL) { wires[i] = new KikiWire (i); Controller.world->addObjectAtPos (wires[i], newPos); } else { Controller.world->setObjectAtPos (wires[i], newPos); wires[i]->updateActive(); } } else if (wires[i]) { delete wires[i]; wires[i] = NULL; } } KikiObjectList generators = Controller.world->getObjectsOfType (KikiGenerator::classId()); for (KikiObjectIter iter = generators.begin(); iter != generators.end(); iter++) { if (((KikiGenerator*)*iter)->isActive()) { ((KikiGenerator*)*iter)->activateWires(); } } KikiStone::setPosition (pos); } // __________________________________________________________________________________________________ void KikiWireStone::setCurrentPosition ( const KVector & pos ) { KikiStone::setCurrentPosition (pos); for (int i = 0; i < 6; i++) { if (wires[i]) { wires[i]->setPosition (pos - KikiFace::normalVectorForFace (i)); } } } // __________________________________________________________________________________________________ bool KikiWireStone::isFreePos ( const KVector & pos ) { if (Controller.world->isUnoccupiedPos (pos)) { return true; } if (Controller.world->isValidPos (pos)) { KikiObject * occupant = Controller.world->getOccupantAtPos (pos); return ((occupant->getClassId () >= KikiWall::classId () || occupant->getClassId () >= KikiStone::classId ()) == false); } return false; } kiki/src/items/KikiWireStone.h0000666000000000000000000000146207644706111015330 0ustar rootroot/* * KikiWireStone.h * kiki */ #ifndef __KikiWireStone #define __KikiWireStone #include "KikiStone.h" class KikiWire; // __________________________________________________________________________________________________ class KikiWireStone : public KikiStone { public: // ........................................................................ PUBLIC KikiWireStone (); void setPosition ( const KVector & pos ); void setCurrentPosition ( const KVector & pos ); void initAction ( KikiAction * action ); protected: // ..................................................................... PROTECTED KIKI_OBJECT_HEADER KikiWire * wires[6]; bool isFreePos ( const KVector & pos ); }; #endif kiki/src/items/kolben.h0000666000000000000000000000650110070562134014042 0ustar rootroot#ifndef __obj_kolben #define __obj_kolben #define render_kolben { \ glInterleavedArrays (GL_N3F_V3F, 0, kolbenInterleavedQuads); \ glDrawArrays (GL_QUADS, 0, kolbenNumQuads*4); \ glInterleavedArrays (GL_N3F_V3F, 0, kolbenInterleavedQuadStrips); \ for (int i = 0; i < kolbenNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, kolbenQuadStripIndices[i]/6, \ (kolbenQuadStripIndices[i+1] - kolbenQuadStripIndices[i])/6); \ } \ glInterleavedArrays (GL_N3F_V3F, 0, kolbenInterleavedTriangleFans); \ for (int ii = 0; ii < kolbenNumTriangleFans; ii++) { \ glDrawArrays (GL_TRIANGLE_FAN, kolbenTriangleFanIndices[ii]/6, \ (kolbenTriangleFanIndices[ii+1] - kolbenTriangleFanIndices[ii])/6); \ } \ } static int kolbenNumQuads = 4; static float kolbenInterleavedQuads[96] = { -0.000, -0.000, 1.000,-0.102, 0.246, 0.496, -0.000, -0.000, 1.000,-0.246, 0.102, 0.496, -0.000, -0.000, 1.000,-0.246, -0.102, 0.496, -0.000, -0.000, 1.000,-0.102, -0.246, 0.496, -0.000, -0.000, 1.000, 0.246, 0.102, 0.496, -0.000, -0.000, 1.000, 0.102, 0.246, 0.496, -0.000, -0.000, 1.000, 0.102, -0.246, 0.496, -0.000, -0.000, 1.000, 0.246, -0.102, 0.496, 0.000, 0.000, -1.000,-0.102, -0.246, -0.004, 0.000, 0.000, -1.000,-0.246, -0.102, -0.004, 0.000, 0.000, -1.000, 0.246, -0.102, -0.004, 0.000, 0.000, -1.000, 0.102, -0.246, -0.004, 0.000, 0.000, -1.000, 0.102, 0.246, -0.004, 0.000, 0.000, -1.000, 0.246, 0.102, -0.004, 0.000, 0.000, -1.000,-0.246, 0.102, -0.004, 0.000, 0.000, -1.000,-0.102, 0.246, -0.004, }; static int kolbenNumQuadStrips = 1; static int kolbenQuadStripIndices[2] = { 0, 120 }; static float kolbenInterleavedQuadStrips[120] = { 0.383, 0.924, 0.000, 0.102, 0.246, -0.004, 0.383, 0.924, 0.000, 0.102, 0.246, 0.496, 0.924, 0.383, 0.000, 0.246, 0.102, -0.004, 0.924, 0.383, 0.000, 0.246, 0.102, 0.496, 0.924, -0.383, 0.000, 0.246, -0.102, -0.004, 0.924, -0.383, 0.000, 0.246, -0.102, 0.496, 0.383, -0.924, -0.000, 0.102, -0.246, -0.004, 0.383, -0.924, -0.000, 0.102, -0.246, 0.496, -0.383, -0.924, -0.000, -0.102, -0.246, -0.004, -0.383, -0.924, -0.000, -0.102, -0.246, 0.496, -0.924, -0.383, -0.000, -0.246, -0.102, -0.004, -0.924, -0.383, -0.000, -0.246, -0.102, 0.496, -0.924, 0.383, 0.000, -0.246, 0.102, -0.004, -0.924, 0.383, 0.000, -0.246, 0.102, 0.496, -0.383, 0.924, 0.000, -0.102, 0.246, -0.004, -0.383, 0.924, 0.000, -0.102, 0.246, 0.496, 0.383, 0.924, 0.000, 0.102, 0.246, -0.004, 0.383, 0.924, 0.000, 0.102, 0.246, 0.496, 0.924, 0.383, 0.000, 0.246, 0.102, -0.004, 0.924, 0.383, 0.000, 0.246, 0.102, 0.496, }; static int kolbenNumTriangleFans = 2; static int kolbenTriangleFanIndices[3] = { 0, 24, 48 }; static float kolbenInterleavedTriangleFans[48] = { -0.000, -0.000, 1.000, -0.102, -0.246, 0.496, -0.000, -0.000, 1.000, 0.102, -0.246, 0.496, -0.000, -0.000, 1.000, 0.102, 0.246, 0.496, -0.000, -0.000, 1.000, -0.102, 0.246, 0.496, 0.000, 0.000, -1.000, -0.246, -0.102, -0.004, 0.000, 0.000, -1.000, -0.246, 0.102, -0.004, 0.000, 0.000, -1.000, 0.246, 0.102, -0.004, 0.000, 0.000, -1.000, 0.246, -0.102, -0.004, }; #endif // __obj_kolben kiki/src/items/motor.h0000666000000000000000000000625007644706111013741 0ustar rootroot#ifndef __obj_motor #define __obj_motor #define render_motor { \ glInterleavedArrays (GL_N3F_V3F, 0, motorInterleavedTriangles); \ glDrawArrays (GL_TRIANGLES, 0, motorNumTriangles*3); \ glInterleavedArrays (GL_N3F_V3F, 0, motorInterleavedQuads); \ glDrawArrays (GL_QUADS, 0, motorNumQuads*4); \ } static int motorNumTriangles = 4; static float motorInterleavedTriangles[72] = { 0.527, -0.527, 0.667, 0.167, -0.500, 0.290, 0.527, -0.527, 0.667, 0.500, -0.500, 0.027, 0.527, -0.527, 0.667, 0.500, -0.167, 0.290, -0.527, -0.527, 0.667,-0.500, -0.500, 0.027, -0.527, -0.527, 0.667,-0.167, -0.500, 0.290, -0.527, -0.527, 0.667,-0.500, -0.167, 0.290, -0.527, 0.527, 0.667,-0.167, 0.500, 0.290, -0.527, 0.527, 0.667,-0.500, 0.500, 0.027, -0.527, 0.527, 0.667,-0.500, 0.167, 0.290, 0.527, 0.527, 0.667, 0.500, 0.167, 0.290, 0.527, 0.527, 0.667, 0.500, 0.500, 0.027, 0.527, 0.527, 0.667, 0.167, 0.500, 0.290, }; static int motorNumQuads = 11; static float motorInterleavedQuads[264] = { 0.000, -1.000, 0.000,-0.500, -0.500, -0.500, 0.000, -1.000, 0.000, 0.500, -0.500, -0.500, 0.000, -1.000, 0.000, 0.500, -0.500, 0.027, 0.000, -1.000, 0.000,-0.500, -0.500, 0.027, -1.000, 0.000, 0.000,-0.500, 0.500, -0.500, -1.000, 0.000, 0.000,-0.500, -0.500, -0.500, -1.000, 0.000, 0.000,-0.500, -0.500, 0.027, -1.000, 0.000, 0.000,-0.500, 0.500, 0.027, 0.000, 1.000, 0.000, 0.500, 0.500, -0.500, 0.000, 1.000, 0.000,-0.500, 0.500, -0.500, 0.000, 1.000, 0.000,-0.500, 0.500, 0.027, 0.000, 1.000, 0.000, 0.500, 0.500, 0.027, 1.000, 0.000, 0.000, 0.500, -0.500, -0.500, 1.000, 0.000, 0.000, 0.500, 0.500, -0.500, 1.000, 0.000, 0.000, 0.500, 0.500, 0.027, 1.000, 0.000, 0.000, 0.500, -0.500, 0.027, -1.000, 0.000, 0.000,-0.500, -0.167, 0.290, -1.000, 0.000, 0.000,-0.500, 0.167, 0.290, -1.000, 0.000, 0.000,-0.500, 0.500, 0.027, -1.000, 0.000, 0.000,-0.500, -0.500, 0.027, 0.000, 0.000, 1.000,-0.500, -0.167, 0.290, 0.000, 0.000, 1.000, 0.500, -0.167, 0.290, 0.000, 0.000, 1.000, 0.500, 0.167, 0.290, 0.000, 0.000, 1.000,-0.500, 0.167, 0.290, 0.000, 0.000, 1.000,-0.167, -0.500, 0.290, 0.000, 0.000, 1.000, 0.167, -0.500, 0.290, 0.000, 0.000, 1.000, 0.500, -0.167, 0.290, 0.000, 0.000, 1.000,-0.500, -0.167, 0.290, 0.000, -1.000, 0.000, 0.167, -0.500, 0.290, 0.000, -1.000, 0.000,-0.167, -0.500, 0.290, 0.000, -1.000, 0.000,-0.500, -0.500, 0.027, 0.000, -1.000, 0.000, 0.500, -0.500, 0.027, 0.000, 1.000, 0.000,-0.167, 0.500, 0.290, 0.000, 1.000, 0.000, 0.167, 0.500, 0.290, 0.000, 1.000, 0.000, 0.500, 0.500, 0.027, 0.000, 1.000, 0.000,-0.500, 0.500, 0.027, 0.000, 0.000, 1.000, 0.167, 0.500, 0.290, 0.000, 0.000, 1.000,-0.167, 0.500, 0.290, 0.000, 0.000, 1.000,-0.500, 0.167, 0.290, 0.000, 0.000, 1.000, 0.500, 0.167, 0.290, 1.000, 0.000, 0.000, 0.500, -0.167, 0.290, 1.000, 0.000, 0.000, 0.500, -0.500, 0.027, 1.000, 0.000, 0.000, 0.500, 0.500, 0.027, 1.000, 0.000, 0.000, 0.500, 0.167, 0.290, }; #endif // __obj_motor kiki/src/items/valve.h0000666000000000000000000001632110070562134013706 0ustar rootroot#ifndef __obj_valve #define __obj_valve #define render_valve { \ glInterleavedArrays (GL_N3F_V3F, 0, valveInterleavedQuads); \ glDrawArrays (GL_QUADS, 0, valveNumQuads*4); \ glInterleavedArrays (GL_N3F_V3F, 0, valveInterleavedQuadStrips); \ for (int i = 0; i < valveNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, valveQuadStripIndices[i]/6, \ (valveQuadStripIndices[i+1] - valveQuadStripIndices[i])/6); \ } \ glInterleavedArrays (GL_N3F_V3F, 0, valveInterleavedTriangleFans); \ for (int ii = 0; ii < valveNumTriangleFans; ii++) { \ glDrawArrays (GL_TRIANGLE_FAN, valveTriangleFanIndices[ii]/6, \ (valveTriangleFanIndices[ii+1] - valveTriangleFanIndices[ii])/6); \ } \ } static int valveNumQuads = 4; static float valveInterleavedQuads[96] = { 0.000, -0.000, 1.000, 0.100, -0.000, 0.500, 0.000, -0.000, 1.000, 0.071, 0.071, 0.500, 0.000, -0.000, 1.000,-0.000, 0.100, 0.500, 0.000, -0.000, 1.000, 0.071, -0.071, 0.500, -0.000, -0.000, 1.000,-0.100, -0.000, 0.500, -0.000, -0.000, 1.000,-0.071, -0.071, 0.500, -0.000, -0.000, 1.000, 0.000, -0.100, 0.500, -0.000, -0.000, 1.000,-0.071, 0.071, 0.500, 0.000, 0.000, -1.000, 0.100, 0.000, -0.500, 0.000, 0.000, -1.000, 0.071, -0.071, -0.500, 0.000, 0.000, -1.000, 0.000, -0.100, -0.500, 0.000, 0.000, -1.000, 0.071, 0.071, -0.500, -0.000, 0.000, -1.000,-0.100, 0.000, -0.500, -0.000, 0.000, -1.000,-0.071, 0.071, -0.500, -0.000, 0.000, -1.000,-0.000, 0.100, -0.500, -0.000, 0.000, -1.000,-0.071, -0.071, -0.500, }; static int valveNumQuadStrips = 5; static int valveQuadStripIndices[6] = { 0, 120, 240, 360, 480, 600 }; static float valveInterleavedQuadStrips[600] = { 0.673, 0.673, 0.308, 0.071, 0.071, -0.346, 0.673, 0.673, 0.308, 0.042, 0.042, -0.220, 0.951, -0.000, 0.308, 0.100, 0.000, -0.346, 0.951, -0.000, 0.308, 0.059, 0.000, -0.220, 0.673, -0.673, 0.308, 0.071, -0.071, -0.346, 0.673, -0.673, 0.308, 0.042, -0.042, -0.220, -0.000, -0.951, 0.308, 0.000, -0.100, -0.346, -0.000, -0.951, 0.308, 0.000, -0.059, -0.220, -0.673, -0.673, 0.308, -0.071, -0.071, -0.346, -0.673, -0.673, 0.308, -0.042, -0.042, -0.220, -0.951, -0.000, 0.308, -0.100, 0.000, -0.346, -0.951, -0.000, 0.308, -0.059, 0.000, -0.220, -0.673, 0.673, 0.308, -0.071, 0.071, -0.346, -0.673, 0.673, 0.308, -0.042, 0.042, -0.220, -0.000, 0.951, 0.308, -0.000, 0.100, -0.346, -0.000, 0.951, 0.308, -0.000, 0.059, -0.220, 0.673, 0.673, 0.308, 0.071, 0.071, -0.346, 0.673, 0.673, 0.308, 0.042, 0.042, -0.220, 0.951, -0.000, 0.308, 0.100, 0.000, -0.346, 0.951, -0.000, 0.308, 0.059, 0.000, -0.220, 0.707, 0.707, 0.000, 0.042, 0.042, -0.220, 0.707, 0.707, 0.000, 0.042, 0.042, 0.220, 1.000, 0.000, 0.000, 0.059, 0.000, -0.220, 1.000, 0.000, 0.000, 0.059, -0.000, 0.220, 0.707, -0.707, -0.000, 0.042, -0.042, -0.220, 0.707, -0.707, -0.000, 0.042, -0.042, 0.220, 0.000, -1.000, -0.000, 0.000, -0.059, -0.220, 0.000, -1.000, -0.000, 0.000, -0.059, 0.220, -0.707, -0.707, -0.000, -0.042, -0.042, -0.220, -0.707, -0.707, -0.000, -0.042, -0.042, 0.220, -1.000, -0.000, 0.000, -0.059, 0.000, -0.220, -1.000, -0.000, 0.000, -0.059, -0.000, 0.220, -0.707, 0.707, 0.000, -0.042, 0.042, -0.220, -0.707, 0.707, 0.000, -0.042, 0.042, 0.220, -0.000, 1.000, 0.000, -0.000, 0.059, -0.220, -0.000, 1.000, 0.000, -0.000, 0.059, 0.220, 0.707, 0.707, 0.000, 0.042, 0.042, -0.220, 0.707, 0.707, 0.000, 0.042, 0.042, 0.220, 1.000, 0.000, 0.000, 0.059, 0.000, -0.220, 1.000, 0.000, 0.000, 0.059, -0.000, 0.220, 0.707, 0.707, 0.000, 0.071, 0.071, -0.500, 0.707, 0.707, 0.000, 0.071, 0.071, -0.346, 1.000, -0.000, 0.000, 0.100, 0.000, -0.500, 1.000, -0.000, 0.000, 0.100, 0.000, -0.346, 0.707, -0.707, -0.000, 0.071, -0.071, -0.500, 0.707, -0.707, -0.000, 0.071, -0.071, -0.346, 0.000, -1.000, -0.000, 0.000, -0.100, -0.500, 0.000, -1.000, -0.000, 0.000, -0.100, -0.346, -0.707, -0.707, -0.000, -0.071, -0.071, -0.500, -0.707, -0.707, -0.000, -0.071, -0.071, -0.346, -1.000, -0.000, -0.000, -0.100, 0.000, -0.500, -1.000, -0.000, -0.000, -0.100, 0.000, -0.346, -0.707, 0.707, 0.000, -0.071, 0.071, -0.500, -0.707, 0.707, 0.000, -0.071, 0.071, -0.346, -0.000, 1.000, 0.000, -0.000, 0.100, -0.500, -0.000, 1.000, 0.000, -0.000, 0.100, -0.346, 0.707, 0.707, 0.000, 0.071, 0.071, -0.500, 0.707, 0.707, 0.000, 0.071, 0.071, -0.346, 1.000, -0.000, 0.000, 0.100, 0.000, -0.500, 1.000, -0.000, 0.000, 0.100, 0.000, -0.346, -0.000, 1.000, 0.000, -0.000, 0.100, 0.354, -0.000, 1.000, 0.000, -0.000, 0.100, 0.500, 0.707, 0.707, 0.000, 0.071, 0.071, 0.354, 0.707, 0.707, 0.000, 0.071, 0.071, 0.500, 1.000, 0.000, -0.000, 0.100, -0.000, 0.354, 1.000, 0.000, -0.000, 0.100, -0.000, 0.500, 0.707, -0.707, -0.000, 0.071, -0.071, 0.354, 0.707, -0.707, -0.000, 0.071, -0.071, 0.500, 0.000, -1.000, -0.000, 0.000, -0.100, 0.354, 0.000, -1.000, -0.000, 0.000, -0.100, 0.500, -0.707, -0.707, -0.000, -0.071, -0.071, 0.354, -0.707, -0.707, -0.000, -0.071, -0.071, 0.500, -1.000, -0.000, 0.000, -0.100, -0.000, 0.354, -1.000, -0.000, 0.000, -0.100, -0.000, 0.500, -0.707, 0.707, 0.000, -0.071, 0.071, 0.354, -0.707, 0.707, 0.000, -0.071, 0.071, 0.500, -0.000, 1.000, 0.000, -0.000, 0.100, 0.354, -0.000, 1.000, 0.000, -0.000, 0.100, 0.500, 0.707, 0.707, 0.000, 0.071, 0.071, 0.354, 0.707, 0.707, 0.000, 0.071, 0.071, 0.500, 0.676, 0.676, -0.291, 0.042, 0.042, 0.220, 0.676, 0.676, -0.291, 0.071, 0.071, 0.354, 0.957, 0.000, -0.291, 0.059, -0.000, 0.220, 0.957, 0.000, -0.291, 0.100, -0.000, 0.354, 0.676, -0.676, -0.291, 0.042, -0.042, 0.220, 0.676, -0.676, -0.291, 0.071, -0.071, 0.354, 0.000, -0.957, -0.291, 0.000, -0.059, 0.220, 0.000, -0.957, -0.291, 0.000, -0.100, 0.354, -0.676, -0.676, -0.291, -0.042, -0.042, 0.220, -0.676, -0.676, -0.291, -0.071, -0.071, 0.354, -0.957, 0.000, -0.291, -0.059, -0.000, 0.220, -0.957, 0.000, -0.291, -0.100, -0.000, 0.354, -0.676, 0.676, -0.291, -0.042, 0.042, 0.220, -0.676, 0.676, -0.291, -0.071, 0.071, 0.354, 0.000, 0.957, -0.291, -0.000, 0.059, 0.220, 0.000, 0.957, -0.291, -0.000, 0.100, 0.354, 0.676, 0.676, -0.291, 0.042, 0.042, 0.220, 0.676, 0.676, -0.291, 0.071, 0.071, 0.354, 0.957, 0.000, -0.291, 0.059, -0.000, 0.220, 0.957, 0.000, -0.291, 0.100, -0.000, 0.354, }; static int valveNumTriangleFans = 2; static int valveTriangleFanIndices[3] = { 0, 24, 48 }; static float valveInterleavedTriangleFans[48] = { -0.000, -0.000, 1.000, 0.000, -0.100, 0.500, 0.000, -0.000, 1.000, 0.071, -0.071, 0.500, 0.000, -0.000, 1.000, -0.000, 0.100, 0.500, -0.000, -0.000, 1.000, -0.071, 0.071, 0.500, -0.000, 0.000, -1.000, -0.000, 0.100, -0.500, 0.000, 0.000, -1.000, 0.071, 0.071, -0.500, 0.000, 0.000, -1.000, 0.000, -0.100, -0.500, -0.000, 0.000, -1.000, -0.071, -0.071, -0.500, }; #endif // __obj_valve kiki/src/items/wire.h0000666000000000000000000000675310070562134013547 0ustar rootroot#ifndef __obj_wire #define __obj_wire #ifdef WIN32 #pragma warning ( disable : 4800 4305 4267 ) // Disable warnings #endif #define render_wire { \ glInterleavedArrays (GL_N3F_V3F, 0, wireInterleavedQuadStrips); \ for (int i = 0; i < wireNumQuadStrips; i++) { \ glDrawArrays (GL_QUAD_STRIP, wireQuadStripIndices[i]/6, \ (wireQuadStripIndices[i+1] - wireQuadStripIndices[i])/6); \ } \ glInterleavedArrays (GL_N3F_V3F, 0, wireInterleavedTriangleFans); \ for (int ii = 0; ii < wireNumTriangleFans; ii++) { \ glDrawArrays (GL_TRIANGLE_FAN, wireTriangleFanIndices[ii]/6, \ (wireTriangleFanIndices[ii+1] - wireTriangleFanIndices[ii])/6); \ } \ } static int wireNumQuadStrips = 2; static int wireQuadStripIndices[3] = { 0, 120, 240 }; static float wireInterleavedQuadStrips[240] = { -0.000, 0.723, 0.690, -0.000, 0.185, 0.002, -0.000, 0.581, 0.814, -0.000, 0.142, 0.047, 0.511, 0.511, 0.690, 0.131, 0.131, 0.002, 0.411, 0.411, 0.814, 0.100, 0.100, 0.047, 0.723, -0.000, 0.690, 0.185, 0.000, 0.002, 0.581, -0.000, 0.814, 0.141, 0.000, 0.047, 0.511, -0.511, 0.690, 0.131, -0.130, 0.002, 0.411, -0.411, 0.814, 0.100, -0.100, 0.047, -0.000, -0.723, 0.690, 0.000, -0.184, 0.002, -0.000, -0.581, 0.814, 0.000, -0.141, 0.047, -0.511, -0.511, 0.690, -0.131, -0.130, 0.002, -0.411, -0.411, 0.814, -0.100, -0.100, 0.047, -0.723, -0.000, 0.690, -0.185, 0.000, 0.002, -0.581, -0.000, 0.814, -0.141, 0.000, 0.047, -0.511, 0.511, 0.690, -0.131, 0.131, 0.002, -0.411, 0.411, 0.814, -0.100, 0.100, 0.047, -0.000, 0.723, 0.690, -0.000, 0.185, 0.002, -0.000, 0.581, 0.814, -0.000, 0.142, 0.047, 0.511, 0.511, 0.690, 0.131, 0.131, 0.002, 0.411, 0.411, 0.814, 0.100, 0.100, 0.047, -0.000, 0.581, 0.814, -0.000, 0.142, 0.047, -0.000, 0.424, 0.906, -0.000, 0.077, 0.078, 0.411, 0.411, 0.814, 0.100, 0.100, 0.047, 0.300, 0.300, 0.906, 0.054, 0.054, 0.078, 0.581, -0.000, 0.814, 0.141, 0.000, 0.047, 0.424, -0.000, 0.906, 0.077, 0.000, 0.078, 0.411, -0.411, 0.814, 0.100, -0.100, 0.047, 0.300, -0.300, 0.906, 0.054, -0.054, 0.078, -0.000, -0.581, 0.814, 0.000, -0.141, 0.047, 0.000, -0.424, 0.906, 0.000, -0.076, 0.078, -0.411, -0.411, 0.814, -0.100, -0.100, 0.047, -0.300, -0.300, 0.906, -0.054, -0.054, 0.078, -0.581, -0.000, 0.814, -0.141, 0.000, 0.047, -0.424, -0.000, 0.906, -0.077, 0.000, 0.078, -0.411, 0.411, 0.814, -0.100, 0.100, 0.047, -0.300, 0.300, 0.906, -0.054, 0.054, 0.078, -0.000, 0.581, 0.814, -0.000, 0.142, 0.047, -0.000, 0.424, 0.906, -0.000, 0.077, 0.078, 0.411, 0.411, 0.814, 0.100, 0.100, 0.047, 0.300, 0.300, 0.906, 0.054, 0.054, 0.078, }; static int wireNumTriangleFans = 1; static int wireTriangleFanIndices[2] = { 0, 60 }; static float wireInterleavedTriangleFans[60] = { 0.272, -0.656, 0.704, 0.000, 0.000, 0.006, 0.272, -0.656, 0.704, -0.000, 0.077, 0.078, 0.272, -0.656, 0.704, -0.054, 0.054, 0.078, 0.656, -0.272, 0.704, -0.077, 0.000, 0.078, 0.656, 0.272, 0.704, -0.054, -0.054, 0.078, 0.272, 0.656, 0.704, 0.000, -0.076, 0.078, -0.272, 0.656, 0.704, 0.054, -0.054, 0.078, -0.656, 0.272, 0.704, 0.077, 0.000, 0.078, -0.656, -0.272, 0.704, 0.054, 0.054, 0.078, -0.272, -0.656, 0.704, -0.000, 0.077, 0.078, }; #endif // __obj_wire kiki/src/main/0000777000000000000000000000000010336075444012230 5ustar rootrootkiki/src/main/Kiki.h0000666000000000000000000000030207644706111013263 0ustar rootroot/* * Kiki.h * kiki */ #ifndef __Kiki #define __Kiki #include "KikiMain.h" #include "KikiBase.h" #include "KikiItems.h" #include "KikiBots.h" #include "KikiGUI.h" #endif kiki/src/main/KikiController.cpp0000666000000000000000000003536010334735413015673 0ustar rootroot/* * KikiController.cpp */ #include "KikiController.h" #include "KikiSound.h" #include "KikiGUI.h" #include "KikiWorld.h" #include "KikiPython.h" #include "KikiLocalization.h" #include "KikiSpikes.h" #include "KikiStone.h" #include "KikiSwitch.h" #include "KikiAtom.h" #include "KikiMutant.h" #include "KikiPlayer.h" #include "KikiAction.h" #include "KikiStatusDisplay.h" #include "KikiScreenText.h" #include "KikiLight.h" #include "KPerspectiveProjection.h" #include "KButton.h" #include "KStringTools.h" #include "KFileTools.h" #include "KKey.h" #include "KConsole.h" #ifndef WIN32 #include #include #endif static int ESCAPE_KEY_EVENT; const unsigned char kikiVersionString[] = "1.0"; extern const double kikiVersionNumber; // __________________________________________________________________________________________________ KikiController::KikiController () : KEventHandler (), KKeyHandler (), KikiActionObject () { addEventWithName ("timer"); timer_event = events.back(); // deserves it's own pointer, since it's used that often :-) ESCAPE_KEY_EVENT = addEventWithName ("escape"); #ifdef DEBUG debug_version = true; #else debug_version = false; #endif #if defined(__APPLE__) && defined(__MACH__) kiki_home = "./"; quit_key = "META_q"; gamma = 1; #else char * kiki_home_env = getenv("KIKI_HOME"); if (kiki_home_env) { kiki_home = kiki_home_env; } else { KConsole::printf("WARNING :: environment variable KIKI_HOME not set ..."); KConsole::printf(" ... assuming resources in current directory"); kiki_home = kFileGetCurrentPath(); } #ifndef WIN32 kiki_home += "/"; #else kiki_home += "\\"; #endif KConsole::printf("--- KikiController::KikiController :: kiki_home %s", kiki_home.c_str()); quit_key = "CTRL_q"; gamma = 8; #endif } // __________________________________________________________________________________________________ KikiController::~KikiController () { delete world; delete gui; delete sound; python->finalize(); delete python; } // __________________________________________________________________________________________________ void KikiController::playerDeleted () { player_status->setStatus(NULL); removeKeyHandler(player); player = NULL; } // __________________________________________________________________________________________________ KikiPlayer * KikiController::getPlayer () { if (player == NULL) { player = new KikiPlayer(); addKeyHandler (player); player->KikiObject::addReceiverCallback (this, (KCallbackPtr)&KikiController::playerDeleted, KIKI_NOTIFICATION_OBJECT_DELETED); } return player; } // __________________________________________________________________________________________________ std::string KikiController::getLocalizedString ( const std::string & key ) { #if defined(__APPLE__) && defined(__MACH__) return std::string (kikiLocalizedString (key.c_str())); #else return key; // localization only on Mac OS X yet #endif } // __________________________________________________________________________________________________ void KikiController::displayText ( const std::string & text, int colorIndex ) { KikiScreenText * screen_text = new KikiScreenText (); screen_text->setText (text, colorIndex); screen_text->show(); } // __________________________________________________________________________________________________ void KikiController::display () { timer_event->triggerActions(); world->updateStatus(); timer_event->finishActions(); KEventHandler::display(); } // __________________________________________________________________________________________________ bool KikiController::isDebugVersion () { return debug_version; } // __________________________________________________________________________________________________ void KikiController::init () { cheat = false; speed = 5; KEventHandler::notification_center.addReceiverCallback(this, (KCallbackPtr)&KikiController::initOpenGL, KDL_NOTIFICATION_TYPE_VIDEO_MODE_CHANGED); KEventHandler::notification_center.addReceiverCallback(this, (KCallbackPtr)&KikiController::initOpenGL, KDL_NOTIFICATION_TYPE_WINDOW_SIZE_CHANGED); #ifndef WIN32 srandom(1); // repeatable random sequence #endif initOpenGL(); SDL_EnableUNICODE(true); //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL/6); SDL_EnableKeyRepeat(0,0); // ........................................................ sound sound = new KikiSound (); // ........................................................ world world = new KikiWorld(); addPickHandler (world); // ........................................................ console KConsole::create(); KConsole::getConsole()->setPosition (KPosition(80, -20)); KConsole::getConsole()->setSize (KSize(300, 200)); KConsole::getConsole()->setDepth (INT_MAX - 10); addPickHandler((KPickHandler*)KConsole::getConsole()); //KConsole::printf ("%s", kikiVersionString); // ........................................................ python python = NULL; // to prevent PythonWidget sending size messages KikiPython * kiki_python = new KikiPython(); python = kiki_python; // ........................................................ gui //gui = new KikiGUI (); //addPickHandler(gui); //gui->init(); //gui->hide(); world->init(); projection_handler = world; KikiText::init(); // ........................................................ status display player_status = new KikiStatusDisplay (); addPickHandler(player_status); // ........................................................ create player getPlayer(); addKeyHandler(this); addKeyHandler(&KEventHandler::menu_key_handler); // don't know why I have to add this again !? // ........................................................ hide cursor if (isDebugVersion() == false) SDL_ShowCursor (SDL_DISABLE); // ........................................................ python init python->initPython(); } // __________________________________________________________________________________________________ void KikiController::initOpenGL () { // openGL init glShadeModel(GL_SMOOTH); glCullFace (GL_BACK); glEnable (GL_CULL_FACE); glEnable (GL_DEPTH_TEST); glEnable (GL_NORMALIZE); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_COLOR_MATERIAL); glEnable (GL_BLEND); glDepthRange(0.0, 0.5); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_NORMAL_ARRAY); glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glViewport(0, 0, SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); float white[4] = {1.0, 1.0, 1.0, 1.0}; float gray[4] = {0.5, 0.5, 0.5, 0.5}; float none[4] = {0.0, 0.0, 0.0, 0.0}; glLightfv (GL_LIGHT0, GL_AMBIENT, none); glLightfv (GL_LIGHT0, GL_DIFFUSE, white); glLightfv (GL_LIGHT0, GL_SPECULAR, white); glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 180.0); glLightf (GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0); glLightf (GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0); glLightf (GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.0); glLightModelfv (GL_LIGHT_MODEL_AMBIENT, none); glLightModeli (GL_LIGHT_MODEL_LOCAL_VIEWER, 0); glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT, none); glMaterialfv (GL_FRONT_AND_BACK, GL_EMISSION, none); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, gray); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 60.0); GLint maxLights; glGetIntegerv (GL_MAX_LIGHTS, &maxLights); for (GLenum l = GL_LIGHT1; l < (GL_LIGHT0+(GLuint)maxLights); l++) { glDisable(l); } glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); setGamma (gamma); } // -------------------------------------------------------------------------------------------------------- void KikiController::saveScreenShot () { static int counter = -1; KSize screenSize = getScreenSize(); Uint32 rmask, gmask, bmask, amask; rmask = 0xff000000; gmask = 0x00ff0000; bmask = 0x0000ff00; amask = 0x00000000; setDisplayFps(false); display(); void * pixels = malloc (screenSize.w * screenSize.h * sizeof(GLuint)); #ifndef WIN32 glReadPixels (0, 0, screenSize.w, screenSize.h, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, pixels); #else glReadPixels (0, 0, screenSize.w, screenSize.h, GL_RGBA, GL_4_BYTES, pixels); #endif //............................................................ reverse order of lines (mirror vertical) int scanlineLength = screenSize.w * sizeof(GLuint); void * scanline = malloc (scanlineLength); for (int lineIndex = 0; lineIndex < screenSize.h/2; lineIndex++) { memcpy (scanline, // copy from bottom to save line &((char*)pixels)[lineIndex * scanlineLength], scanlineLength); memcpy (&((char*)pixels)[lineIndex * scanlineLength], // copy from top to bottom &((char*)pixels)[(screenSize.h-lineIndex-1) * scanlineLength], scanlineLength); // copy from save line to top memcpy (&((char*)pixels)[(screenSize.h-lineIndex-1) * scanlineLength], scanline, scanlineLength); } //............................................................ create SDL_surface from pixels SDL_Surface * saveSurface = SDL_CreateRGBSurfaceFrom (pixels, screenSize.w, screenSize.h, 32, screenSize.w * 4, rmask, gmask, bmask, amask); free (scanline); if (saveSurface == NULL) { KConsole::printf("WARNING unable to copy screen surface for screenshot"); free (pixels); return; } std::string screenShotFile; //............................................................ search for a free file name do { counter++; #ifndef WIN32 screenShotFile = kStringPrintf("%s/kiki_%03d.bmp", getenv ("HOME"), counter); #else screenShotFile = kStringPrintf("c:/kiki_%03d.bmp", counter); #endif } while (kFileExists(screenShotFile)); //............................................................ save the screenshot if (SDL_SaveBMP(saveSurface, screenShotFile.c_str()) == 0) { KConsole::printf("screenshot saved to file %s", kFileAbsPathName(screenShotFile).c_str()); } else // ooops... { KConsole::printf("WARNING unable to write screenshot to file %s", screenShotFile.c_str()); } SDL_FreeSurface(saveSurface); free (pixels); } // __________________________________________________________________________________________________ bool KikiController::handleKey ( const KKey & key ) { //KConsole::printf("KikiController::handleKey %s", key.name.c_str()); if (key.getUnmodifiedName() == "ESCAPE") { events[ESCAPE_KEY_EVENT]->triggerActions(); return true; } if (key.name == quit_key) { SDL_Event event; event.type = SDL_QUIT; SDL_PushEvent (&event); return true; } if (key.name == "F9") { debug_version = !debug_version; KConsole::printf("toggle debug mode"); if (debug_version) SDL_ShowCursor (SDL_ENABLE); else SDL_ShowCursor (SDL_DISABLE); return true; } if (isDebugVersion()) { if (key.name == "e") { world->setEditMode (!world->getEditMode()); return true; } if (key.name == "f") { world->focusOnPickedPickable(); return true; } if (key.name == "b") { world->setDisplayBorder (!world->flags[KikiWorld::DISPLAY_BORDER]); return true; } if (key.name == "r") { world->setDisplayRaster (!world->flags[KikiWorld::DISPLAY_RASTER]); return true; } if (key.name == "d") { world->flags[KikiWorld::DISPLAY_DOTS] = !world->flags[KikiWorld::DISPLAY_DOTS]; world->debug_cells = !world->debug_cells; return true; } if (key.name == "c") { KConsole::getConsole()->show(); } } if (key.character >= '1' && key.character <= '9') { speed = key.character - '0'; return true; } //if (key.name == "c") { KConsole::getConsole()->clear(); return true; } return false; } // -------------------------------------------------------------------------------------------------------- void KikiController::mouseModeCallback ( const std::string & buttonText ) { if (buttonText == "r") mouse_mode = KDL_MOUSE_MODE_ROTATE; else if (buttonText == "t") mouse_mode = KDL_MOUSE_MODE_TRANSLATE; else if (buttonText == "z") mouse_mode = KDL_MOUSE_MODE_SCALE; } // -------------------------------------------------------------------------------------------------------- void KikiController::handleMouseButtonEvent ( SDL_MouseButtonEvent & event) { KEventHandler::handleMouseButtonEvent(event); if (event.state == SDL_RELEASED) { setMouseMode(KDL_MOUSE_MODE_ROTATE); } } // -------------------------------------------------------------------------------------------------------- void KikiController::setGamma ( int g ) { float gf = 1.0+g/10.0; gamma = g; SDL_SetGamma (gf, gf, gf); } // -------------------------------------------------------------------------------------------------------- bool KikiController::changeScreenSize ( int width, int height, bool fullscreen) { bool result; int oldGamma = gamma; setGamma(0); // hack to restore gamma after failed resolution test result = KEventHandler::setScreenSize (width, height, fullscreen); setGamma(oldGamma); return result; } // __________________________________________________________________________________________________ // Global Controller Object KikiController Controller; kiki/src/main/KikiController.h0000666000000000000000000000640410334732302015327 0ustar rootroot/* * KikiController.h */ #ifndef __KikiController #define __KikiController #include #include #include #include #include #include "KikiPos.h" #include "KikiEvent.h" #include "KikiActionObject.h" #include #include #include class KikiGUI; class KikiScreenText; class KikiSound; class KikiWorld; class KikiPlayer; class KikiStatusDisplay; class KikiEvent; class KikiPython; // __________________________________________________________________________________________________ class KikiController : public KEventHandler, public KKeyHandler, public KikiActionObject { protected: // ..................................................................... PROTECTED bool debug_version; bool cheat; int speed; int gamma; std::string kiki_home; public: // ........................................................................ PUBLIC // ........................................................................ 'global' objects KikiGUI * gui; KikiSound * sound; KikiPython * python; KikiWorld * world; KikiPlayer * player; KikiStatusDisplay * player_status; KikiEvent * timer_event; std::string quit_key; // ........................................................................ (con/de)struction KikiController (); ~KikiController (); // ........................................................................ initialization void init (); void initOpenGL (); bool isDebugVersion (); std::string getKikiHome () { return kiki_home; } // ........................................................................ display void display (); void saveScreenShot (); void displayText ( const std::string & text, int colorIndex = 0 ); std::string getLocalizedString ( const std::string & key ); void setGamma ( int ); int getGamma () const { return gamma; } bool changeScreenSize( int width, int height, bool fullscreen = false ); // ........................................................................ event handling bool handleKey ( const KKey & key ); void handleMouseButtonEvent ( SDL_MouseButtonEvent & event ); void mouseModeCallback ( const std::string & button ); // ........................................................................ player KikiPlayer * getPlayer (); void playerDeleted (); // ........................................................................ timing void setSpeed ( int s ) { speed = s; } int getSpeed () const { return speed; } int mapMsTime ( int unmapped ) { return (int)(10.0 * unmapped/speed); } int unmapMsTime ( int mapped ) { return (int)(mapped * speed/10.0); } float getRelativeTime () { return (frame_time % (10000/speed))/(10000.0/speed); } float getRelativeDelta () { return (frame_time - last_time)/(10000.0/speed); } }; extern KikiController Controller; #endif kiki/src/main/KikiLocalization.h0000666000000000000000000000026507644706112015645 0ustar rootroot// // KikiLocalization.h // kiki // #ifndef __KikiLocalization #define __KikiLocalization extern "C" const char * kikiLocalizedString ( const char * key ); #endif kiki/src/main/KikiLocalization.m0000666000000000000000000000033507644706112015650 0ustar rootroot// // KikiLocalization.m // kiki // #import const char * kikiLocalizedString ( const char * key ) { return [NSLocalizedString ([NSString stringWithCString:key], @"") cString]; }kiki/src/main/KikiMain.h0000666000000000000000000000055107644706112014077 0ustar rootroot/* * KikiMain.h * kiki */ #ifndef __KikiMain #define __KikiMain #include "KikiController.h" #include "KikiWorld.h" #include "KikiSound.h" #include "KikiPython.h" #include "KikiPythonWidget.h" #include "KikiPos.h" #include #include #include #include #include #endif kiki/src/main/KikiPython.cpp0000666000000000000000000002277110070562134015026 0ustar rootroot/* * KikiPython.cpp * kiki */ #include "KikiPython.h" #include "KikiWorld.h" #include "KikiBot.h" #include "KikiPy_wrap.h" #include "KikiPythonWidget.h" #include #include #include #include #include // __________________________________________________________________________________________________ KikiPython::KikiPython () : KWindow () { depth = INT_MAX-9; // one above console // ................................................................. editor and scrollbar array KWidgetArray * editorArray = new KWidgetArray(); editorArray->setFrameSpacing (0); editorArray->setChildSpacing (2); // ................................................................. python editor widget python_widget = new KikiPythonWidget(); addPickable(python_widget); python_widget->setTextSize(KSize(20,20)); //python_widget->setMinSize(python_widget->getSize()); python_widget->KWidget::flags[KDL_WIDGET_FLAG_FILL_X] = true; python_widget->KWidget::flags[KDL_WIDGET_FLAG_FILL_Y] = true; // ................................................................. scrollbar scroll_bar = new KScrollBar(this); scroll_bar->addReceiverCallback(python_widget, (KSetFloatPtr)&KikiPythonWidget::scrollRelative); scroll_bar->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollLineDown, KDL_NOTIFICATION_TYPE_SCROLL_LINE_DOWN); scroll_bar->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollLineUp, KDL_NOTIFICATION_TYPE_SCROLL_LINE_UP); scroll_bar->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollPageDown, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_DOWN); scroll_bar->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollPageUp, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_UP); scroll_bar->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollPageUp, KDL_NOTIFICATION_TYPE_SCROLL_PAGE_UP); // insert into widget array editorArray->addChild(python_widget); editorArray->addChild(scroll_bar); // ................................................................. buttons KButton * button; button = new KIconButton(KDL_ICONBUTTON_CLEAR); button->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::clear); button_widget->addChild(button); addPickable(button); button = new KIconButton(KDL_ICONBUTTON_TOP); button->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollToTop); button_widget->addChild(button); addPickable(button); button = new KIconButton(KDL_ICONBUTTON_BOTTOM); button->addReceiverCallback(python_widget, (KCallbackPtr)&KikiPythonWidget::scrollToBottom); button_widget->addChild(button); addPickable(button); // ................................................................. titel titel_label = new KLabel(""); button_widget->addChild(titel_label); // ................................................................. input line KWidgetArray * inputArray = new KWidgetArray(); inputArray->setFrameSpacing (0); inputArray->setChildSpacing (2); input_label = new KLabel(""); input_label->KWidget::flags[KDL_WIDGET_FLAG_FIXED_SIZE] = false; input_field = new KTextField(""); addPickable(input_field); input_field->setMinSize(KSize(0,0)); input_field->KWidget::flags[KDL_WIDGET_FLAG_FILL_X] = true; input_field->KWidget::flags[KDL_WIDGET_FLAG_FIXED_SIZE] = false; input_field->KWidget::flags[KDL_TEXTFIELD_FLAG_NOTIFY_ON_UNPICK] = false; input_field->addReceiverCallback(this, (KSetStringPtr)&KikiPython::userInput); inputArray->addChild(input_label); inputArray->addChild(new KLabel (":")); inputArray->addChild(input_field); widget->addChild(editorArray); widget->addChild(inputArray); widget->layout(); widget->hide(); Controller.addPickHandler(this); } // __________________________________________________________________________________________________ void KikiPython::initPython () { #if defined(__APPLE__) && defined(__MACH__) //putenv ("PYTHONDEBUG=1"); //putenv ("PYTHONVERBOSE=1"); putenv ("PYTHONPATH=./py:../Frameworks/Python.framework/Versions/A/lib/python2.2"); #elif defined(WIN32) putenv ("PYTHONDEBUG=1"); putenv ("PYTHONVERBOSE=1"); string pypath = string("PYTHONPATH=") + kFileNativePath(Controller.getKikiHome() + "py_crippled"); KConsole::debugf(true, "pypath: %s", pypath.c_str()); putenv (pypath.c_str()); #endif Py_Initialize(); std::string kikipy_path = kFileNativePath(Controller.getKikiHome() + "py/kiki.py"); init_kiki(); FILE * pythonFile = fopen (kikipy_path.c_str(), "r"); if (pythonFile) { if (PyRun_SimpleFile (pythonFile, (char *)kikipy_path.c_str()) == 0) { // ........................................................ python environment executeFile (kFileNativePath (Controller.getKikiHome() + "py/env.py")); python_widget->initPython(); } else { KConsole::printError (kStringPrintf("KikiPython::initPython error while executing %s", kikipy_path.c_str())); } } else { KConsole::printError (kStringPrintf("KikiPython::initPython unable to open %s", kikipy_path.c_str())); } } // __________________________________________________________________________________________________ KikiPython::~KikiPython () { Controller.removePickHandler(this); } // __________________________________________________________________________________________________ void KikiPython::finalize () { Py_Finalize(); } // -------------------------------------------------------------------------------------------------------- void KikiPython::setScrollBarUnits ( int currentLine, int lines ) { scroll_bar->setUnits( currentLine, python_widget->getTextRows(), lines); } // -------------------------------------------------------------------------------------------------------- void KikiPython::setTitle ( const std::string & t ) { titel_label->setText(t); } // -------------------------------------------------------------------------------------------------------- void KikiPython::setStatus ( const std::string & t ) { input_field->setSize(KSize(0,0)); input_label->setText(t); widget->layout(); } // -------------------------------------------------------------------------------------------------------- void KikiPython::setInput ( const std::string & t ) { input_field->setText(t); } // -------------------------------------------------------------------------------------------------------- void KikiPython::requestUserInput ( const std::string & message ) { python_widget->setPicked(false); input_field->setPicked(true); input_field->setSize(KSize(0,0)); input_label->setText(message); input_field->selectAll(); } // -------------------------------------------------------------------------------------------------------- void KikiPython::userInput ( const std::string & input) { input_field->setPicked(false); python_widget->setPicked(true); execute(kStringPrintf("pythonConsole.userInput('%s')\n", input.c_str())); } // __________________________________________________________________________________________________ void KikiPython::setVisibility ( bool v ) { KWindow::setVisibility(v); python_widget->setPicked(v); } // __________________________________________________________________________________________________ void KikiPython::close () { KWindow::close(); python_widget->setPicked(false); } // __________________________________________________________________________________________________ bool KikiPython::execute ( const std::string & pythonCode, bool eval ) { PyObject * mainModule, * mainDict; mainModule = PyImport_AddModule("__main__"); if (mainModule == NULL) { KConsole::printError("KikiPython::execute no __main__ module"); return false; } mainDict = PyModule_GetDict(mainModule); PyObject * result = PyRun_String((char*)pythonCode.c_str(), eval ? Py_eval_input : Py_file_input, mainDict, mainDict); if (result == NULL) { KConsole::printError(kStringPrintf("KikiPython::execute '%s'", pythonCode.c_str())); PyErr_Print(); return false; } bool retval = PyObject_IsTrue(result); Py_DECREF(result); return retval; } // __________________________________________________________________________________________________ bool KikiPython::executeFile ( const std::string & pythonFile ) { FILE * filePtr = fopen(pythonFile.c_str(), "r"); if (filePtr) { return (PyRun_SimpleFile(filePtr, (char *)pythonFile.c_str()) == 0); } else { KConsole::printError(kStringPrintf("KikiPython::executeFile unable to open file '%s'", pythonFile.c_str())); } return false; } kiki/src/main/KikiPython.h0000666000000000000000000000310107644706112014466 0ustar rootroot/* * KikiPython.h * kiki */ #ifndef __KikiPython #define __KikiPython #include #include #include class KLabel; class KTextField; class KScrollBar; class KIconButton; class KikiPythonWidget; // __________________________________________________________________________________________________ class KikiPython : public KWindow { protected: // ..................................................................... PROTECTED KikiPythonWidget * python_widget; KScrollBar * scroll_bar; KLabel * titel_label; KLabel * input_label; KTextField * input_field; KIconButton * maximize_button; public: // ........................................................................ PUBLIC KikiPython (); ~KikiPython (); void initPython (); void finalize (); bool execute ( const std::string & pythonCode, bool eval = false ); bool executeFile ( const std::string & pythonFile ); KikiPythonWidget * getPythonWidget () { return python_widget; } //void display ( int mode ) { KWindow::display(mode); } void setVisibility ( bool v ); void close (); void setScrollBarUnits ( int currentLine, int lines ); void setTitle ( const std::string & ); void setStatus ( const std::string & ); void setInput ( const std::string & ); void userInput ( const std::string & ); void requestUserInput ( const std::string & message ); }; #endif kiki/src/main/KikiPythonWidget.cpp0000666000000000000000000001616407644706112016202 0ustar rootroot/* * KikiPythonWidget.cpp * kiki */ #include "KikiPythonWidget.h" #include "KikiController.h" #include "KikiPython.h" #include #include #include #include // -------------------------------------------------------------------------------------------------------- KikiPythonWidget::KikiPythonWidget () : KTextField () { bg_color = new KColor(0.0, 0.0, 0.0, 0.8); } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::initPython () { Controller.python->executeFile(Controller.getKikiHome() + "/py/edit.py"); } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::displayStringAtPos ( const std::string & str, const KikiPos & pos ) { kDisplayString(str, KPosition(pos.x*8, -pos.y*13), false); } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::render () { KWidget::render(); int cHeight = getRowHeight(); int cWidth = getColumnWidth(); int widgetWidth = getSize().w; glEnable(GL_SCISSOR_TEST); glScissor(getScreenPos().x, getScreenPos().y, size.w, size.h); // ............................................................ display python text glPushMatrix(); glTranslatef(3, -10, 0); execute("displayText()"); glPopMatrix(); // ............................................................ display selection and cursor int posX = cursorPos.x * cWidth; int posY = -cursorPos.y * cHeight; if (picked) { // ............................................................ the cursor glColor4f(1.0, 1.0, 0.0, 1.0); glBegin (GL_QUADS); glVertex2i(posX+3, posY); glVertex2i(posX+3, posY-cHeight); glColor4f(1.0, 1.0, 0.0, 0.1); glVertex2i(posX+3+cWidth, posY-cHeight); glVertex2i(posX+3+cWidth, posY); glEnd(); // ............................................................ selection if (selectionPos != cursorPos) // if exists, draw the selection { int startX, startY, endX, endY; if (selectionPos.y > cursorPos.y) { startX = posX+3; startY = posY; endX = selectionPos.x * cWidth; endY = -selectionPos.y * cHeight; } else { startX = selectionPos.x * cWidth+3; startY = -selectionPos.y * cHeight; endX = posX; endY = posY; } glPushAttrib (GL_CURRENT_BIT | GL_POLYGON_BIT); selection_color.glColor(); glDisable (GL_CULL_FACE); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); glBegin (GL_QUADS); if (startY == endY) // just one line selected { glVertex2i (startX, startY); glVertex2i (startX, startY -cHeight); glVertex2i (endX, startY -cHeight); glVertex2i (endX, startY); } else // multiple lines selected { glVertex2i (startX, startY); glVertex2i (startX, startY -cHeight); glVertex2i (widgetWidth, startY -cHeight); glVertex2i (widgetWidth, startY); glVertex2i (0, endY); glVertex2i (0, endY -cHeight); glVertex2i (endX, endY -cHeight); glVertex2i (endX, endY); glVertex2i (0, startY -cHeight); glVertex2i (0, endY); glVertex2i (widgetWidth, endY); glVertex2i (widgetWidth, startY -cHeight); } glEnd(); glPopAttrib(); } } glDisable(GL_SCISSOR_TEST); } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::clear () { execute("clearBuffer()\n"); getWindow()->pickPickable(this); } // -------------------------------------------------------------------------------------------------------- bool KikiPythonWidget::execute ( const std::string & cmd, bool eval ) { if (Controller.python) { return Controller.python->execute("pythonConsole." + cmd + "\n", eval); } return false; } // -------------------------------------------------------------------------------------------------------- KSize KikiPythonWidget::relayout ( const KSize & newSize ) { KTextField::relayout(newSize); printf ("Controller.python %#x\n", Controller.python); if (Controller.python != NULL) { Controller.python->execute(kStringPrintf("if 'pythonConsole' in locals():\n" " pythonConsole.setSize(%d, %d)\n\n", getTextCols(), getTextRows())); } return size; } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::scrollRelative ( float f ) { execute(kStringPrintf("scrollRelative(%f)\n", f)); } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::mouseMoved ( const KMouseEvent & event ) { KPosition mouseWidgetPos = event.pos - getScreenPos(); // position relative to widget execute(kStringPrintf("mouseMoved((%d, %d))\n", mouseWidgetPos.x / getColumnWidth(), (getSize().h-mouseWidgetPos.y) / getRowHeight())); } // -------------------------------------------------------------------------------------------------------- void KikiPythonWidget::setPicked ( bool p ) { if (picked != p) { picked = p; if (picked) { execute(kStringPrintf("picked((%d, %d))", getLocatorWidgetPos().x/getColumnWidth(), (getSize().h-getLocatorWidgetPos().y)/getRowHeight())); KEventHandler::setFocusKeyHandler(this); getWindow()->setFocusWidget(this); } else { getWindow()->setFocusWidget(NULL); KEventHandler::removeFocusKeyHandler((KKeyHandler*)this); } } } // -------------------------------------------------------------------------------------------------------- bool KikiPythonWidget::handleKey ( const KKey & key ) { char character = 0; if (key.character != '\\' && key.character != '\'') { character = key.character; } return execute(kStringPrintf("handleKey('%s', '%c')", key.name.c_str(), character), true); } kiki/src/main/KikiPythonWidget.h0000666000000000000000000000300707644706112015637 0ustar rootroot/* * KikiPythonWidget.h * kiki */ #ifndef __KikiPythonWidget #define __KikiPythonWidget #include "KikiPos.h" #include class KikiPythonWidget : public KTextField { friend class KikiPython; protected: // ..................................................................... PROTECTED void initPython (); public: // ........................................................................ PUBLIC KikiPos cursorPos; KikiPos selectionPos; KikiPythonWidget (); bool execute ( const std::string & cmd, bool eval = false ); void clear (); void scrollRelative ( float ); void scrollPageUp () { execute("scrollPageUp()"); } void scrollPageDown () { execute("scrollPageDown()"); } void scrollLineUp () { execute("scrollLineUp()"); } void scrollLineDown () { execute("scrollLineDown()"); } void scrollToTop () { execute("scrollToTop()"); } void scrollToBottom () { execute("scrollToBottom()"); } void doubleClicked () { execute("doubleClicked()"); } void setPicked ( bool ); void mouseMoved ( const KMouseEvent & ); bool handleKey ( const KKey & ); KSize relayout ( const KSize & ); KikiPython * getPythonWindow () const { return (KikiPython*)getWindow(); } void render (); void displayStringAtPos ( const std::string &, const KikiPos & ); }; #endif kiki/src/main/main.cpp0000666000000000000000000000324007645543105013662 0ustar rootroot/* * main.cpp * kiki */ #include #include #include #include #include #include "KikiController.h" // __________________________________________________________________________________________________ // __________________________________________________________________________________________________ //SDL_main.h should take care of converting main to SDL_main for win and macos int main (int argc, char * argv[]) { int width, height; SDL_Surface * screen; // initialize SDL if ( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_VIDEO) < 0 ) // SDL_INIT_TIMER { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } #if defined(__APPLE__) && defined(__MACH__) // OpenGL attributes SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); // Set video mode width = 1024; height = 695; #else //Any GLX visual should do // Set video mode width = 800; height = 600; #endif screen = SDL_SetVideoMode (width, height, 0, SDL_OPENGL | SDL_RESIZABLE); // | SDL_FULLSCREEN if (screen == NULL) { fprintf(stderr, "Couldn't initialize SDL video mode: %s\n", SDL_GetError()); SDL_Quit(); exit(2); } // init Controller ... Controller.init(); // ... and he does the rest ... Controller.mainLoop(); SDL_Quit(); return 0; } kiki/src/main/SDLMain.h0000666000000000000000000000010407644706112013624 0ustar rootroot #import @interface SDLMain : NSObject @end kiki/src/main/SDLMain.m0000666000000000000000000000571307644706112013644 0ustar rootroot/* * SDLMain.m * kiki */ #import #import #import // MAXPATHLEN #import // __________________________________________________________________________________________________ static int gArgc; static char **gArgv; // __________________________________________________________________________________________________ @interface SDLMain : NSObject @end // __________________________________________________________________________________________________ @interface SDLApplication : NSApplication @end // __________________________________________________________________________________________________ // __________________________________________________________________________________________________ @implementation SDLApplication // __________________________________________________________________________________________________ - (void) terminate: (id) sender { SDL_Event event; event.type = SDL_QUIT; SDL_PushEvent (&event); } @end // __________________________________________________________________________________________________ // __________________________________________________________________________________________________ @implementation SDLMain // -------------------------------------------------------------------------------------------------------- // set the working directory to the resources directory - (void) setupWorkingDirectory { char parentdir[MAXPATHLEN]; char *c; strncpy ( parentdir, gArgv[0], sizeof(parentdir) ); c = (char*) parentdir; while (*c != '\0') c++; // go to end while (*c != '/') c--; // back up to parent *c++ = '\0'; // cut off last part (binary name) assert ( chdir (parentdir) == 0 ); // chdir to the binary app's parent assert ( chdir ("../Resources") == 0 ); // chdir to the .app's resource directory } // __________________________________________________________________________________________________ - (void) applicationDidFinishLaunching: (NSNotification *) note { int status; [self setupWorkingDirectory]; status = SDL_main (gArgc, gArgv); exit(status); } @end #ifdef main #undef main #endif // __________________________________________________________________________________________________ // __________________________________________________________________________________________________ int main(int argc, const char *argv[]) { int i; if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { gArgc = 1; } else { gArgc = argc; } gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1)); assert (gArgv != NULL); for (i = 0; i < gArgc; i++) { gArgv[i] = (char *)argv[i]; } gArgv[i] = NULL; [SDLApplication poseAsClass:[NSApplication class]]; NSApplicationMain(argc, argv); return 0; } kiki/src/sound/0000777000000000000000000000000010336064534012432 5ustar rootrootkiki/src/sound/KikiSound.cpp0000666000000000000000000001764610317743247015060 0ustar rootroot/* * KikiSound.cpp */ #ifndef WIN32 #include #endif #include "KikiSound.h" #include "KikiWorld.h" #include "KikiGUI.h" #include #include #include #include #include #include // __________________________________________________________________________________________________ typedef struct _KikiSound { int sound_id; const char * sound_file; float sound_volume; } KikiSoundData; // __________________________________________________________________________________________________ static KikiSoundData KikiSounds[] = { { KikiSound::BOT_MOVE, "bot_move.wav", 0.2 }, { KikiSound::BOT_JUMP, "bot_jump.wav", 0.7 }, { KikiSound::BOT_LAND, "bot_land.wav", 0.7 }, { KikiSound::BOT_SPIKED, "bot_move.wav", 1.0 }, { KikiSound::BOT_HEALTH_ALERT, "bot_health_alert.wav", 1.0 }, { KikiSound::BOT_DEATH, "bot_death.wav", 1.0 }, { KikiSound::BOT_NO_ENERGY, "bot_no_energy.wav", 1.0 }, { KikiSound::BULLET_SHOT, "bullet_shot.wav", 1.0 }, { KikiSound::BULLET_HIT_WALL, "bullet_hit_wall.wav", 1.0 }, { KikiSound::BULLET_HIT_OBJECT, "bullet_hit_object.wav", 1.0 }, { KikiSound::BULLET_HIT_PLAYER, "bullet_hit_player.wav", 1.0 }, { KikiSound::BULLET_HIT_MUTANT, "bullet_hit_mutant.wav", 1.0 }, { KikiSound::STONE_MOVE, "stone_move.wav", 1.0 }, { KikiSound::STONE_LAND, "stone_land.wav", 1.0 }, { KikiSound::SWITCH_ON, "switch_on.wav", 1.0 }, { KikiSound::SWITCH_OFF, "switch_on.wav", 0.5 }, { KikiSound::ATOM_BIRTH, "atom_digest.wav", 1.0 }, { KikiSound::ATOM_DIGEST, "atom_digest.wav", 1.0 }, { KikiSound::SPIKES_START, "bot_move.wav", 1.0 }, { KikiSound::MENU_FADE, "menu_fade.wav", 1.0 }, { KikiSound::MENU_ITEM, "menu_item.wav", 1.0 }, { KikiSound::MENU_SELECT, "menu_select.wav", 1.0 }, { KikiSound::MENU_ABORT, "menu_abort.wav", 1.0 }, { KikiSound::GATE_OPEN, "gate_open.wav", 1.0 }, { KikiSound::GATE_CLOSE, "gate_close.wav", 1.0 }, { KikiSound::GATE_WARP, "gate_warp.wav", 1.0 }, { KikiSound::BOMB_EXPLODE, "bomb_explode.wav", 1.0 }, { KikiSound::BOMB_SPLITTER, "bomb_splitter.wav", 1.0 }, { KikiSound::GEAR_ON, "gear_on.wav", 1.0 }, { KikiSound::GEAR_OFF, "gear_off.wav", 1.0 }, { KikiSound::GENERATOR_ON, "generator_on.wav", 1.0 }, { KikiSound::GENERATOR_OFF, "generator_off.wav", 1.0 }, { KikiSound::MOTOR, "bomb_splitter.wav", 1.0 }, }; // __________________________________________________________________________________________________ KikiSound::KikiSound () { sound_volume = 50; mute = false; int frequency = MIX_DEFAULT_FREQUENCY; Uint16 format = MIX_DEFAULT_FORMAT; int channels = MIX_DEFAULT_CHANNELS; int chunksize = 2048; num_channels = 0; if (Mix_OpenAudio(frequency, format, channels, chunksize) < 0) // open mixer { KConsole::printError (kStringPrintf ("KikiSound::KikiSound couldn't open audio mixer: %s\n", SDL_GetError())); return; } num_channels = Mix_AllocateChannels (MIX_CHANNELS); // create channels Mix_Volume (-1, sound_volume); // set the start volume // title song #ifndef _WINDOWS std::string song_path = kFileNativePath(Controller.getKikiHome() + "/sound/" + "title_song.mp3"); Mix_Music * music = Mix_LoadMUS(song_path.c_str()); if(!music) { KConsole::printf ("unable to load title song (\"%s\"): %s\n", song_path.c_str(), Mix_GetError()); } else { if (Mix_PlayMusic(music, 0) == -1) { KConsole::printf("unable to play title song: %s\n", Mix_GetError()); } } #endif int soundIndex = 0; while (soundIndex < KikiSound::END) { loadSound (KikiSounds[soundIndex].sound_file); soundIndex++; } } // __________________________________________________________________________________________________ KikiSound::~KikiSound () { while (snd_chunks.empty() == false) { Mix_FreeChunk(snd_chunks.back()); snd_chunks.pop_back(); } } // __________________________________________________________________________________________________ void KikiSound::setMute ( bool m ) { if (m != mute) { mute = m; } } // __________________________________________________________________________________________________ void KikiSound::setSoundVolume ( int v ) { sound_volume = v; if (num_channels) Mix_Volume (-1, sound_volume); } // __________________________________________________________________________________________________ Mix_Chunk * KikiSound::loadWav ( const std::string & file ) { return Mix_LoadWAV (file.c_str()); } // __________________________________________________________________________________________________ bool KikiSound::loadSound ( const std::string & file ) { if (num_channels == 0) return false; std::string file_path = kFileNativePath(Controller.getKikiHome() + "/sound/" + file); Mix_Chunk * chunk = loadWav(file_path.c_str()); if (chunk == NULL) { KConsole::printError(kStringPrintf("KikiSound::loadSound unable to load sound file %s", file_path.c_str())); return false; } snd_chunks.push_back(chunk); return true; } // __________________________________________________________________________________________________ int KikiSound::getFreeChannel () { for (int i = 0; i < num_channels; i++) { if (Mix_Playing(i) == false) { return i; } } return -1; } // __________________________________________________________________________________________________ void KikiSound::playSound ( int sndId, float volume, int loops ) { if (mute || num_channels == 0) return; if (sndId >= (int)snd_chunks.size() || snd_chunks[sndId] == NULL) { KConsole::printError(kStringPrintf("KikiSound::playSound unknown sound id %d\n", sndId)); return; } int freeChannel = getFreeChannel(); if (freeChannel < 0) return; if (volume < 0) { volume = KikiSounds[sndId].sound_volume; } Mix_UnregisterAllEffects (freeChannel); Mix_VolumeChunk (snd_chunks[sndId], (int)(MIX_MAX_VOLUME * volume)); Mix_PlayChannel (freeChannel, snd_chunks[sndId], loops); } // __________________________________________________________________________________________________ void KikiSound::playSoundAtPos ( int sndId, const KikiPos & pos, float factor ) { if (mute || num_channels == 0) return; if (sndId >= (int)snd_chunks.size() || snd_chunks[sndId] == NULL) { KConsole::printError(kStringPrintf("KikiSound::playSoundAtPos unknown sound id %d\n", sndId)); return; } int freeChannel = getFreeChannel(); if (freeChannel < 0) return; float volume; float maxDistance = Controller.world->getMaxDistance(); KProjection * projection = Controller.world->getProjection(); if (projection == NULL) return; KVector cameraToPos (pos - projection->getPosition()); volume = (1.0 - (cameraToPos.length() / maxDistance)); volume *= volume * factor; if (volume > 0.05) // very low volume sounds just waste cpu time :-) { float pan = (projection->getXVector() * cameraToPos.normal()) / 2.0 + 0.5; volume *= MIX_MAX_VOLUME; Mix_SetPanning (freeChannel, (Uint8)(volume * (1.0 - pan)), (Uint8)(volume * pan)); Mix_PlayChannel (freeChannel, snd_chunks[sndId], 0); } } kiki/src/sound/KikiSound.h0000666000000000000000000000422207644706113014507 0ustar rootroot/* * KikiSound.h */ #ifndef __KikiSound #define __KikiSound #include "KikiController.h" #include // __________________________________________________________________________________________________ class KikiSound { protected: // ..................................................................... PROTECTED int num_channels; std::vector snd_chunks; int sound_volume; bool mute; public: // ........................................................................ PUBLIC enum { BOT_MOVE, BOT_JUMP, BOT_LAND, BOT_SPIKED, BOT_HEALTH_ALERT, BOT_DEATH, BOT_NO_ENERGY, BULLET_SHOT, BULLET_HIT_WALL, BULLET_HIT_OBJECT, BULLET_HIT_PLAYER, BULLET_HIT_MUTANT, STONE_MOVE, STONE_LAND, SWITCH_ON, SWITCH_OFF, ATOM_BIRTH, ATOM_DIGEST, SPIKES_START, MENU_FADE, MENU_ITEM, MENU_SELECT, MENU_ABORT, GATE_OPEN, GATE_CLOSE, GATE_WARP, BOMB_EXPLODE, BOMB_SPLITTER, GEAR_ON, GEAR_OFF, GENERATOR_ON, GENERATOR_OFF, MOTOR, END }; KikiSound (); ~KikiSound (); void toggleMute () { setMute (!mute); } void setMute ( bool b ); bool isMute () const { return mute; } void setSoundVolume ( int v ); int getSoundVolume () const { return sound_volume; } int getFreeChannel (); Mix_Chunk * loadWav ( const std::string & file ); bool loadSound ( const std::string & file ); void playSound ( int sndId, float volume = -1.0, int loops = 0 ); void playSoundAtPos ( int sndId, const KikiPos & pos, float = 1.0 ); }; #endif kiki/src/world/0000777000000000000000000000000010336064534012431 5ustar rootrootkiki/src/world/KikiCell.cpp0000666000000000000000000000665507644706113014644 0ustar rootroot/* * KikiCell.cpp * kiki */ #include "KikiCell.h" #include #include // __________________________________________________________________________________________________ KikiCell::KikiCell () { } // __________________________________________________________________________________________________ KikiCell::~KikiCell () { if (objects.empty() == false) { KConsole::printError("KikiCell::~KikiCell not empty!"); } } // __________________________________________________________________________________________________ KikiObjectList KikiCell::getObjectsOfType ( const KClassId & classId ) { KikiObjectList object_list; for (KikiObjectIter objectIter = objects.begin(); objectIter != objects.end(); objectIter++) { if ((*objectIter)->getClassId() >= classId) { object_list.push_back(*objectIter); } } return object_list; } // __________________________________________________________________________________________________ KikiObject * KikiCell::getObjectOfType ( const KClassId & classId ) { for (KikiObjectIter objectIter = objects.begin(); objectIter != objects.end(); objectIter++) { if ((*objectIter)->getClassId() >= classId) { return (*objectIter); } } return NULL; } // __________________________________________________________________________________________________ KikiObject * KikiCell::getRealObjectOfType ( const KClassId & classId ) { for (KikiObjectIter objectIter = objects.begin(); objectIter != objects.end(); objectIter++) { if ((*objectIter)->getClassId() >= classId) { return (*objectIter); } else if ((*objectIter)->getClassId() >= KikiTmpObject::classId()) { KikiObject * realObject = ((KikiTmpObject*)(*objectIter))->object; if (realObject->getClassId() >= classId) { return realObject; } } } return NULL; } // __________________________________________________________________________________________________ KikiObject * KikiCell::getOccupant () { for (KikiObjectIter objectIter = objects.begin(); objectIter != objects.end(); objectIter++) { if ((*objectIter)->isSpaceEgoistic()) { return (*objectIter); } } return NULL; } // __________________________________________________________________________________________________ void KikiCell::removeObject ( KikiObject * object ) { KikiObjectIter result = std::find (objects.begin(), objects.end(), object); if (result != objects.end()) { for (KikiObjectIter iter = objects.begin(); iter != objects.end(); iter++) { if ((*iter) != object) { (*iter)->cellMateLeft (object); } } objects.erase(result); } } // __________________________________________________________________________________________________ void KikiCell::addObject ( KikiObject * object ) { if (std::find (objects.begin(), objects.end(), object) == objects.end()) { for (KikiObjectIter iter = objects.begin(); iter != objects.end(); iter++) { (*iter)->newCellMate(object); } objects.push_back(object); } } kiki/src/world/KikiCell.h0000666000000000000000000000214707644706113014301 0ustar rootroot/* * KikiCell.h * kiki */ #ifndef __KikiCell #define __KikiCell #include "KikiObject.h" // __________________________________________________________________________________________________ class KikiCell { friend class KikiWorld; protected: // ..................................................................... PROTECTED KikiObjectList objects; KikiCell (); ~KikiCell (); public: // ........................................................................ PUBLIC void removeObject ( KikiObject * object ); void addObject ( KikiObject * object ); KikiObject * getOccupant (); KikiObject * getObjectOfType ( const KClassId & ); KikiObjectList getObjectsOfType ( const KClassId & ); KikiObject * getRealObjectOfType ( const KClassId & ); bool isEmpty () const { return objects.empty(); } }; // __________________________________________________________________________________________________ typedef std::vector KikiCellList; #endif kiki/src/world/KikiWorld.cpp0000666000000000000000000010676610314375264015055 0ustar rootroot/* * KikiWorld.cpp */ #include "KikiWorld.h" #include "KikiSound.h" #include "KikiPlayer.h" #include "KikiPython.h" #include "KikiText.h" #include "KikiBotFume.h" #include "KikiItems.h" #include "KikiTools.h" #include "KikiAction.h" #include #include #include #include #include KDL_CLASS_INTROSPECTION (KikiWorld) #undef KIKI_COLOR_VALUES #define KIKI_COLOR_VALUES(a,b) KIKI_COLOR_VALUES_1 (KikiWorld, plate) // __________________________________________________________________________________________________ KikiWorld::KikiWorld () : KPickHandler () { display_list = 0; depth = -INT_MAX; camera_mode = CAMERA_BEHIND; edit_projection = NULL; edit_mode = false; debug_camera = false; debug_cells = false; flags[KDL_PICKHANDLER_FLAG_MOVING_ENABLED] = true; flags[KDL_PICKHANDLER_FLAG_PROJECTION_ENABLED] = true; flags.resize(WORLD_END); flags[DISPLAY_BORDER] = true; flags[DISPLAY_DOTS] = false; flags[DISPLAY_RASTER] = true; flags[DISPLAY_SHADOWS] = false; raster_size = 0.1; KEventHandler::notification_center.addReceiverCallback((KPickHandler*)this, (KCallbackPtr)&KikiWorld::reinit, KDL_NOTIFICATION_TYPE_VIDEO_MODE_CHANGED); KEventHandler::notification_center.addReceiverCallback((KPickHandler*)this, (KCallbackPtr)&KikiWorld::reinit, KDL_NOTIFICATION_TYPE_WINDOW_SIZE_CHANGED); initializeTextures (); } // __________________________________________________________________________________________________ KikiWorld::~KikiWorld () { deleteAllObjects(); } // __________________________________________________________________________________________________ KikiCell * KikiWorld::getCellAtPos ( const KikiPos & pos ) const { if (isValidPos (pos)) { return cells[posToIndex(pos)]; } return NULL; } // __________________________________________________________________________________________________ KikiBot * KikiWorld::getBotAtPos ( const KikiPos & pos ) const { return (KikiBot*)getObjectOfTypeAtPos (KikiBot::classId(), pos); } // __________________________________________________________________________________________________ KikiObjectList KikiWorld::getObjectsOfTypeAtPos ( const KClassId & classId, const KikiPos & pos ) const { KikiCell * cell = getCellAtPos (pos); if (cell) { return cell->getObjectsOfType (classId); } return KikiObjectList(); } // __________________________________________________________________________________________________ KikiObjectList KikiWorld::getObjectsOfType ( const KClassId & classId ) const { KikiObjectList object_list; for (KikiObjectList::const_iterator iter = objects.begin(); iter != objects.end(); iter++) { if ((*iter)->getClassId() >= classId) { object_list.push_back (*iter); } } return object_list; } // __________________________________________________________________________________________________ KikiObject * KikiWorld::getObjectOfTypeAtPos ( const KClassId & classId, const KikiPos & pos ) const { KikiCell * cell = getCellAtPos (pos); if (cell) { return cell->getRealObjectOfType (classId); } return NULL; } // __________________________________________________________________________________________________ KikiObject * KikiWorld::getRealOccupantAtPos ( const KikiPos & pos ) const { KikiObject * occupant = getOccupantAtPos (pos); if (occupant && occupant->getClassId() >= KikiTmpObject::classId()) { return ((KikiTmpObject*)occupant)->object; } return occupant; } // __________________________________________________________________________________________________ KikiObject * KikiWorld::getOccupantAtPos ( const KikiPos & pos ) const { KikiCell * cell = getCellAtPos (pos); if (cell) { return cell->getOccupant (); } return NULL; } // __________________________________________________________________________________________________ void KikiWorld::setObjectAtPos ( KikiObject * object, const KikiPos & pos ) { if (isInvalidPos(pos)) { KConsole::printError (kStringPrintf("KikiWorld::setObjectAtPos pos [%d %d %d] is invalid!", pos.x, pos.y, pos.z)); return; } KikiCell * cell = getCellAtPos (pos); if (object->isSpaceEgoistic() && cell && cell->getOccupant()) { KikiObject * objectAtNewPos = cell->getOccupant(); if (objectAtNewPos->getClassId() >= KikiTmpObject::classId()) { if (((KikiTmpObject*)objectAtNewPos)->time > 0) { KConsole::printf ("WARNING KikiWorld::setObject %s at pos [%d %d %d] " "already occupied by %s with time %d!", object->getClassName(), pos.x, pos.y, pos.z, cell->getOccupant()->getClassName(), ((KikiTmpObject*)objectAtNewPos)->time); } delete objectAtNewPos; // temporary object at new pos will vanish anyway -> delete it } else { delete objectAtNewPos; } } cell = getCellAtPos (pos); if (cell == NULL) { cell = new KikiCell(); cells[posToIndex(pos)] = cell; } object->setPosition (pos); cell->addObject (object); } // __________________________________________________________________________________________________ void KikiWorld::unsetObject ( KikiObject * object ) { KikiPos pos (object->getPos()); KikiCell * cell = getCellAtPos (pos); if (cell) { cell->removeObject (object); if (cell->isEmpty()) { delete cell; cells[posToIndex(pos)] = 0; } } } // __________________________________________________________________________________________________ void KikiWorld::addObject ( KikiObject * object ) { if (object->getClassId() >= KikiLight::classId()) { if (std::find (lights.begin(), lights.end(), object) == lights.end()) { lights.push_back ((KikiLight*)object); } } else { if (std::find (objects.begin(), objects.end(), object) == objects.end()) { objects.push_back(object); } } } // __________________________________________________________________________________________________ void KikiWorld::addObjectAtPos ( KikiObject * object, const KikiPos & pos ) { setObjectAtPos (object, pos); addObject (object); } // __________________________________________________________________________________________________ void KikiWorld::removeObject ( KikiObject * object ) { unsetObject (object); KikiLightIter light_result = std::find (lights.begin(), lights.end(), object); if (light_result != lights.end()) { lights.erase (light_result); return; } KikiObjectIter result = std::find (objects.begin(), objects.end(), object); if (result != objects.end()) { objects.erase (result); } } // __________________________________________________________________________________________________ bool KikiWorld::moveObjectToPos( KikiObject * object, const KikiPos & pos ) { if (isInvalidPos(pos) || isOccupiedPos(pos)) return false; unsetObject (object); setObjectAtPos (object, pos); Controller.sound->playSound(KikiSound::BOT_LAND); return true; } // __________________________________________________________________________________________________ void KikiWorld::deleteObject ( KikiObject * object ) { if (object == NULL) { KConsole::printf ("WARNING: KikiWorld::deleteObject NULL"); return; } removeObject (object); delete object; } // __________________________________________________________________________________________________ void KikiWorld::deleteAllObjects () { picked_pickable = NULL; moved_objects.clear(); if (Controller.player) { removeObject (Controller.player); // remove the player first, to keep it's state Controller.timer_event->removeAllActions (); Controller.removeKeyHandler (Controller.player); // prevent keyboard input while building world Controller.player->reset (); } while (lights.empty() == false) { unsigned int oldSize = lights.size(); delete lights.back(); // destructor will call remove object if (oldSize == lights.size()) { KConsole::printf ("WARNING KikiWorld::deleteAllObjects light no auto remove"); lights.pop_back(); } } while (objects.empty() == false) { if (debug_cells) { Controller.KEventHandler::display (); SDL_Delay (20); } unsigned int oldSize = objects.size(); delete objects.back(); // destructor will call remove object if (oldSize == objects.size()) { KConsole::printf ("WARNING KikiWorld::deleteAllObjects object no auto remove"); objects.pop_back(); } } } // __________________________________________________________________________________________________ void KikiWorld::deleteObjectsWithClassName ( const std::string & className ) { for (KikiObjectList::reverse_iterator iter = objects.rbegin(); iter != objects.rend(); iter++) { if (className == (*iter)->getClassName()) { delete (*iter); } } } // __________________________________________________________________________________________________ KikiObject * KikiWorld::getObjectWithName ( const std::string & objectName ) { for (KikiObjectIter iter = objects.begin(); iter != objects.end(); iter++) { if (objectName == (*iter)->getName()) { return (*iter); } } KConsole::printf("KikiWorld::getObjectWithName :: no object found with name %s", objectName.c_str()); return NULL; } // __________________________________________________________________________________________________ void KikiWorld::setEditMode ( bool editMode ) { edit_mode = editMode; if (edit_mode && edit_projection == NULL) { edit_projection = new KLightingProjection (); } edit_projection->focusOn (((KVector)size)/2.0); edit_projection->setEyeDistance (max_distance*1.5); } // __________________________________________________________________________________________________ void KikiWorld::focusOnPickedPickable ( bool zoom ) { if (edit_mode && picked_pickable) { projection->focusOn (((KikiObject*)picked_pickable)->getPosition()); } } // __________________________________________________________________________________________________ void KikiWorld::setCameraMode ( int mode ) { camera_mode = kMinMax (CAMERA_INSIDE, CAMERA_FOLLOW, mode); } // __________________________________________________________________________________________________ void KikiWorld::changeCameraMode () { camera_mode = ((camera_mode+1) % (CAMERA_FOLLOW+1)); } // __________________________________________________________________________________________________ bool KikiWorld::shouldPick ( const KPickable * ) { return edit_mode; } // __________________________________________________________________________________________________ void KikiWorld::picked () { // reset drag deltas and start pos deltas.x = deltas.y = 0; if (picked_pickable) { drag_start_pos = ((KikiObject*)picked_pickable)->position; } } // __________________________________________________________________________________________________ void KikiWorld::moved ( const KMouseEvent & mouseEvent ) { KikiObject * object = (KikiObject*)picked_pickable; if (object == NULL) return; KVector newPosition = drag_start_pos; deltas = deltas + mouseEvent.delta; getProjection()->moveObjectRelativeToWindow(deltas, newPosition); // round to next integer positions and make a valid pos KikiPos newPos = getNearestValidPos(newPosition); if (getOccupantAtPos(newPos) == NULL && (newPos != object->getPos())) { // empty position != old position -> move object moveObjectToPos(object, newPos); } } // __________________________________________________________________________________________________ void KikiWorld::objectMovedFromPos ( KikiObject * object, const KikiPos & pos ) { KikiCell * cell = getCellAtPos(pos); if (cell) { KikiTmpObject * tmpObject = (KikiTmpObject*)cell->getObjectOfType(KikiTmpObject::classId()); if (tmpObject) { if (tmpObject->object == object) { delete tmpObject; } } } moved_objects.push_back(object); } // __________________________________________________________________________________________________ void KikiWorld::objectWillMoveToPos ( KikiObject * object, const KikiPos & pos, int duration ) { KikiCell * cell = getCellAtPos (pos); if (isInvalidPos(pos)) { KConsole::printError (kStringPrintf("KikiWorld::objectWillMoveToPos invalid pos [%d %d %d]", pos.x, pos.y, pos.z)); } if (object->getPos() == pos) { KConsole::printf ("WARNING KikiWorld::objectWillMoveToPos equal pos [%d %d %d]", pos.x, pos.y, pos.z); return; } if (cell) { KikiObject * objectAtNewPos = cell->getOccupant(); if (objectAtNewPos) { if (objectAtNewPos->getClassId() >= KikiTmpObject::classId()) { KikiTmpObject * tmpObject = (KikiTmpObject*)objectAtNewPos; if (tmpObject->time < 0 && -tmpObject->time <= duration) { // temporary object at new pos will vanish before object will arrive -> delete it delete tmpObject; } else { KConsole::printError (kStringPrintf("KikiWorld::objectWillMoveToPos timing conflict at pos [%d %d %d]", pos.x, pos.y, pos.z)); KConsole::printError (kStringPrintf("KikiWorld::objectWillMoveToPos %d %s <> %d %s", duration, object->getClassName(), tmpObject->time, tmpObject->object->getClassName())); KConsole::printError (kStringPrintf("KikiWorld::objectWillMoveToPos %s && %s", object->move_action->getName().c_str(), tmpObject->object->move_action->getName().c_str())); } } else { KConsole::printError (kStringPrintf("KikiWorld::objectWillMoveToPos pos [%d %d %d] already occupied", pos.x, pos.y, pos.z)); } } } unsetObject (object); // remove object from cell grid KikiTmpObject * tmpObject = new KikiTmpObject(object); // insert temporary objects at new pos tmpObject->setPosition(pos); tmpObject->time = +duration; addObjectAtPos(tmpObject, pos); tmpObject = new KikiTmpObject(object); // insert temporary objects at old pos tmpObject->setPosition(object->getPosition()); tmpObject->time = -duration; addObjectAtPos(tmpObject, object->getPos()); } // -------------------------------------------------------------------------------------------------------- void KikiWorld::updateStatus () { glClearColor(colors[KikiWorld_base_color][R], colors[KikiWorld_base_color][G], colors[KikiWorld_base_color][B], colors[KikiWorld_base_color][A]); while (moved_objects.empty() == false) { KikiObject * movedObject = moved_objects.back(); KikiPos pos(movedObject->position); if (isInvalidPos(pos)) { KConsole::printError ("KikiWorld::updateStatus invalid new pos"); return; } KikiTmpObject * tmpObject; tmpObject = (KikiTmpObject*)getObjectOfTypeAtPos(KikiTmpObject::classId(), pos); if (tmpObject) { if (tmpObject->object == movedObject) { delete tmpObject; } else { KConsole::printError(kStringPrintf("KikiWorld::updateStatus wrong tmp object " "at pos [%d %d %d]\n", pos.x, pos.y, pos.z)); } } else if (isOccupiedPos(pos)) { KConsole::printError(kStringPrintf("KikiWorld::updateStatus object moved to " "occupied pos [%d %d %d]", pos.x, pos.y, pos.z)); } setObjectAtPos(movedObject, pos); moved_objects.pop_back(); } } // __________________________________________________________________________________________________ void KikiWorld::deleteDisplayList () { if (display_list) { glDeleteLists(display_list, 1); display_list = 0; } } // __________________________________________________________________________________________________ void KikiWorld::setObjectColor (const char * color_name, const KColor & color) { if (strcmp("base", color_name) == 0) { KikiWall::setObjectColor("base", color); colors[0] = color; } else if (strcmp("plate", color_name) == 0) { KikiWall::setObjectColor("plate", color); colors[1] = color; } Controller.world->deleteDisplayList (); } // __________________________________________________________________________________________________ void KikiWorld::setSize ( int x, int y, int z ) { deleteAllObjects(); deleteDisplayList(); cells.clear(); size.x = x; size.y = y; size.z = z; cells.resize(x*y*z, 0); // .......................................... calcuate max distance (for position relative sound) max_distance = kMax(x, kMax(y, z)); // ............................. heuristic of a heuristic :-) } // __________________________________________________________________________________________________ void KikiWorld::init () { int max_id = 0; for (KikiObjectIter iter = objects.begin(); iter != objects.end(); iter++) { (*iter)->setId (++max_id); } if (Controller.player) { Controller.addKeyHandler (Controller.player); Controller.timer_event->addAction (Controller.player->getActionWithId (KikiBot::ACTION_NOOP)); } } // __________________________________________________________________________________________________ KikiPos KikiWorld::getNearestValidPos( const KikiPos & pos ) const { return KikiPos (kMin(size.x-1, kMax(pos.x, 0)), kMin(size.y-1, kMax(pos.y, 0)), kMin(size.z-1, kMax(pos.z, 0))); } // __________________________________________________________________________________________________ bool KikiWorld::isUnoccupiedPos( const KikiPos & pos ) const { if (isInvalidPos(pos)) return false; return (getOccupantAtPos(pos) == NULL); } // __________________________________________________________________________________________________ bool KikiWorld::isOccupiedPos( const KikiPos & pos ) const { return !isUnoccupiedPos(pos); } // __________________________________________________________________________________________________ // returns true, if a pushable object is at pos and may be pushed bool KikiWorld::mayObjectPushToPos ( KikiObject * object, const KikiPos & pos, int duration ) { if (isInvalidPos (pos)) return false; KVector direction = pos - object->getPos(); // direction from object to pushable object if (isInvalidPos (pos + direction)) return false; KikiObject * objectAtNewPos = getOccupantAtPos (pos + direction); if (objectAtNewPos) { if (objectAtNewPos->getClassId() >= KikiTmpObject::classId()) { KikiTmpObject * tmpObject = (KikiTmpObject*)objectAtNewPos; if (tmpObject->time < 0 && -tmpObject->time <= duration) { // temporary object at new pos will vanish before object will arrive -> delete it delete tmpObject; } else return false; } else return false; } KikiObject * pushableObject = getOccupantAtPos (pos); if (pushableObject && pushableObject->getClassId() >= KikiPushable::classId() && pushableObject->getClassId() != KikiMotorGear::classId()) // bad { ((KikiPushable*)pushableObject)->pushedByObjectInDirection (object, direction, duration); return true; } return false; } // -------------------------------------------------------------------------------------------------------- void KikiWorld::reinit () { for (std::vector::iterator iter = objects.begin(); iter != objects.end(); ++iter) { if ((*iter)->getClassId() >= KikiLight::classId()) { ((KikiLight*)*iter)->initialize (); } } if (display_list) { glDeleteLists (display_list, 1); display_list = 0; } initializeTextures (); KikiSpikes::initialize (); KikiText::reinit (); } // __________________________________________________________________________________________________ void KikiWorld::initializeTextures () { unsigned char imageBuffer[64*64]; texture_ids.resize (1); for (int x = 0; x < 32; x++) { for (int y = 0; y < 32; y++) { float value = kMax(1.0-sqrt(double(x*x+y*y))/32.0, 0.0); unsigned char cvalue = (unsigned char)(value * value * 255); imageBuffer[(32+x)*64+(32+y)] = cvalue; imageBuffer[(31-x)*64+(31-y)] = cvalue; imageBuffer[(32+x)*64+(31-y)] = cvalue; imageBuffer[(31-x)*64+(32+y)] = cvalue; } } glGenTextures (1, &texture_ids[TEXTURE_GRADIENT]); glBindTexture (GL_TEXTURE_2D, texture_ids[TEXTURE_GRADIENT]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 64, 64, 0, GL_ALPHA, GL_UNSIGNED_BYTE, imageBuffer); } // -------------------------------------------------------------------------------------------------------- const KPickable * KikiWorld::getPickableWithId ( int pid ) const { for (KikiObjectList::const_iterator iter = objects.begin(); iter != objects.end(); iter++) { if ((*iter)->getClassId() >= KPickable::classId() && ((KPickable*)*iter)->getId() == pid) { return ((KPickable *)*iter); } } return NULL; } // -------------------------------------------------------------------------------------------------------- KVector KikiWorld::getInsideWallPosWithDelta ( const KVector & pos, float delta ) { static KVector normals[6] = { KVector ( 1,0,0), KVector (0, 1,0), KVector (0,0, 1), KVector (-1,0,0), KVector (0,-1,0), KVector (0,0,-1) }; KVector insidePos (pos); for (int w = 0; w < 6; w++) { KVector planePos (-0.5, -0.5, -0.5); if (w >= 3) planePos += (KVector)size; float f = kRayPlaneIntersectionFactor (pos, -normals[w], planePos, normals[w]); if (f < delta) { insidePos += KVector((delta-f)*normals[w]); } } return insidePos; } // -------------------------------------------------------------------------------------------------------- /* returns the distance to the next wall (positive or negative) */ float KikiWorld::getWallDistanceForPos ( const KVector & pos ) { static KVector normals[6] = { KVector ( 1,0,0), KVector (0, 1,0), KVector (0,0, 1), KVector (-1,0,0), KVector (0,-1,0), KVector (0,0,-1) }; float min_f = 10000; for (int w = 0; w < 6; w++) { KVector planePos (-0.5, -0.5, -0.5); if (w >= 3) planePos += (KVector)size; float f = kRayPlaneIntersectionFactor (pos, -normals[w], planePos, normals[w]); min_f = kAbsMin(min_f, f); } return min_f; } // -------------------------------------------------------------------------------------------------------- /* returns the distace to the next wall in direction rayDirection from rayPos (positive values only) */ float KikiWorld::getWallDistanceForRay ( const KVector & rayPos, const KVector & rayDirection ) { static KVector normals[6] = { KVector ( 1,0,0), KVector (0, 1,0), KVector (0,0, 1), KVector (-1,0,0), KVector (0,-1,0), KVector (0,0,-1) }; float min_f = 10000; for (int w = 0; w < 6; w++) { KVector planePos (-0.5, -0.5, -0.5); if (w >= 3) planePos += (KVector)size; float f = kRayPlaneIntersectionFactor (rayPos, rayDirection, planePos, normals[w]); if (f >= 0.0 && f < min_f) min_f = f; } return min_f; } // -------------------------------------------------------------------------------------------------------- void KikiWorld::displayLights () { for (KikiLightIter light = lights.begin(); light != lights.end(); light++) { (*light)->display(); } } // -------------------------------------------------------------------------------------------------------- void KikiWorld::displayDebug () { glDisable (GL_LIGHTING); glBegin(GL_LINES); for (std::vector< std::pair >::iterator edge = debug_edges.begin(); edge != debug_edges.end(); edge++) { edge->second.glColor(); edge->first.glVertex(); edge++; edge->second.glColor(); edge->first.glVertex(); } glEnd(); if (edit_mode && debug_camera) { glPushMatrix(); player_projection->glMultMatrix(); glColor3f (1, 1, 1); GLfloat zf = player_projection->getZFar() / 10.0; GLfloat zn = player_projection->getZNear(); GLfloat sinus = sin (DEG2RAD (player_projection->getFov()/2.0)); GLfloat cosinus = cos (DEG2RAD (player_projection->getFov()/2.0)); GLfloat ar = player_projection->getCurrentAspectRatio(); GLfloat zback = -cosinus * zf; GLfloat zfront = -cosinus * zn; glBegin(GL_LINES); glVertex3f(0.0, 0.0, -1.0); glVertex3f(0.0, 0.0, zback); glVertex3f(sinus * ar * zn, -sinus * zn, zfront); glVertex3f(sinus * ar * zf, -sinus * zf, zback); glVertex3f(-sinus * ar * zn, sinus * zn, zfront); glVertex3f(-sinus * ar * zf, sinus * zf, zback); glVertex3f(-sinus * ar * zn, -sinus * zn, zfront); glVertex3f(-sinus * ar * zf, -sinus * zf, zback); glEnd(); glBegin(GL_LINE_STRIP); glVertex3f(sinus * ar * zn, sinus * zn, zfront); glVertex3f(sinus * ar * zn, -sinus * zn, zfront); glVertex3f(-sinus * ar * zn, -sinus * zn, zfront); glVertex3f(-sinus * ar * zn, sinus * zn, zfront); glVertex3f(sinus * ar * zn, sinus * zn, zfront); glVertex3f(sinus * ar * zf, sinus * zf, zback); glVertex3f(sinus * ar * zf, -sinus * zf, zback); glVertex3f(-sinus * ar * zf, -sinus * zf, zback); glVertex3f(-sinus * ar * zf, sinus * zf, zback); glVertex3f(sinus * ar * zf, sinus * zf, zback); glEnd(); glPopMatrix(); } glEnable (GL_LIGHTING); if (debug_cells) { for (int x = 0; x < size.x; x++) { for (int y = 0; y < size.y; y++) { for (int z = 0; z < size.z; z++) { KikiCell * cell = getCellAtPos (KikiPos (x, y, z)); if (cell) { glPushMatrix (); glTranslatef (x, y, z); glColor4f (0.5, 0.5, 0.5, 0.5); glLineWidth (cell->objects.size()); kDisplayWireCube (1.0 + 0.1 * cell->objects.size()); glPopMatrix (); } } } } } } // -------------------------------------------------------------------------------------------------------- void KikiWorld::debugLine ( const KVector & p1, const KVector & p2, const KColor & c ) { debug_edges.push_back (std::pair (p1, c)); debug_edges.push_back (std::pair (p2, c)); } // -------------------------------------------------------------------------------------------------------- void KikiWorld::displayPickables ( int mode ) { KProjection * p = projection; if (debug_camera) p = player_projection; KVector look_vector (p->getZVector()); KVector projection_position (p->getPosition() + 0.2 * look_vector); float distance; std::multimap sort_map; float half_sqrt_3 = -sqrt(3.0)/2.0; float half_fov_rad = DEG2RAD (p->getFov()/2.0); float ydir = sin (half_fov_rad - M_PI_2); float ydirz = cos (half_fov_rad - M_PI_2); float ar = p->getCurrentAspectRatio(); float xangle = atan (sin (half_fov_rad) * ar / cos(half_fov_rad)) - M_PI_2; float xdir = sin (xangle); float xdirz = cos (xangle); KVector view_volume_normals[4] = { ((*p) * KVector (0, ydir,-ydirz)), ((*p) * KVector (0,-ydir,-ydirz)), ((*p) * KVector (xdir,0,-xdirz)), ((*p) * KVector (-xdir,0,-xdirz)) }; for (KikiObjectIter iter = objects.begin(); iter != objects.end(); iter++) { KVector eye_to_object = (*iter)->current_position - projection_position; bool outside = false; for (int i = 0; i < 4; i++) { if (view_volume_normals[i] * eye_to_object < half_sqrt_3) { outside = true; break; } } if (outside) continue; distance = eye_to_object[X] * eye_to_object[X] + eye_to_object[Y] * eye_to_object[Y] + eye_to_object[Z] * eye_to_object[Z]; sort_map.insert (std::pair (distance, *iter)); } displayLights (); for (std::multimap::reverse_iterator it = sort_map.rbegin(); it != sort_map.rend(); it++) { (*it).second->display(); } #ifdef DEBUG displayDebug (); #endif } // __________________________________________________________________________________________________ void KikiWorld::displayWall ( int width, int height ) { float l = raster_size/2.0; float t = 1.0 - l; if (flags[DISPLAY_RASTER] == false) { l = 0.0; t = 1.0; } glNormal3f(0.0, 0.0, 1.0); for (int w = 0; w < width; w++) { for (int h = 0; h < height; h++) { glRectf (w+l, h+l, w+t, h+t); } } } // __________________________________________________________________________________________________ KProjection * KikiWorld::getProjection () { if (projection == NULL) { switch (camera_mode) { case CAMERA_INSIDE: projection = Controller.player->getProjection(); break; case CAMERA_BEHIND: projection = Controller.player->getBehindProjection(); break; case CAMERA_FOLLOW: projection = Controller.player->getFollowProjection(); break; } } return projection; } // __________________________________________________________________________________________________ void KikiWorld::display ( int mode ) { switch (camera_mode) { case CAMERA_INSIDE: projection = Controller.player->getProjection(); break; case CAMERA_BEHIND: projection = Controller.player->getBehindProjection(); break; case CAMERA_FOLLOW: projection = Controller.player->getFollowProjection(); break; } player_projection = (KLightingProjection*) projection; debug_edges.clear(); if (edit_mode) { projection = edit_projection; } projection->initProjection(); if (display_list) { glCallList(display_list); } else { if ((display_list = glGenLists(1))) { glNewList(display_list, GL_COMPILE_AND_EXECUTE); } glPushAttrib(GL_ENABLE_BIT); glPushMatrix(); if (flags[DISPLAY_BORDER]) { glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); glDisable(GL_ALPHA_TEST); glDisable(GL_NORMALIZE); colors[KikiWorld_plate_color].glColor(); glTranslatef(-0.5, -0.5, -0.5); displayWall(size.x, size.y); // xy+z glRotatef(180.0, 0.0, 1.0, 0.0); glTranslatef(-size.x, 0.0, -size.z); displayWall(size.x, size.y); // xy-z glRotatef(90.0, 1.0, 0.0, 0.0); // xz-y glTranslatef(0.0, 0.0, -size.y); displayWall(size.x, size.z); glRotatef(180.0, 0.0, 1.0, 0.0); // xz+y glTranslatef(-size.x, 0.0, -size.y); displayWall(size.x, size.z); glRotatef(-90.0, 0.0, 1.0, 0.0); // yz+x glTranslatef(0.0, 0.0, -size.x); displayWall(size.y, size.z); glRotatef(180.0, 1.0, 0.0, 0.0); // yz-x glTranslatef(0.0, -size.z, -size.x); displayWall(size.y, size.z); } glPopMatrix(); glPopAttrib(); if (display_list) { glEndList(); } } displayPickables(mode); } kiki/src/world/KikiWorld.h0000666000000000000000000001732707644706114014520 0ustar rootroot/* * KikiWorld.h */ #ifndef __KikiWorld #define __KikiWorld #include "KikiPos.h" #include "KikiCell.h" #include "KikiLight.h" #include "KikiController.h" #include class KikiAction; class KikiBot; class KLightingProjection; // __________________________________________________________________________________________________ class KikiWorld : public KPickHandler { public: // ........................................................................ PUBLIC // ........................................................................ enums enum { DISPLAY_BORDER = KDL_PICKHANDLER_FLAG_END, DISPLAY_RASTER, DISPLAY_DOTS, DISPLAY_SHADOWS, WORLD_END }; enum { CAMERA_INSIDE, CAMERA_BEHIND, CAMERA_FOLLOW }; enum { TEXTURE_GRADIENT }; // ........................................................................ init & display void init (); void reinit (); void initializeTextures (); void displayWall ( int width, int height ); void display ( int mode ); void displayPickables ( int mode ); void deleteDisplayList (); // ........................................................................ camera & projection void changeCameraMode (); int getCameraMode () const { return camera_mode; } void setCameraMode ( int mode ); void setEditMode ( bool editMode ); bool getEditMode () { return edit_mode; } KProjection * getProjection (); GLuint getTextureId ( int tenum ) { return texture_ids[tenum]; } // ........................................................................ world size void setSize (int x, int y, int z = 0); KikiSize getSize () const { return size; } float getMaxDistance () const { return max_distance; } void setName ( const std::string & n ) { name = n; } std::string getName () const { return name; } // ........................................................................ pickhandler void picked (); bool shouldPick ( const KPickable * ); void moved ( const KMouseEvent & mouseEvent ); const KPickable * getPickableWithId ( int ) const; void focusOnPickedPickable ( bool zoom = false ); // ........................................................................ object handling void addObject ( KikiObject * object ); void deleteObject ( KikiObject * object ); void addObjectAtPos ( KikiObject * object, const KikiPos & pos ); void setObjectAtPos ( KikiObject * object, const KikiPos & pos ); void unsetObject ( KikiObject * object ); void removeObject ( KikiObject * object ); void deleteAllObjects (); void deleteObjectsWithClassName ( const std::string & className ); KikiObject* getObjectWithName ( const std::string & objectName ); bool moveObjectToPos ( KikiObject * object, const KikiPos & pos ); bool mayObjectPushToPos ( KikiObject * object, const KikiPos & pos, int duration ); void objectWillMoveToPos ( KikiObject * object, const KikiPos & pos, int duration ); void objectMovedFromPos ( KikiObject * object, const KikiPos & pos ); // ........................................................................ pos accessors KikiBot * getBotAtPos ( const KikiPos & pos ) const; KikiObject * getOccupantAtPos ( const KikiPos & pos ) const; KikiObject * getRealOccupantAtPos ( const KikiPos & pos ) const; KikiObject * getObjectOfTypeAtPos ( const KClassId & classId, const KikiPos & pos ) const; KikiObjectList getObjectsOfTypeAtPos ( const KClassId & classId, const KikiPos & pos ) const; KikiObjectList getObjectsOfType ( const KClassId & classId ) const; void setDisplayRaster ( bool b ) { flags[DISPLAY_RASTER] = b; deleteDisplayList();} void setDisplayBorder ( bool b ) { flags[DISPLAY_BORDER] = b; deleteDisplayList();} void setDisplayShadows ( bool b ) { flags[DISPLAY_SHADOWS] = b; } void setRasterSize ( float s ) { raster_size = s; deleteDisplayList(); } // ........................................................................ position helpers KikiPos getNearestValidPos ( const KikiPos & pos ) const; float getWallDistanceForRay ( const KVector & rayPos, const KVector & rayDirection ); KVector getInsideWallPosWithDelta ( const KVector & pos, float delta ); float getWallDistanceForPos ( const KVector & pos ); bool isInvalidPos ( const KikiPos & pos ) const { return !isValidPos(pos); } bool isValidPos ( const KikiPos & pos ) const { return (pos.x >= 0 && pos.x < size.x && pos.y >= 0 && pos.y < size.y && pos.z >= 0 && pos.z < size.z); } bool isUnoccupiedPos ( const KikiPos & pos ) const; bool isOccupiedPos ( const KikiPos & pos ) const; int posToIndex ( const KikiPos & pos ) const { return (pos.x * size.z * size.y + pos.y * size.z + pos.z); } KikiPos indexToPos ( int index ) const { int lsize = size.z * size.y; int lrest = index % lsize; return KikiPos (index / lsize, lrest / size.z, lrest % size.z); } // ........................................................................ debugging void debugLine ( const KVector & p1, const KVector & p2, const KColor & c = KColor()); protected: // ..................................................................... PROTECTED INTROSPECTION KIKI_COLOR_HEADER friend class KikiController; unsigned int display_list; KikiObjectList objects; KikiLightList lights; KikiCellList cells; // the world KikiSize size; // it's size std::vector texture_ids; std::string name; float max_distance; // maximum distance in this world (for sound) float raster_size; // distance between wall plates KPosition deltas; // drag deltas since activating KVector drag_start_pos; // dragged items start position KikiObjectList moved_objects; // objects that moved (resolved in update status) KLightingProjection * edit_projection; KLightingProjection * player_projection; bool edit_mode; bool debug_camera; bool debug_cells; int camera_mode; // inside, behind, follow or preview // ........................................................................ (con/de)struction KikiWorld (); ~KikiWorld (); // ........................................................................ display, lights & shadows std::vector< std::pair > debug_edges; std::vector< std::vector > shadow_faces; void displayDebug (); void displayLights (); void displayShadows (); void shadowsForLight ( KikiLight * light ); void calculateShadows(); void updateStatus (); // replaces temporary objects with moved objects KikiCell * getCellAtPos ( const KikiPos & pos ) const; }; #endif kiki/uDevGame Readme.txt0000666000000000000000000000142007644705544014137 0ustar rootrootuDevGame The Macintosh Game Programming Contest This program was originally entered into a Macintosh game programming contest called uDevGame held by iDevGames.com. As per the conditions of entry into the contest, all contestants were required to provide the source code of their entries which would later be made public in accordance with their choice of a limited number of licensing arrangements. To see the source code for other entries or for further information on the contest which is held annually, please visit: http://www.idevgames.com/ A wide range of other Macintosh gaming source code is also made available at the site. Questions concerning this package should be addressed to the original developer. For further assistance, please contact: editor@idevgames.com kiki/win32-vc/0000777000000000000000000000000010336064720012060 5ustar rootrootkiki/win32-vc/installer/0000777000000000000000000000000010344103516014051 5ustar rootrootkiki/win32-vc/installer/kiki.ico0000666000000000000000000001006610320462535015502 0ustar rootrooth&  ( %02#)18IE-=-0XW <  78+:J5$foI +W+ FPEST: h%%\& A)S%df%c \+ ;b00u;M={*d66B\ X#2c00yAV\:tKEEo$$MK(-j((a$+~tB$;DD}11:1>mqG9l [J8_ <ue44UULLp&&3#CQKD4%AZ }((}##fO-Fx} l-,Rh77QQ;;W!@F;/%2D^ }~##qZ A fok `QD4Ol99FFo**9144'=Fa xseN2 #DULGB5k$GPp8888S**+ +?Id nhYA!6m@<@FMTM @"",7@DC?4226<AB>3&)*( $'$ p??kiki/win32-vc/installer/Output/0000777000000000000000000000000010344102673015354 5ustar rootrootkiki/win32-vc/installer/release.iss0000666000000000000000000000360410344103516016214 0ustar rootroot; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=kiki AppVerName=kiki the nanobot 1.0.2 AppPublisher=monsterkodi AppPublisherURL=http://kiki.sf.net AppSupportURL=http://kiki.sf.net AppUpdatesURL=http://kiki.sf.net DefaultDirName={pf}\kiki DefaultGroupName=kiki AllowNoIcons=yes Compression=lzma SolidCompression=yes SetupIconFile=kiki.ico WizardSmallImageFile=wizard_small.bmp WizardImageFile=wizard.bmp [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "..\..\*.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\..\*.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "..\..\py\*"; DestDir: "{app}\py"; Flags: ignoreversion recursesubdirs Source: "..\..\py_crippled\*"; DestDir: "{app}\py_crippled"; Flags: ignoreversion recursesubdirs Source: "..\..\sound\*"; DestDir: "{app}\sound"; Flags: ignoreversion recursesubdirs [INI] Filename: "{app}\kiki.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://kiki.sf.net" [Icons] Name: "{group}\kiki"; Filename: "{app}\kiki.exe"; WorkingDir: "{app}" Name: "{group}\{cm:ProgramOnTheWeb,kiki}"; Filename: "{app}\kiki.url" Name: "{group}\{cm:UninstallProgram,kiki}"; Filename: "{uninstallexe}" Name: "{userdesktop}\kiki"; Filename: "{app}\kiki.exe"; Tasks: desktopicon; WorkingDir: "{app}" Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\kiki"; Filename: "{app}\kiki.exe"; Tasks: quicklaunchicon; WorkingDir: "{app}" [Run] Filename: "{app}\kiki.exe"; Description: "{cm:LaunchProgram,kiki}"; Flags: nowait postinstall skipifsilent [UninstallDelete] Type: filesandordirs; Name: "{app}" kiki/win32-vc/installer/wizard.bmp0000666000000000000000000045566010334753370016101 0ustar rootrootBM[6(:  77M7$$<$$<$$<$$<$$<$$<$$<$$8$$3$$<$$;$$;66BGGJMMLKKKKKKTTT^^^ccccaa_``GVV)FF$CC$EE$EE$EE$EE$EE$EE$EE$EE$EE$EE$FF$<<$33$CC$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$EE$@@%>>2LL=TTaddhffffffffffffffffffff[[[JJJJJJKKKKKKKKKMLK@CH)6C$3B$3C$3C$4C$4E$4E$4E$4E$4E$4F$6F$6F$6G$6G$6G$6H$4G$6G$7H$7J$7J$7J$7J$7K$$1>$1>$1>$1=$/=$/=$.;(3>acc\\\KKKGGG[[[$$=********("*)))*--4<<;<<<999<<(>(>(@(@)@)@)A(=#3"3"3"2"2"1"1 1 .$6,E#6----,,,)"-QRRYWWFFF999KKK$$=,*******(#*))))(/779==<;;;999AAAOOOTTTVUUTTT3EE443344444444444444$$''444444444444444444444444666666666666666666666666666666666666666666666644*AAVVVYWWWWWWWWWWWWWWWWWWWWWWWWWWYYYWWWBBB999;;;;;;(4 2"2"3"3#3#4#4#4#4#6#6$6$6$7$7$7$8$8$7$7%9%9%8'<.J-G';';'<'<'<'='=(=(=(>(>(>(>(@)@)@)@)A(=#3"3"3"2"2"2"1 1 1 .$6'<-.---,,)"-QQRVVVTTT===JJJ$$=,,******(#,*))))),,,4;;;<<<999<<(>(>(@(@)@)@)A)A(=#3"3"3"3"2"2"1"1 1 /"2.J$8----,,*"-QQRVVVVVVKKKJJJ$$=,,,*****(#,**)))))(.448==<;;;999AAAOOOTTTVUUTRR3EE66444466-- ..6644444444444444444444444444444444444444444444446666666666666666666644;;VVVYWWVVVVVVVVVVVVVVVVVVVVVVVVWWWUUUBBB888;;;;;;<<<>>>(4 2"3"3#3#4#4#4#4#6#6$6$7$7$7$7$8%8%8$7$7%8(@1P)B%9';'<'<'<'<'=(=(=(=(>(>(>(>(@)@)@)A)A)A(=#4#3#3"3"2"2"2"1 1 /"1%7)A 1,--,,*"-QQRUUUTTTTTTTTT$$=,,,,****(#,***)))))()**399;<<<999;;(>(>(>(@)@)@)A)A)A)A(>#4#3#3"3"3"2"2"1"1 /"1#3#4*C----,*"-PPQUUUTTTTTTccc$$=,,,,,***(#,****))))))(-227==<;;;999AAAMMM>>><999;;"77'44$$334444444444444444444444444444444444444444444444444444444444444444443377CMMZWWUUUUUUUUUUUUUUUVVVVVVVVVWWWUUUBBB888;;;;;;999HHHWWWVVV%1<2#3#3#4#4#4#4#6$6$6$7$7$7$7$8%8%8%8$6';/L(>%9';'<'<'<'<'='=(=(=(>(>(>(>(@(@)@)A)A)A)A)B(>#4#3#3#3"3"2"2"2"1 1"2$6-';%;,--,*"-PPQUUUTTTTTTccc$$=,,,,,,,*(#,*****))))))))**399;<<<999;;;;;;;;;<;;<;;@>>6622334444444466-- 444444444444444444444444444444444444444444444444443377CMMZWWUUUUUUUUUUUUUUUUUUUUUUUUVVVTTTAAA888;;;;;;;;;HHHVVVVVUUUU$1=2#3#3#4#4#4#6#6$6$6$7$7$7$8$8%8%8'9)B'<%;%;';';'<'<'<'<'=(=(=(=(>(>(>(@(@)@)@)A)A)A)A)B(>#4#4#4#3"3"2"2"2"1 1"2$6 . /)A#4,-,*"-PPQUUUTTTRRRaaa$$=,,,,,,,,(#,******)))))))(*--4==<<<<;;;;;;999@@@RQQPRR8EE3322333344..(((866277444444444444444444444444444444444444444444443388JPPYVVUUUUUUUUUUUUUUUUUUUUUUUUVVVOOO===999;;;;;;;;;LLLVVVUUUUUUUUU$1= 2#3#4#4#4#4#6$6$6$7$7$7$8$8%8$7';.J,F)@%9';';'<'<'<'<'=(=(=(=(>(>(>(>(@)@)@)A)A)A)A)B)B(>#4#4#4#3"3"3"2"2"2 1"2$6 . -"1)A /,-* .OOPTTTRRRRRRaaa$$=,,,,,,,,)#,*******)))))))((.668<<;;;;999AAAQQQRRRVTTHMM#<<1133//%''(((666977777(66444444444444444444444444444444444444443333BLLYUUTTTTTTTTTTTTTTTTTTUUUUUUVVVOOO<<<999;;;;;;;;;LLLVVVUUUUUUUUUUUU$1= 2#4#4#4#4#6$6$6$7$7$7$7$8%8$7)@/L)@$7%9';';'<'<'<'<'='=(=(=(>(>(>(>(@)@)@)@)A)A)A)B)B*B(>#4#4#4#4#3"3"2"2"2 1"3$6 . /-"6(@-,*".OOPTTTRRRRRRaaa$$>,,,,,,,,)$,********))))))))(*99;;;;;;;999===JJJQQQTRRQQQ7EE44#(((%%(((666777877977/7733334444444444444444444444444444443344=JJWVVTTTTTTTTTTTTTTTTTTTTTTTTUUUMMM<<<999;;;;;;>>>LLLVVVTTTUUUUUUUUUUUU$1= 2#4#4#4#4#6$6$6$7$7$7$8$8%7)@.H(=%8%;%9';'<'<'<'<'='=(=(=(>(>(>(>(@(@)@)@)A)A)A)B)B*B*B(>#4#4#4#4#3"3"3"2"2"1"2$6 . / .-'<';,,".OOPTTTRRRRRR```$$>-,,,,,,,)$-,********)))))))))889;;;;;;;;;999;;;CCCOOOQQQVUU8;;$$$'''(((777777777777877477 4433333344444444444444444444443344=HHWUUTTTTTTTTTTTTTTTTTTTTTTTTUUUMMM<<<999;;;999>>>PPPUUUTTTTTTTTTTTTTTTTTT$1< 3#4#4#4#6$6$6$7$7$7$7$8$7*A.J'<%8%9%;%9';'<'<'<'<'=(=(=(=(>(>(>(@(@)@)@)A)A)A)B)B*B*B*C(@#6#4#4#4#3#3"3"2"2"1"2$7 . / / ..(= /*".MOORRRQQQQQQ```$$>---,,,,,)$-,,*********))))))*889BBB<<<;;;;;;;;;999>>>MMMCCC(''''''''(((777777777777777877877)663333333333334444444444444444>>PPPUUUTTTTTTTTTTTTTTTTTTTTT$1= 3#4#4#4#6$6$6$7$7$7$7$9,F,G%9%9%9%;';%9'<'<'<'<'=(=(=(=(>(>(>(>(@)@)@)A)A)A)A)B*B*B*B*C)@#6#4#4#4#4#3"3"3"2"1#3$7 . / / .-"2)A,".MOORRRQQQQQQ```$$>----,,,,)$-,,,*********))))))AABQQQJJJ<<<999;;;;;;;;;999,,,%%%''''''(((7778887777777777778779771663333333333333333333344226EEWUURRRRRRRRRRRRRRRRRRRRRRRRTTTLLL<<<;;;;;;;;;<<(>(>(>(@)@)@)@)A)A)A)B)B*B*B*C*C(>#6#4#4#4#4#3#3"3"2"2#3$7 / / / ..-'9$7"-MOORRRQQQQQQ___$$>-----,,,)$-,,,,*********))))*JJKPPPPPPMMMCCC;;;;;;<<<***%%%''''''''')))777888888777777777777777877666'44333333333333333311$<(>(>(>(@(@)@)@)A)A)A)A)B*B*B*B*B-G/L%8#4#4#4#4#4#3"3"2"2#3$7 / / / / ..-'=$4LLLQQQPPPPPP___$$>-------,)$-,,,,,*********))(,KKLOOMMMMOOOPPPKKKBBB...$$$'''''''''''')))77788888888877777777777777777786616644333333333322'==OPPTRRQQQQQQQQQQQQQQQQQQQQQRRRJJJ<<<;;;;;;999===LLLTTTRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR$1= 3#4#6$6$6$7$7$7(@,F(=$7%9%9%9%;';';'<';'<'='=(=(=(>(>(>(>(@(@)@)@)A)A)A)B)B*B*B*B*C.K3T6Y1O$8#4#4#4#4#3"3"3"2#4%7 / 1 / / . .-/1AOOOQPPPPPPPP___$$>--------)$-,,,,,,,********)(,JJKOOOMMMMMMMMMQQQ>>>$$$''''''''''''''')))777888888888888777777777777777777766766$6633333322(==RRRTRRQQQQQQQQQQQQQQQQQQQQQRRRLLL;;;;;;;;;999===OOORRRQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRR$1= 3#6$6$6$7$7$6*C,G%9%7%9%9%9%;';';'<'<';'<'=(=(=(=(>(>(>(@(@)@)@)A)A)A)A)B*B*B*A,F2Q3W3W3V4Y-J"3#4#4#4#4#3"3"2#4%8 / 1 / / / ..,#.7PPPQPPPPPOOO^^^$$@----,,--*$-,,,,,,,,********(,JJKOOOMMMMMMPPPFFF'''%%%''''''''''''((()))777888888888888888777777777777777677766866-663322(>>QQQQPPPPPPPPPPPPPPPPPQQQQQQRRRKKK<<<;;;;;;999@@@MMMRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ$1= 3#6$6$6$6%9,E*B$7%8%9%9%9%9%;';';'<'<';'=(=(=(=(>(>(>(>(@)@)@)A)A)A)A)B)B*B*A.J3U3V3U3U3U3U3V,E#3#4#4#4#3"3"2#4%8"/ 1 1 / / . .- .KKLPPPOOOOOO^^^$$@.-------*%-,,,,,,,,,*******),HHJMMLLLLOOOKKK///###'''''''''''''''((()))777888888888888888777777777777777777677666866344)88PPPRQQPPPPPPPPPPPPPPPPPPPPPQQQKKK<<<;;;;;;999BBBPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ$1= 4$6$6$6$8,E(@$8%8%8%9%9%9%;';';'<'<'<'<'=(=(=(>(>(>(>(@)@)@)@)A)A)A)B)B)A*B/L3V3U3U3U3U3U3U3U4V)B"2#4#4#3#3"2#4%8"/"1 1 / / / .-"/KLLPPOOOOOOO^^^$$@..-----.%#.-,,,,,,,,,*******-HHJMMLLLLMMM444###%%%''''''''''''(((((()))888888888888888888888777777777777777777666666766866>>>LLLQQQPPPPPPPPPPPPPPPQQQKKK<<<;;;;;;999BBBPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQ$1="4$6$6';,G(>#6%8%8%9%9%9%;%;';';'<'<'<'<(=(=(>(>(>(>(@(@)@)@)A)A)A)B)B)A-F2Q3V3U3U3U3U3U3U3U3U3V3U(<"3#4#4#3"3#4%8"1"1 1 1 / / .."/KLLOOOMMMMMM\\\$$@....---.'%---,,,,,,,,,******-HHJMMLOOO===$$$%%%%%%''''''''''''(((((()))888999888888888888888888777777777777777777666666666444777EEEPPPPPPOOOOOOPPPJJJ<<<;;;;;;999BBBPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#/="4$4'=,F';$7%8%8%9%9%9%9%;';';'<'<'<'<'<(=(>(>(>(>(@(@)@)@)A)A)A)A)A)B.J3U3V3U3U3U3U3U3U3U3U3U3U3V3T';"3#4#3"3#4%8"1"1"1 1 / / /."/JKKOOMMMMMMM\\\$$@.....----*-,,,,,,,,,,,,*****-GGHOOMEEE'''$$$%%%'''''''''''''''(((((()))888999999888888888888888888777777777777777777666666666666666>>>LLLPPPPPPJJJ<<<;;;;;;999@@@OOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#1="3)>,E%9$7$8%8%8%9%9%9%;';';'<'<'<'<'='<(=(>(>(>(>(@)@)@)A)A)A)A)A*E1O4U3T3T3T3T3T3T3T3T3T3T3T3T3T4U/L$6#3#4"3#6%8"1"2"1 1 / / /-"1JKKOOMMMMMMM\\\$$@......--*$.--,,,,,,,,,,,****-HHJLLL111###%%%%%%''''''''''''((((((((()))888999999999888888888888888888777777777777777777666666666666444999JJJJJJ<<<;;;;;;999@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPP#1>(>*B%7$7$8%8%8%9%9%9%9%;';';'<'<'<'='=(<(>(>(>(>(@)@)@)A)A)A)@)A-J3T4U3T3T3T3T3T3T3T3T3T3T3T3T3T3T3T4V.L#7#3#3#6%9"1"2"1 1 1 / /.#/HJKMMLLLLMMMYYY$$@.......-*$.----*,,,,,,,,,***-JJK777###%%%%%%%%%''''''''''''((((((((()))888999999999888888888888888888888777777777777777777666666666666444666888999;;;;;;@@@MMMOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPO/=J(>#6$7$8$8%8%9%9%9%9%;';';'<'<'<'='=(=(<(>(>(>(@(@)@)@)A)A)A*C/M3U2T2T2T2T2T2T2T2T2T2T2T2T2T2T2T2T2T2T3V-H#3#2#6%9"1"2"2"1 1 / /.#/HJKMMMKKKEEEMLK$$@........,$.-----,*,,,,,,,,**.889%%$%%%%%%%%%'''''''''''''''((((((((()))888999999999999888888888888888888777777777777777777666666666666666444333666888BBBMMMMMMMMMMMMMMMMMMMMMMMMOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPO)4@"6$7$7$8%8%8%9%9%9%;%;';';'<'<'<'=(=(=(=(>(>(@(@)@)@)A)A)@,G2R2T2T2T2T2T2T2T2T2R2R2R2R2R2R2R2R2R2R2R2R2R2T-H#3$4%9"1"2"2"1 1 1 /.#1HHJCBB===<;9@EM$$A........,$.-------**,,,,,,,**%%'%%$%%%%%%%%%'''''''''''''''((((((((()))888999999999999999888888888888888888777777777777777777666666666666666666444444>>>MMMOOOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOOOOOOOOOOOOOOOOOO#1=#6$7$8%8%8%9%9%9%9%;';';'<'<'<'=(=(=(=(=(>(>(@)@)@)A)@)A/L2R2T2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R3V)A#2%9"2"2"2"1"1 1 / /#/;<<<;989;"-C%6W$$A//......,%/--------,,,,,,,,,%%%$%%%%%%%%%%%%''''''''''''(((((((((((()))888999999999999999999888888888888888888777777777777777777666666666666666444444333777FFFMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"/=#6$7$8%8%8%9%9%9%;';';'<'<'<'='=(=(=(>(=(>(@)@)@)@)@,F1P2T2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2T1P(>%9"2"2"2"2"1 1 / /"/899'1B%G#H$6W$$A///.....,%/.---------,,,,,,(%%$%%%%%%%%%%%%%%%''''''''''''((((((((((((***999999999999999999999999888888888888888888777777777777777777666666666666666444444333666AAAMMMMMMLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"/=#6$8%8%8%9%9%9%9%;';';'<'<'<'=(=(=(>(>(=(@(@)@)@)B.K2R2T2R2R2R2R2R2R2R2R2R2R2R2R2R2R2R2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q3T1O%; 2"3"2"2"1 1 1 /"1(E#J$H$H$6W$$A////....- -...--------,,,,)%%$$$$%%%%%%%%%%%%'''''''''''''''((((((((((((***999;;;999999999999999999888888888888888888888777777777777777777666666666666666444444444333===JJJMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMLLL"/=#7$8%8%8%9%9%9%;';';'<'<'<'=(=(=(>(>(>(=(@)@)>*C1O3R2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2R2R.J.K-J#4"2"2"2"2"1 1 / 1#G$H$H$H$6Y$$A//////..--....--------,,*##%$$$$$$%%%%%%%%%%%%''''''''''''(((((((((((((((***999;;;;;;999999999999999999888888888888888888888777777777777777777666666666666666444444444333777CCCMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"/=#7%8%8%9%9%9%;%;';'<'<'<'<'=(=(=(>(>(>(>(@)A.J2Q2R2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q2Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1R.L-G.K1P2R-J"3"2"2"2"1 1 / 1$G$H$H$J$6Y$$A///////.--.....--------- '%%$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((()))***999;;;;;;;;;999999999999999999888888888888888888777777777777777777666666666666666666444444444333333CCCMMMLLLKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLL"/=#7%8%8%9%9%9%;';';'<'<'<'=(=(=(>(>(>(>'>*A/L2R1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1P1P1Q/P.H-H/M1Q1P1P2Q*B 2"2"2"1"1 / 1$G$J$J$J$6Y$$A////////--......-------(%%$$$$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((()))***999;;;;;;;;;;;;999999999999999999888888888888888888888777777777777777666666666666666666444444444333>>>>>>AAAKKKLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK"/=$7%8%9%9%9%;';';'<'<'<'=(=(=(>(>(>(=(@(=.K2R1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1Q/O.J.J/K1P1P1P1P1P1P2Q*C"1"2"2"1 1 1$H$J$J$J$6Z$$B////////.-........----,%%$$$$$$$$$$%%%%%%%%%%%%''''''''''''(((((((((((())))))***999;;;;;;;;;;;;;;;999999999999999999888888888888888888777777777777777777666666666666666444444444444222---222999GGGKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK"/=$7%9%9%9%9%;';'<'<'<'='=(=(=(>(>(=)B/L,G'=/K1Q1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1Q1P.K,G.K1Q1Q1P1P1P1P1P1P1P2P'< 1"2"1 1 2$H$J$J$K$6Z$$B11//////...........--,##$$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((())))))***999;;;;;;;;;;;;;;;999999999999999999999888888888888888888777777777777777777666666666666666444444444111...333222444CCCKKKJJJJJJJJJJJJJJJJJJJJJJJJ"/=$7%9%9%9%;';';'<'<'<'=(=(=(>(=(>,E1P1Q2Q,F(>/L2Q1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P/M-G-G1O1P1O1O1O1O1O1O1O1O1O1O1P'< 1"1 1 2$H$J$K$K$6Z$$B111/////../..........%%%#$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((())))))***;;;;;;;;;;;;;;;;;;;;;999999999999999999999888888888888888888777777777777777777666666666666666444444111...444444333444@@@JJJKKKJJJJJJJJJJJJJJJJJJ"/=$8%9%9%;%;';'<'<'<'='=(=(>(=)A.J2P1O1O1O2P-G'<-H2P1O1O1O1O1O1O1O1O1O1O1O1O1O1O1O1O1O1P1O-H,F/L1P1O1O1O1O1O1O1O1O1O1O1O1O1P1O$7"1"1 2$H$K$K$K$6Z$$B1111////..///....../($$"$$$$$$$$$$$$%%%%%%%%%%%%'''''''''''''''((((((((()))))))))***;;;<<<;;;;;;;;;;;;;;;;;;999999999999999999999888888888888888888777777777777777666666666666666444444111...444444333333222777FFFKKKJJJJJJJJJJJJJJJ"/=$8%9%9%;';';'<'<'<'=(=(=(=)B/M1P1O1O1O1O1O2P-H(>-G1O1O1O1O1O1O1O1O1O1O1O1O1O1O1O1P1P.K,G-J/P/P/O/O/O/O/O/O/O/O/O/O/O/O/O/O/P-J#3"/"2$J$K$K$K$7[$$B111111//..////.....,###$$#$$$$$$$$$$$$%%%%%%%%%%%%''''''''''''(((((((((((()))))))))***;;;<<<;;;;;;;;;;;;;;;;;;;;;999999999999999999999888888888888888888777777777777777666666666666666444111...444444444333333333444@@@HHHJJJHHHHHHHHH /=$8%9%;';';'<'<'<'=(=(<(=*E/O1P/O/O/O/O/O/O/O1P.L(=)@1O/O/O/O/O/O/O/O/O/O/O/O/O/P.L-G,F.L/O/O/O/O/M/M/M/M/M/M/M/M/M/M/M/M/M/M1O,F"1 2$J$K$K%L$7[$$B1111111/../////.../-###$$#$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((()))))))))***;;;<<<<<<;;;;;;;;;;;;;;;;;;;;;999999999999999999888888888888888888777777777777777777666666666666444111...444444444444333333333222888FFFJJJHHHHHH /=$8%;%;';';'<'<'='='<)@.J/O/M/M/M/M/M/M/M/M/M/M/O.K(>)A/M/O/M/M/M/M/M/M/M/M/M.M-H,E.J/O/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M1O)@"2$J$K%L%L$7[$$=/1111111..//////.. )443###$$$$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((()))))))))***;;;<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;999999999999999999888888888888888888777777777777777666666666666666111...444444444444333333333333222444AAAHHHHHH /=$9%;';';'<'<'<'<'>,C/L/O/M/M/M/M/M/M/M/M/M/M/M/M/O/M)A(=.K1O/M/M/M/M/M/O/O.K-F-H/O/O/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M1O(=#H%L%L%L$7[$$<**-/1111/.///////)''$333###$$$$$$$$$$$$%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))***;;;<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;999999999999999999888888888888888888777777777777777666666666666222///444444444444444333333333333222222998EEE /=$9%;';'<'<'<'<(A.J/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M,G'=,F1O/M/M/M/M.H,E-H/K/M/M/M/M/M/M/M/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L1L/L)K%K%L%L%L$7\$$<****-/11/./////1,###%%%333$$$$$$$$$$$$$$$%%%%%%%%%%%%''''''''''''(((((((((((()))))))))))),,,;;;<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;999999999999999999888888888888888777777777777777666666666666222///444444444444444333333333333333333111644 -8$<';';'<'<'<,F/L/M/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L1M-G%;,E1O1M.K,E-E/J/M/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L.L(L%K$L%L%L%L%M$7\$$<******,///1////. $##"%%%333$$$$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''(((((((((((()))))))))))),,,;;;<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;999999999999999999888888888888888777777777777777666666666222///444444444444444444333333333333333222222222%-6';%<';'<,F/M.L.L.L.L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/M-J(=*B-G,F-J/M/M/L/L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L/L.L)L%L#K%L%L%L%L%M%M$7\$$<*******,(/11///%##"###%%%333$$$$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''((((((((())))))))))))))),,,<<<<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999999888888888888888777777777777777666666666222///444444444444444444444333333333333333222222422-13*9(A-H.L.K.K.K.K.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L-H';'<.K/M.L.L.L.L.L.L.L.L.L.K.K.K.K.K.K.K.K.K.K.K.K.K/K.L(E#C$L$K%L%L%L%L%M%M%M$7^$$;)*******$,.111)## ######%%%444$$$$$$$$$$$$%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))***,,,<<<===<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999999888888888888888777777777777777666666222///444444444444444444444333333333333333333222222322221$/<.K.L.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K-F,F.J)@(=-H.L.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K,K'L@ @%L%L%L%L%L%L%M%O(T$9d$$;))))**,""****.,""###"######%%%444$$$$$$$$$$$$%%%%%%%%%%%%''''''''''''(((((((((((())))))))))))***,,,<<<======<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999999888888888888777777777777777666666222///666666444444444444444444333333333333333222222222222321*17.F.L.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.L.L,G*C-G.K.K.K)B';-H/L.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K/K/K,K%J$J$L"A"A%M%L%L%L%L%O(T(T'R$7^$$;))))))')*****###"""#######%%%444$$$$$$$$$%%%%%%%%%%%%%%%''''''''''''((((((((())))))))))))******,,,<<<=========<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777777777777666222///666666666444444444444444444333333333333333222222222222321.13/A.K.J.J.J.J.J.J.J.J.J.J.J.J.J.J.K.K.K-H,C,E-J.K.K.K.K/L*C';,F/K.K.K.K.K.J.J.J.J.J.J.J.J.J/J/J,J'J#J$K$K$L"A"A%M%L%L%O(U(T'Q%P%O$7^$$;))))))'*))**%##""""#########%%%444$$$$$$$$$%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))******,,,<<<============<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888888777777777777777222///66666666644444444444444444433333333333333333322222222222222121/$/;.H-K.J.J.J.J.J.J.J.J.J.J.J.J.J.J*C*C-G.J.J.J.J.J.J.J.K,E';*C.K.J.J.J.J.J.J.J.J.J.J.J.J,J'J$J$J$K$K$K$L"A"A%L%M'T'T'Q%O%O%O%O$7^$$;))))*" *))))%"""""""""#########%%%444$$$$$$$$$%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))******,,,<<<===============<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777777777777222///66666666666644444444444444444433333333333333322222222222222211131/,/4.A-J-J-J-J-J-J-J-J-J-J-J-H,F*E,F-J-J-J-J-J-J-J-J-J-J-K,G'<(@-J-J-J-J-J-J-J-J-J-J,J(H$J$J$J$K$K$K$K%M"A#B'R'R'Q%M%M%O%O%O'O$8_$$9(())%)))))'##""""""""""#########'''444$$$$$$$$$%%%%%%%%%%%%''''''''''''((((((((())))))))))))*********,,,<<<===============<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;99999999999999988888888888888877777777777733311166666666666666644444444444444444433333333333333322222222222222211121//12-G-H-H-H-H-H-H-H-H-J,F*B*E-J-H-H-H-H-H-H-H-H-H-H-H-H-J-H(='<-H-J-H-H-H-H-H,H'H$H$H$J$J$K$K$K$K$K'P$H#C'Q%M%M%O%O%O%O'P'P$8_$$9((('%*)))(###"""""""############'''444$$$$$$%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))*********,,,<<<==================<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888888888777777777333111666666666666666444444444444444444444333333333333333222222222222111111.12-G-H-H-H-H-H-H-H,G*C*B,G-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H(>%9,F-H-H-H,H'H$H$H$J$J$J$K$K$K$K%M'Q'R$H%K%M%M%O%O%O%O'P'P'P$8_$$9((( )((()### """""""""############'''666$$$$$$%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))*********,,,========================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777777333111666666666666666666444444444444444444333333333333333222222222222222211.12-F-G-G-G-G-G-G,C*A,E-H-G-G-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H.H)A%9,G-H'G$H$H$H$J$J$J$J$K$K$M'P'P%M%M"B"C%O%O%O%O%O'P'P'P'P$8_$$9(("((((($"" """"""""""""############'''666$$$$$$%%%%%%%%%%%%''''''''''''((((((((())))))))))))************,,,===>>>=====================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777333111666666666666666666666444444444444444444333333333333333222222222222211.12,F-G-G-G-G-E)A*C-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G-G,H*C#F#G$H$H$H$J$J$J$J$J$M%O'P%M%L%L%O"C"B%P%O%O%O'P'P'P'P'P$8`$$8(%$)(((% """"""""""""############'''666$$$$$$%%%%%%%%%%%%''''''''''''((((((((())))))))))))************,,,===>>>>>>==================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777333111777777666666666666666444444444444444444444333333333333333222222222222112.E*G,G,F*B)A*F,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G*G.G'4C/6B#G#H$H$H$J$J$J$J$L%O%O%M%L%L%L%M%O"C"C%P%O%O'P'P'P'P'P'Q$8`$$=) ('(('" """""""""""""############'''666$$$$$$%%%%%%%%%%%%''''''''''''((((((((())))))))))))************---===>>>>>>>>>==================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777333111777777666666666666666666444444444444444444333333333333333222222222222222<>>#3C-E)A*C,G,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F*G,G#3B<=>BA>37A$H$H$H$H$J$J%K%O%P$L$K%L%L%L%M%M%O"C"C%P%O'P'P'P'P'Q'Q'Q$8`$$9# *)'''#"" """""""""""""""############'''666$$$$$$%%%%%%%%%%%%'''''''''(((((((((((())))))))))))************,,,===>>>>>>>>>>>>==================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888888777333111777777777666666666666666666444444444444444444333333333333333222222222222>==A@>7;>/E*G,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F-F"2C7<@A@>@>=@@=27A$H$H$H$H%L%M%O%M$K$K%L%L%L%M%M%M%P"E"C%P'P'P'P'P'Q'Q'Q'Q$8a$$6%(),-$"" """""""""""""""#########$$$'''666$$$%%%%%%%%%%%%''''''''''''((((((((())))))))))))***************///<<<>>>>>>>>>>>>==================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888333111777777777777666666666666666444444444444444444444333333333333222222222222;;;===@@=<==(4@-E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,F,F*F,F'4B9<=@>=@>=======@>=16A$H$H%K%O%M%L$K$K$K%L%L%L%M%M%M%O%P"C"C'Q'P'P'P'Q'Q'Q'Q'R$8a$$/#'''(' """"""""""""############$$$'''666$$$%%%%%%%%%%%%''''''''''''((((((((())))))))))))************111888777888;;;>>>>>>>>>==================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999999888888888888444111777777777777666666666666666666444444444444444444333333333333222222222222;;;;;;;;;<;;=<;38=.C*E*E,E,E,E,E,E,E,E,E,E,E*E*E*E"2B6;>@>=>>====<<<<<<===@>=16A$K%M%L%K$J$K$K$K%L%L%L%L%M%M%M%O%P#E#E'Q'P'P'Q'Q'Q'Q'R'R$8a$$2'''''#"" """"""""""""#########$$$$$$'''666%%%%%%%%%%%%%%%'''''''''(((((((((((())))))))))))*********111888444999777666777999========================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888444111777777777777777666666666666666666444444444444444444333333333333222222222;;;==;<<;<<;<<;>=<;<=)4A,E*E*E*E*E*E*E*E*E*E)E*E"1B49>@=<>=<<=<<<<<<<<<<<<<<<<=<<69>'L$L$J$J$K$K$K%L%L%L%L%M%M%M%O%O%P#E#F'Q'P'Q'Q'Q'Q'R'R'R$8a$$7%%%%'#"" """"""""""""#########$$$$$$'''666%%%%%%%%%%%%%%%'''''''''((((((((())))))))))))******)))///888222---======;;;777666777;;;==================<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999999999988888888844411177777777777777777766666666666666644444444444444444433333333333322222233299;$$< =88;==;<<;<<<>=<38>.B)C*C*C*C*C*C*C*C/B48===<>=<<<<<<<<<<<<<<<<<<<<<<<<<==<16@$J$J$J$K$K$K%L%L%L%L%M%M%M%O%O%O'Q#F#E'Q'Q'Q'Q'Q'R'R'R'R$9c$$7%%%%%#"" """""""""""""""#########$$$$$$'''777%%%%%%%%%%%%''''''''''''((((((((()))))))))))))))***222888222,,,--->>>@@@>>>===;;;888666777999<<<============<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888444222777777777777777777666666666666666666444444444444444444333333333333222112;<>>//<==;<<;<<<=<;;<<(4@,C*C*C*C)C.B28=<<;=<;<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;<<9/4>$J$J$K$K$K%L%L%L%L%M%M%M%O%O%O'P'Q#F#F'R'Q'Q'Q'R'R'R'R(T$9c$$7%%%%%#"" """""""""""""""#########$$$$$$'''777%%%%%%%%%%%%'''''''''(((((((((((())))))))))))***333888222,,,,,,--->>>@@@@@@>>>>>>>>>;;;777777777999<<<=========<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888444222888777777777777777777666666666666666666444444444444444333333333333332//2;=>@> =66;==;<<;<;;=<;/7=,B)C-A,6=9;;<<;<;;;;;;;;;;;;;;;;;;;;;;;999999;;;;;;<<9/4>$J$K$K$K%L%L%L%L%M%M%M%O%O%O'P'P'Q#F#F'R'Q'Q'R'R'R'R(T(T$9c$$7%%%%%#"" """"""""""""############$$$$$$'''777%%%%%%%%%%%%'''''''''((((((((()))))))))))))))333777...***,,,,,,--->>>@@@@@@>>>>>>>>>>>>>>><<<999777777999<<<===<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999999888444222888888777777777777777777666666666666666444444444444444444333333333332//2<=>@@>=--;==;==;<;;<;948<*4<99;=;9;;9;;;;;;;;;;;;;;;;;;999999999999999;;;;;;<<9/4>$K$K$K%K%L%L%L%M%M%M%M%O%O'O'P'P'Q#F#G'R'Q'R'R'R'R(T(T(T$9c$$6$$%%%#"" """"""""""""#########$$$$$$$$$'''777%%%%%%%%%''''''''''''((((((((())))))))),,,222666...))),,,,,,,,,--->>>@@@@@@@@@>>>>>>>>>>>>>>>>>><<<999777666888;;;<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888444222888888888777777777777777777666666666666666444444444444444333333333333//3<=>@@>==>>@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>======999666444666999<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999444222888888888888777777777777777666666666666666444444444444444444333333443113<=@A@>>>=<""<88;==;;;;888888888888888888888888888999;;;;;;;;;999888888997.3=$K$K%L%L%L%M%M%M%M%O%O%O'P'P'P'Q'R#G#G'T'R'R'R)U)V)W)W)W$;f%%4#$$$$#"" """""""""""""""#########$$$$$$$$$(((888%%%%%%%%%'''''''''(((((((((((()))---666333***)))******,,,,,,,,,--->>>@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>=========999777666666999;;;<<<<<<;;;;;;;;;;;;;;;999999999999999444222888888888888777777777777777777666666666666666444444444444444333333333113<>@AA@>>==<;22;;;;<<;999888888888888888999;;;;;;;;;999777777777777886-2<$K%L%L%L%M%M%M%M%O%O%O'P'P'P'Q'Q'R#G#H'T'R(T)U)W)W)W)W)V$;e<>>@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============;;;777444666888<<<;;;;;;;;;;;;;;;;;;999999999999666222888888888888888777777777777777666666666666666444444444444444333333333113=>@A@@@>>==<;;77;==;;;;777777999;;;;;;999888777777777777777777886-2=%L%L%L%M%M%M%M%O%O%O'P'P'P'Q'Q'Q'R#F$H(U(U(V(V(V(V(V(V(V$9eLLK;;;779''/*%""" """"""""""""#########$$$$$$$$$$$$(((888%%%%%%''''''''''''(((((('''---666111))))))************,,,,,,,,,---@@@@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>==================999888666666888;;;;;;;;;;;;;;;;;;999999999666222888888888888888777777777777777777666666666666666444444444444444333333113=>ABAA@@>==<;;;..;<<;;;;;;;;;;999777666666666777777777777666774,2<%L%L%M%M%M%M%O%O%O'P'P'P'Q'Q'Q'Q(T%M"B'Q(V(U(U(U(U(U(U(U$9dRRR<<<;;9<<;<<;448##(  """"""""""""#########$$$$$$$$$$$$(((888%%%%%%'''''''''(((((('''---666111((()))************,,,,,,,,,,,,...@@@AAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>==================<<<;;;777444444777;;;;;;;;;;;;999999999666222888888888888888888777777777777777666666666666666444444444444444333333114=>ABAA@>>>=<<;999;;;;;;999666666666666666666666666666666774,2<%L%L%M%M%M%O%O%O'P'P'P'P'P'Q(R(T(U(V%O#E'P(V(U(U(U(T(T(T$9ciiiTTTHHHAAA<<<<<<... """"""""""""#########$$$$$$$$$$$$(((888%%%%%%'''''''''((((((---444///)))))))))************,,,,,,,,,,,,...@@@AAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<;;;777444444777;;;;;;;;;999999666222888888888888888888888777777777777777666666666666666444444444444444333114=>BBAAA@>>=<<<;98889<<;;;;;;;888444444666666666666666444663*1<%L%M%M%M%O%O%O'P'P'P'P(Q(R(T(T(T(T(T(U'P#B'M(U(T(T(T(T(T$9ciii[[[\\\ZZZTTTKKK222 """"""""""""#########$$$$$$$$$$$$(((888%%%%%%'''''''''(((111444---((())))))***************,,,,,,,,,,,,...@@@AAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>==================<<<<<<<<<<<<;;;666444444666999999999666333999999888888888888888777777777777777666666666666666444444444444444443114=>BCBAA@>>>=<<;;9224777;;;;;;;;;888444444444444444444444663*1;%M%M%M%O%O%O'O'P'P'Q'Q(R(T(T(R(R(R(R'R'T'Q#C$J'R'R'R'R'R$8ajjjZZZZZZZZZ[[[___<<<""""""""""""############$$$$$$$$$$$$(((888%%%%%%'''''''''111444,,,((()))))))))***************,,,,,,,,,,,,...@@@AAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>==================<<<<<<<<<<<<<<<999777666444666999666333999999888888888888888888777777777777777666666666666666444444444444443113>@BCBAAA@>>=<<<;9224444444999;;;;;;;;;777333333444444444643*/;%M%M%O%O%O'O'P'Q'R'R'R'R'R'R'R'R'R'R'R'R'R'Q"B#F'R'R'Q'Q$8`jjj[[[[[[ZZZZZZ^^^===""""""""""""############$$$$$$$$$$$$(((888%%%%%%'''(((111222***((())))))))))))***************,,,,,,,,,---...@@@AAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;888444333333444999999999888888888888888777777777777777666666666666666444444444444444114>@BCCBAA@@>==<<;9113333333333666999<<<;;;999666222333333432*/;%M$M%O%O'P'Q'Q'Q'Q'Q'Q'Q'Q'Q'P'P'P'P'P'Q'Q'Q'P%J#F%M'R'P$8_jjj[[[[[[[[[ZZZ^^^===""""""""""""#########$$$$$$$$$$$$%%%(((888%%%%%%)))111111((((((((())))))))))))************,,,,,,,,,,,,---...@@@AAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;888444444444666888888888888888888888777777777777777666666666666666444444444664224ABCCBBBAA@@>==<;;113333333222222333777;;;<<<;;;77722222232/).8%M)P)-M(K'Q'Q'P'P'P'P'P'P'P'P'P'P'P'P'P'O'O'P'Q'R$J"@%K'Q$8_jjj[[[[[[[[[[[[___===""""""""""""#########$$$$$$$$$%%%%%%(((888%%%(((222///(((((((((((())))))))))))************,,,,,,,,,,,,---...@@@AAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>==================<<<<<<<<<<<<<<<;;;;;;;;;;;;777444666444444666888888888888888777777777777777666666666666666444444444444226@ACECBBA@@@>==<<;//2222222222222222222333888<<<<<;998442227/1F,/R22T21O,*E#*G'O%P'P'P'P'P'O'O%O%O%O%O%O%O'P'P'O'O%O%P$K"@#G$7^jjj\\\[[[[[[[[[___===""""""""""""#########$$$$$$$$$%%%%%%(((888'''111...'''((((((((())))))))))))***************,,,,,,,,,------...@@@AAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<<<<;;;;;;;;;777333999999666333333444777888888888777777777777777666666666666666444444444226>@CECBBBAA@>>==<;//2222222222222222222111111443;;999A44H22Q32U32R22T11P**E,*B'*E'K%O%O%M%O%O%O%O%O%O%O%O%O%O%M%M%M%M%M%O%K"@$4Ujjj\\\\\\\\\[[[___==="""""""""############$$$$$$$$$%%%%%%(((>>>888---''''''((((((((())))))))))))***************,,,,,,,,,------...AAABBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;777333999999999888444333333444777888777777777777777666666666666666444444444224@ACECCCBAA@>>==<;..111111111111111111111/11211<33J22Q22T22R22R22R22T11P,,E**C,*C**C (G%L%M%M%L%M%M%M%M%M%M%L%L%M%M%M%M%L%L%M%L$3Pjjj\\\\\\\\\\\\___==="""""""""#########$$$$$$$$$$$$%%%%%%***777666''''''(((((((((((())))))))))))************,,,,,,,,,,,,------...AAABBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;777333999999999999999888666333333444777777777777777777666666666666444444444226@ACFEECBAAA@>>=<;--111/111//////11/11211B11M22R22R22R22R22R22R22T22U11P,,E**E**E**C,*B'*C'J%M%L%M%M%L%K%K%K%L%L%L%L%L%L%L%L%K%K$6Zkkk\\\\\\\\\\\\```>>>"""""""""#########$$$$$$$$$$$$%%%)))222333'''''''''(((((((((((())))))))))))************,,,,,,,,,,,,------...AAABBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<;;;;;;777333;;;999999999999999888888666333333444666777777777666666666666666444444226@ACFECCCBAA@>>==;..1//.//-//1//<11F11M11R11R22Q22Q22R22R22R22R22T33U11P,,E**E**E**C**C,*B*)B(G%L$K$K$K$K$K$K$J$J$J$J$K$K$K$J$J$J$6Zkkk^^^^^^\\\\\\```>>>"""""""""#########$$$$$$$$$$$$***...,,,@@@)))''''''(((((((((((())))))))))))************,,,,,,,,,---------...AAABBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>==================<<<<<<<<<<<<;;;777333;;;;;;999999999999999888888888777444333444666777777666666666666666444226@AEFEEECCAAA@>>=;--/11411@11J11Q11R11Q11Q22Q22Q22R22R22R22R22T33T33T22Q,,F,,E,,E**E**C**C**B**B$(C%G$J$J$J$J$J$J$J$J$J$J$K$G$M$Q$V$6ikkk^^^^^^^^^^^^```>>>""""""############$$$$$$%%%......''''''@@@)))''''''(((((((((((()))))))))************,,,,,,,,,,,,---------...AAABBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>===============<<<<<<<<<<<<;;;777333;;;;;;;;;999999999999999888888888888666333222222444666666666666666664226ABEGFFECBBBA@>=>A//F11O11R11Q11P11P11Q22Q22Q22Q22R22R22R22T22T33T33T33T,,G,,E,,E**E**C**C**C**B*)A))A'E$H$H$H$H$H$H$K$H'A(8(*1$W$\$\$6jmmm^^^^^^^^^^^^aaa@@@""""""############$$$$$$,,,...%%%$$$(((@@@)))'''(((((((((((())))))))))))************,,,,,,,,,,,,---------...AAABBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<777333;;;;;;;;;999999999999999888888888888888777777444222222333444666666664226ABEGGFEECBBA@BE..M11P11P11O11P11P11P11Q11Q22Q22Q22R22R22R22T22T33T33T33U33T,,G,,F,,E,,E**E**C**C**B)*B))B*)A$)E%G#G#J#H$C'<')/**)-,()*-$Y$\$[$6jmmm______^^^^^^```LLL"""""""""############$$$,,,---%%%%%%%%%(((@@@)))'''(((((((((((())))))))))))************,,,,,,,,,------------...AAABBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>===============<<<<<<<<<<<<777444;;;;;;;;;;;;999999999999999888888888888888777777777444222222333666776226ABFGFFFECBAC$$H//L11O11O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33T,,G,,F,,F,,E**E**E**C**C**B))B))A,,E))A%C%=$)1***,*),*)*****))*-$Y$\$\$6jmmm_________^^^```MMM"""""""""#########%%%---,,,%%%%%%%%%%%%(((@@@)))'''(((((((((((())))))))))))************,,,,,,,,,------------///BBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>============<<<<<<<<<<<<777444;;;;;;;;;;;;999999999999999888888888888888888777777777777444222222442444ABFHGGEEEC''J11M11O//O//O11O11O11P11P11P11P11Q22Q22Q22Q22R22R22R22T22T33T33T33U33U33T,,G,,F,,F,,F,,E**E**C**C**C**B))A**E*)A))@))9,****(******)))))(()-$Y$^$\$6jnnn____________aaaMMM"""""""""######$$$---,,,$$$$$$%%%%%%%%%(((@@@)))'''(((((((((((())))))))))))************,,,,,,,,,------------///BBBCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>===============<<<<<<<<<888444;;;;;;;;;;;;;;;999999999999999888888888888888777777777777777666333113"";BCFHGFGH--L..L11M//M//M//O11O11O11P11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33T,,H,,F,,F,,F,,E,,E**E**C**C**B))B**E))B))@))A((<))/)))))))))))('(,$Y$^$\$6knon```_________aaaMMM""""""""""""$$$,,,***$$$$$$%%%%%%%%%%%%(((@@@)))'''(((((((((((())))))))))))*********,,,,,,,,,,,,------------///BBBCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>============<<<<<<<<<888444;;;;;;;;;;;;;;;999999999999999999888888888888888777777777777666666666((;BCFHH''J..L//L//L//L//M//M//O//O11O11O11P11P11P11P11Q22Q22Q22Q22R22R22R22T33T33T33U33U33U33U33U--H,,F,,F,,F,,F,,E**E**C**C**C))B**F))B))A))@((A((A((7(()'''))(---'P$_$^$6kooocdc`a````___aaaMMM""" """''',,,'''$$$$$$$$$%%%%%%%%%%%%(((AAA)))'''(((((((((((())))))))))))*********,,,,,,,,,------------...///BBBCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@>>>>>>>>>>>>===============<<<<<<888444;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777777777777666776666BEH''K//K//K..L//L//L//L//M//M//O11O11O11P11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33V33U--H,,G,,G,,F,,F,,E,,E**E**C**C**B**F))B))A))A))@((@((@((9--2774664(P#_$^$6kV=VRCR^\^```acadedOOO""" (((,,,%%%###$$$$$$$$$%%%%%%%%%%%%(((AAA)))'''((((((((()))))))))))))))*********,,,,,,,,,------------...///BBBCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>============<<<<<<888444<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777777777666666447((G--J//K//K..K..L..L//L//M//M//M//O//O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33U33V33U..H,,G,,G,,F,,F,,F,,E**E**C**C**B,,F))B))A))A))@))@((>((@**@*)6'''%M$`$^$6mH$H88<>>>>>>>>>>>===============<<<888444<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888888777777777777777666667//H..J..K..K..K..L//L//L//M//M//M//O11O11O11P11P11P11P11Q22Q22Q22Q22R22R22R22T22T33T33U33U33U33U33V33V44U--J--G--G,,G,,F,,F,,E,,E**E**C**C,,F))C))A))A))A))@((@((>((>((>'',$M$`$_$7mK%K;;888877;;66')')))#########$$$$$$$$$$$$%%%%%%%%%%%%)))AAA)))'''((((((((())))))))))))*********,,,,,,,,,,,,---------......///BBBCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@>>>>>>>>>>>>>>>============<<<888444<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888888777777777777666667..H..K..K..K..L..L//L//M//M//M//O11O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33V33V44V44U--J--G--G,,G,,F,,F,,F,,E**E**C**C,,F**C))B))A))A))@))@((@((>((='',$M$a%`$7nK%K;;;;99999988/"/"#"#########$$$$$$$$$$$$%%%%%%%%%%%%)))AAA)))'''((((((((())))))))))))*********,,,,,,,,,------------......///BBBCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>===============;;;444<<<<<<<<<;;;;;;;;;;;;;;;999999999999999999888888888888888777777777776667..H..K..K..K..L//L//L//M//M//M//O11O11O11P11P11P11P11Q22Q22Q22R22R22R22R22T22T33T33T33U33U33U33V44V44V44U--J--H--G--G,,G,,F,,F,,E,,E**E**C,,F**C))B))B))A))A))@((@((>((>%%,$O%c$Y$4dK%K;;;;;;;;9966%%"#"#########$$$$$$$$$$$$%%%%%%%%%%%%)))AAA)))(((((((((((())))))))))))*********,,,,,,,,,------------......///BBBCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@>>>>>>>>>>>>>>>============<<<666<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888888777777777777667..J..K..K..L..L//L//M//M//M//O//O11O11P11P11P11P11Q11Q22Q22Q22R22R22R22T22T33T33T33U33U33U33V33V44V44V44V--J--H--H--G,,G,,F,,F,,F,,E**E**C,,G**C**B))B))A))A))A))@((@((>%%*"=OH$1VK%K;;;;;;;;<<22 # "#"#########$$$$$$$$$$$$%%%%%%%%%%%%)))AAA)))((((((((()))))))))))))))*********,,,,,,,,,------------......///CCCEEECCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>============<<<666<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888888777777777667..J..K..K..L//L//L//M//M//M11O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33V33V44V44V44W44V--J--H--H--G--G,,G,,F,,F,,F,,E**C,,G**E**B**B))B))A))A))@((@((@..3%%$',< H$/YK%K;;;;;;;;<<33""""#"#########$$$$$$$$$$$$%%%%%%%%%%%%)))AAA)))((((((((())))))))))))*********,,,,,,,,,,,,---------.........///CCCEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@>>>>>>>>>>>>>>>=========<<<666<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888888777777777668..J..K..K..L//L//M//M//M//O11O11O11P11P11P11P11Q22Q22Q22Q22R22R22R22T22T33T33T33U33U33U33V44V44V44V44W44V--K--H--H--H--G--G,,G,,F,,F,,E**E,,G**E**B**B))B))A))A))A((@((@66<;;9<<9/28-4PK%K;;;;;;;;<<33"""############$$$$$$$$$$$$%%%%%%%%%''''''888***((((((((())))))))))))*********,,,,,,,,,------------.........///CCCEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>=========<<<666<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888777777777778..J..K..L//L//L//M//M//M//O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33V33V44V44V44W44W44V..K--H--H--H--H--G,,G,,F,,F,,F**E,,G**E**C**B**B))B))A))A))@((@66=88711121/BBBL%L<<;;;;;;<<33"""############$$$$$$$$$%%%%%%%%%''''''%%%333,,,((((((((())))))))))))*********,,,,,,,,,------------.........///CCCEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@>>>>>>>>>>>>>>>=========777<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888888777777778..J..L..L//L//M//M//M//O11O11O11O11P11P11Q11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33U33V44V44V44W44W44W44V..K--J--J--H--H--G--G,,G,,F,,F,,E--H**E**C**C**B**B))B))A))A))@77=776///111BBBL%L<<<<;;;;<<33"""#########$$$$$$$$$$$$%%%%%%%%%''''''%%%444,,,((((((((())))))))))))******,,,,,,,,,,,,---------............111CCCEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>=========777<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888777777778..J..L//L//L//M//M//M//O11O11P11P11P11P11Q22Q22Q22Q22R22R22R22T33T33T33U33U33U33U33V44V44V44W44W44W44W44W..K--J--J--H--H--H--G,,G,,F,,F,,E--H**F**C**C**C**B))B))A))A))A77=776///111BBBL%L<<<<<<;;<<33"""#########$$$$$$$$$$$$%%%%%%%%%''''''%%%444,,,((((((((()))))))))*********,,,,,,,,,,,,---------............111CCCEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>>>>======777======<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;999999999999999888888888777777778..J..L//L//M//M//M//O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22T22T33T33T33U33U33U33V33V44V44V44W44W44W44Y44W..L..J..J--J--H--H--G--G,,G,,F,,F--H,,F**C**C**C**B**B))B))A))A77=776///111BBBL%L<<<<<<<<<<33"""#########$$$$$$$$$$$$%%%%%%%%%''''''%%%444,,,(((((())))))))))))*********,,,,,,,,,------------............111BBBEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>======777=========<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999999888888888888777778..K..L//L//M//M//M//O11O11O11P11P11P11Q22Q22Q22R22R22R22R22T33T33T33U33U33U33U33V44V44V44W44W44W44W44Y44W..L..J..J--J--H--H--H--G--G,,G,,F--H,,F**E**C**C**C**B))B))A))A77=776///222BBBL%L<<<<<<<<==44"""#########$$$$$$$$$$$$%%%%%%%%%''''''%%%444,,,(((((())))))))))))*********,,,,,,,,,------------............///>>>FFFEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>>>><<<777=========<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;999999999999888888888888777777//H//L//M//M//M//O11O11O11P11P11P11Q11Q22Q22Q22R22R22R22T22T33T33U33U33U33U33V44V44V44W44W44W44W44W44Z44Y..L..J..J..J--J--H--H--H--G,,G,,F--J,,F,,E**E**C**C**B**B))B))A77=776111222BBBL%L<<<<<<<<==44"#"#########$$$$$$$$$$$$%%%%%%%%%''''''%%%444,,,(((((())))))))))))*********,,,,,,,,,---------...............///@@@FFFEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>===777============<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999999988888888888877633B//M//M//M//M//O11O11O11P11Q11P11Q22Q22Q22R22R22R22T22T33T33T33U33U33U33V33V44V44V44W44Y44Y44Y44W33V22R..K..K..K..J--J--H--H--H--G--G,,F--J,,G,,E,,E**E**C**C**B))B))A77=776221221BB@M%M<<<<<<<<==44"#"#########$$$$$$$$$%%%%%%%%%'''''''''%%%444,,,(((((()))))))))************,,,,,,,,,---------............//////@@@GGGFFFEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>>>>===777============<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999988888888888877633A//O//M//M//O11O11O11P11P22Q11Q11Q22Q22Q22R22R22R22T33T33T33U33U33U33U33V44V44V44W44W33U22R11O..J..L//M..J--J..J..J..J--J--H--H--H--G,,G--J,,G,,E,,E**E**C**C**C))B))B88;88622422;AATM%M==<<<<<<==44"#"#########$$$$$$$$$%%%%%%%%%'''''''''%%%444,,,(((((()))))))))*********,,,,,,,,,------------............//////@@@GGGFFFFFFEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>===777===============<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999999988888888877633A//O//M//M//O11O11O11P11P22Q11Q11Q22Q22R22R22R22T22T33T33T33U33U33U33W44W44V33T11Q//M..J..K//O22R66Y66Y..L..J--H--H..J--J--J--H--H--G,,G--J,,G,,F,,E,,E**E**C**C**B))B11H//U,,^,,^==oM%M====<<<<==44"#"#########$$$$$$$$$%%%%%%%%%'''''''''%%%666,,,'''))))))))))))*********,,,,,,,,,------------........./////////@@@GGGFFFFFFFFFEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>>>>===777==================<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999988888888888633B//O//M//O11O11O11P11P11P22Q11Q22Q22R22R22R22R22T33T33T33U33V33U33T//M..K--H--H//O22R44V44W44Z44Z66Y66Y//M..K..K..K..J--H--H--H--H--H--G--J,,G,,F,,F,,E**E**C**C**B**B**Y,,c,,`,,`==nM%M==========44"#"#########$$$$$$$$$%%%%%%%%%'''''''''%%%666,,,'''))))))))))))*********,,,,,,,,,---------............/////////@@@GGGFFFFFFFFFEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>===777==================<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999988888888888733B//O//M//O11O11O11P11P11P22R22Q22Q22R22R22R22T33U33T33T22P..J--H--H..K11P33T44V44Y44Y44Y44Y44Y66Y66Z66Y//M..L..K..K..K..J..J--H--G--H--G--K,,G,,F,,F,,E,,E**E**C**C**B,,W,,`,,_,,`==nM%M========>>44"#"######$$$$$$$$$$$$%%%%%%%%%'''''''''%%%666,,,'''))))))))))))*********,,,,,,,,,---------............/////////@@@GGGFFFFFFFFFFFFEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>>>>===777=====================<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999988888888888744C//O//O//O11O11P11P11P11Q22R22Q22Q22T22T22R22R..K--H,,G--H//L11Q33U44V44W44W44W44W44W44Y44Y44Y66Y66Z66Y//M..L..L..K..K..K..J--J--G--G--H..K,,H,,F,,F,,F,,E**E**C**C**B,,W,,`,,`,,`==nM%M========>>66#########$$$$$$$$$$$$%%%%%%%%%'''''''''%%%666,,,''')))))))))*********,,,,,,,,,------------............/////////>>>FFFFFFGGGGGGFFFEEEEEEEEEEEEEEEEEECCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>===777>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999988888888744B//O//O11O11O11P11P11P11Q22R22Q22Q11M..H--G,,F..J//M22Q33U33V33V33V44V44V44W44W44W44Y44Y44Y66Y66Z66Z66Y//M//L//L..L..K..K..J..J--H--H..K--J,,G,,G,,F,,F,,F,,E**E**C**C,,W,,`,,`,,`==nM%M========>>66#########$$$$$$$$$$$$%%%%%%''''''''''''%%%666,,,((()))))))))*********,,,,,,,,,------------.........//////---------///444999BBBFFFEEEFFFFFFEEEEEEEEECCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAA@@@@@@@@@@@@@@@>>>===777>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999988888888744B..P//O11O11O11Q11Q11Q11P11P11O,,F--G//K//O22R33U33V33V33U33U33V44V44V44W44W44W44W44Y44Y44Y66Y66Z66Z66Y//O//L//L..L..K..K..K..J..J--J--H..J--G,,G,,G,,F,,F,,E,,E**C**C,,W,,a,,`,,`==nO%O========>>66#########$$$$$$$$$%%%%%%%%%''''''''''''%%%666,,,((()))))))))*********,,,,,,,,,---------............---,,,***************))),,,///333777>>>EEEEEEFFFFFFCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@===888>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999988888733B//P11P11O11P//K,,F,,F**C**C11P22Q22R22U33U33T33T33U33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Y//O//L//L//L..L..K..K..K..J--J--H..L--H--G,,G,,F,,F,,F,,E**C**C**Y**a,,`,,`==oP%PAA@@>>==>>66#########$$$$$$$$$%%%%%%%%%'''''''''''''''666,,,((()))))))))*********,,,,,,,,,---------......---*********************************))))))***...222444<<>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999988888733C--O,,F,,C**B,,E..J..L11P22R22T22R22R22T33T33T33U33U33U33U33V44V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Y//O//M//M//L..L..K..K..K..J..J--H..K--J--G--G,,G,,F,,F,,F**E**B**W**a**`,,a==o>%>..114488<<44#########$$$$$$$$$%%%%%%%%%'''''''''((('''666,,,((())))))*********,,,,,,,,,---------,,,,,,***))))))******************************************))))))))),,,222666999<<<@@@BBBCCCCCCBBBBBBAAAAAAAAAAAAAAA@@@@@@@@@@@@>>>888>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999999711>**F,,F..J//M11P11R11R22Q33R22R22R22T22T33T33T33U33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66Z//O//M//M//L//L..L..K..K..K..J--J..K--J--H--G--G,,G,,F,,F,,E,,L**\**a,,a,,a==oK%K//--**))%%(($#$######$$$$$$$$$%%%%%%%%%'''''''''((('''666,,,((())))))*********,,,,,,,,,,,,,,,))))))))))))))))))))))))))))))))))))************************************)))))))))******111888<<>>888>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999999733C//P11P11Q11Q11P11Q22Q22Q33T22R22R22T33T33T33U33U33U33U33V44V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66Z//P//M//M//M//L//L..L..K..K..K..J..L--J--H--H--G,,G,,F,,F,,E,,G,,Z,,a,,a,,a==oO%OAA@@>>====44#########$$$$$$$$$%%%%%%%%%'''''''''((('''666,,,((())))))*********,,,,,,******))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))******************))))))***,,,...777;;;===AAABBBBBBAAA@@@@@@>>>888>>>>>>>>>>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999999744C//P11P11P11P11Q11Q22Q22R33T22R22R22T33T33T33U33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66Z11P//M//M//M//M//L//L..K..K..K..J//L--J--H--H--G--G,,G,,F,,F,,E,,Y,,c,,a,,a==pO%O>>>>>>>>@@77######$$$$$$$$$%%%%%%%%%%%%'''''''''((('''666,,,((())))))************(((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))((()))***...666888<<<>>>AAA@@@888>>>>>>>>>>>>>>>>>>===============<<<<<<<<<<<<;;;;;;;;;;;;;;;99999999999844C11P11P11P11P11Q22Q22Q22R33T22R22R33T33T33U33U33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66Z11P//O//M//M//M//L//L..L..K..K..J//L--K--H--H--H--G--G,,G,,F,,F,,Z,,c,,a,,a==pP'P>>>>>>>>@@77######$$$$$$$$$%%%%%%%%%%%%'''''''''((('''666---))))))******)))((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(((((())),,,666<<<888===>>>@@@@@@>>>>>>===============<<<<<<<<<<<<<<<;;;;;;;;;;;;99999999999844C11P11P11P11P11Q22Q22Q22R33T22R22T33T33T33U33U33U33U33V44V44V44W44W44W44W44Y44Y44Y66Y66Z66Z66Z66[66[66Z11P//O//O//M//M//M//L//L..L..K..K//L..K--J--H--H--H--G,,G,,F,,F,,Z,,c,,a,,c==pP'P@@>>>>>>@@77######$$$$$$$$$%%%%%%%%%''''''''''''((('''666---))))))''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))***,,,...111111---***222777999===>>>@@@>>>============<<<<<<<<<<<<;;;;;;;;;;;;99999999999866C11Q11P11P11Q11Q22Q22Q22R33T22T22T33T33T33U33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66[66[11P11O11O//O//M//M//M//L//L..K..K//M..K--J--J--H--H--G--G,,F,,F,,Z,,c,,c,,c==pP'P@@@@@@>>@@77######$$$$$$$$$%%%%%%%%%'''''''''((((((%%%888222)))%%%%%%%%%'''''''''''''''''''''''''''''''''''''''((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())),,,---///222---***)))((())))))((((((******///666888<<<===>>>>>><<<<<<<<<<<<<<<;;;;;;;;;;;;99999999866C11Q11P11P11Q22Q22Q22R22R33U22T22T33T33U33U33U33U33V44V44V44V44W44W44W44Y44Y44Y66Y66Z66Z66Z66[66[66[66Z11P11O11O//O//M//M//M//L//L..L..K//M..K..J--J--H--H--H--G--G,,F,,Z,,d,,c,,c==pP'P@@@@@@@@@@77######$$$$$$$$$%%%%%%%%%'''''''''((((((%%%///777888///111111///***'''%%%%%%%%%'''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((()))***,,,...111,,,)))(((((((((((()))))))))))))))))))))(((((())))))...444777999<<<======<<<;;;;;;;;;;;;99999999866C11Q11P11P11Q22Q22Q22R22R33U22T33T33T33U33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66[66[77Z11Q11O11O11O//O//M//M//M//L//L..K//M..L..J..J--J--H--H--H--G,,G,,[,,d,,c,,c==rP'P@@@@@@@@AA88######$$$$$$$$$%%%%%%%%%'''''''''''''''%%%$$$###%%%((((((///666888222111222///)))))))))(((%%%%%%''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((('''((()))***,,,111...))))))''''''(((((((((((((((((((((((((((((((((((())))))((())))))((()))***...333777999;;;;;;<<<<<<99999999866E11Q11P11P11Q22Q22R22R22R33U22T33T33U33U33U33U33V33V44V44V44W44W44W44Y44Y44Y66Y66Z66Z66Z66[66[66[77[77[11Q11P11P11O11O//O//M//M//M//L..L//M..L..K..J..J--J--H--H--G--G,,[,,d,,c,,d==sP'P@@@@@@@@AA88######$$$$$$$$$%%%%%%%%%'''%%%%%%$$$$$$%%%%%%%%%%%%%%%%%%$$$$$#%%%'''##$(()...111---444666333))))))((('''$$$%%%''''''''''''''''''''''''''''''''''''''''''((((((---,,,,,,***)))(((''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((''''''(((((()))---111666999999;;866E//Q11P11Q22Q22Q22R22R22R33U33T33T33U33U33U33U33V44V44V44W44W44W44W44Y44Y66Y66Y66Z66Z66Z66[66[66[77[77[11Q11P11P11O11O//O//M//M//M//L..L//O..L..K..K..J--J--H--H--H--G--[,,c,,a))^;;hQ'Q@@@@@@@@AA88####$#$$$$$$%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$%%%%%%''$''$%%$ # "$$$(('**)------///...777666...'''((((((%%%$$$%%%%%%''''''%%%%%%((()))---,,,***)))'''%%%'''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((''''''%((%))),,-11633J11Q11P11Q22Q22Q22R22R22R33V33T33T33U33U33U33V33V44V44V44W44W44W44Y44Y44Y66Y66Z66Z66Z66[66[66[77[77\77\11Q11P11P11P11O11O//O//M//M//M//L//O..L..K..K..J..J--J--H--H--G))Q''T((Z))[<--B..H11M11P11P11P11Q22Q22R22R22R22T33V33T33T33U33U33U33V44V44V44W44W44W44W44Y44Y66Y66Y66Z66Z66Z66[66[66[77[77\77\22R11P11P11P11P11O11O//O//M//M//L11O..L..K..K..K..J..J--J--H--H--Z,,d,,f,,f>>tQ'QAAAAAA@@AA88###$$$$$$$$$###############$$$$$$$$$$$$$$$$$$%%#'-///----------*##%''$''$$$$$$$$$$$$$$$$$$$(((---///222---666999666---'''''''''$$$$$$%%%%%%%%%'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(%'($(('(((((*,,8-->--C//J//M//P//P11P11P11P11P11Q22Q22Q22R22R22R22T33V33T33T33U33U33V33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66[77[77\77\77[22R11Q11P11P11P11O11O//O//M//M//M11O//M..L..K..K..K..J--J--H--H--\--f,,e--e>>tQ'QAAAAAAAAAA88###"#" $ "$""$""$"########################### #,268;;988766666762 ($$$$$#$$#$$$%%%%%%)))(((''''''%%%%%%(((,,,---...,,,222333222)))((('''%%%$$$$$$%%%%%%%%%%%%%%%'''''''''''''''''''''''''''''''''''''($'(%''''%(%#,$6#;)#B//J..O//O//M//O//M//M//O11O11P11P11P11Q22Q22Q22R22R22R22T33V33T33U33U33U33V44V44V44V44W44W44W44Y44Y66Y66Y66Z66Z66Z66[66[66[77[77\77\77[22R11Q11Q11P11P11P11O11O//O//M//M11P//M..L..L..K..K..K..J--J--H--\,,f,,e--e>>tQ'QAAAAAAAAAAAA;;7733%%,,(($"$###"#""#" # $ "$"######)48;>AEFGFCBAA@>>>>=8,''%**())(''''''$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'''))),,,,,,...,,,111333///((((((((('''$$$%%%%%%%%%%%%%%%%%%%%%$%#%($'(%'')(%,*8$7#;"A"C#G"F) J/1L..L//L//L//M//M//O11O11O11P11P11P11Q22Q22R22R22R22R22T44V44U33U33U33U33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66[77[77\77\77\77[22R22Q22Q11Q11P11P11P11O11O//O//M11P//M//L..L..K..K..K..J..J--H--\--f--e--e>>sQ'QAAAAAAAAAAAAAAAAAA**88AA==;;7777//22**$"#'3;=ACFJLOQQPOMLKJHHHHGB8""'$$"$$"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#########'''(((***,,*,,*,,*//.333---'('')'%'%%%%%%%'%%)2'3",%7(=-L"E"C"C"C#E"E) H/1K..L//L//M//M//M//O11O11O11P11P11Q22Q22Q22R22R22R22T33T44W44V33U33U33V33V44V44V44W44W44W44Y44Y44Y66Y66Z66Z66Z66[66[66[77[77\77\77\77\22R22Q22Q11Q11P11P11P11O11O//O//M11Q//O//L//L..L..K..K..K..J..J--\--e--d--e>>sR'RAAAAAAAAAAAAAAAA@@))66AA@@AAAAAAAAAA@>(21<@CFJLPQUWZ[\[ZYWWVUUTRRM> )$$"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%#$$# #" #'''.(31'8/B.C.E/K1Q1P/M-H*B)E%E"B"C#C#E"E) H/1L//L//L//M//M//O//O11O11P11P11P11Q22Q22Q22R22R22R22T33T44W44V33U33U33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66[77[77\77\77\77\77\22T22Q22Q22Q11Q11P11P11P11O11O//M22R11O//M//L//L..L..K..K..J..J..\..f--e--e>>sR'RBBAAAAAAAAAAAAAAAA))66AA@@@@@@@@@@BA/4,<CFJLORTWZ\_cefffedda`_[YVUJ-$$ #################################$$$$$$$$$$$$)--*($" /$;/P6W4U3T1P1Q1P1P1P2P)H B"C#E#E"E(H/1L//L//L//M//M//O11O11O11P11P11Q11Q22Q22R22R22R22T22T33T44W44V33U33V33V44V44V44W44W44W44Y44Y66Y66Y66Z66Z66Z66[66[66[77[77\77\77\77\77^22T22R22R22Q22Q11Q11P11P11P11O//O22R11O//M//M//L//L..L..K..K..J..\..f--e--e>>sR(RBBBBAAAAAAAAAAAAAA))77BB@@@@@@@@BA9;)8EHLOQUWZ\_adhiknoonkhda_\YVPC.##"##"#########################$##$"#$ ###6@><9632/*(*"<)F/O3R2Q1P1O1O1O(G B"C#C#E"F(H/1L//L//M//M//M//O11O11P11P11P11Q22Q22Q22R22R22R22T22T33T44W44V33U33V44V44V44W44W44W44W44Y44Y66Y66Z66Z66Z66Z66[66\77\88^88_88_66Z66Z44W11O33R33T33T22Q22Q11Q11P11P11P11O22R11O//M//M//M//L..L..L..K..K..^..f--e--e>>tR(RBBBBBBBBAAAAAAAAAA))77BBAA@@@@AA@>,2BKOPTWYZ^`adehjkmrtpnkhdc_\ZUH@1 $# #"# "# "# "#""# "# #"$$)'-'79FGHJHGCA=974//1"@(G1O3Q2O1O(H B"C#E#E"F(J/1L//L//M//M//M//O11O11P11P11P11Q22Q22Q22R22R22R22T33T33T44Y44V33U33V44V44V44W44W44W44Y44Y66Y77Z77[77\77\66Z44Z33U22R22Q//M//L))A))@((>((>,,E--J..K11O22P11R11R11Q11P11O22R//P//M//M//M//M//L..L..K..K..^..f--e--f>>tR(RBBBBBBBBBBBBAAAAAA))77BBAAAA@@BA)/->JLMQTVWY\^_acfhimsxtrnjhec_\ZMB911$-#,#)#(#,#.%7'9$;CFKLMPQRRQPKGCA>964<%F,J2O*J B"C#E#F"F(J/1L//L//M//M//M11O11O11P11P11P11Q22Q22R22R22R22T22T33T33U44Y44V33U33V44V66W66Y66Z66Z44Z33W44W22Q22Q//M..K**B((=((=''<''<%%;%%;''=''=((=((=((<((<((=((>))A,,G--J..K//O11P33T11Q//O//M//M//M//L//L..L..K..^..f--e--f>>tR(RBBBBBBBBBBBBBBAAAA))77BBAAAAEC/3(;GOLLOQRUWY\^_`ceinuzxtrnkiec`\RE=31%8$8$8%8%9%;';8;EMQRTUVYZ[\[ZVTPLHEA=<A C B#C#B > >( F12M//L//M//M//O11O11P11P11P11Q22Q22Q22R22R22R22T33T44U44V66Z66Y33V33U33T11O11O//K--H,,F''<''<%%;%%;%%9%%8''9'';'';''<''<''<''<''<''<''=''=''<((=((=((<((=))@((@((>,,E--F..L//L//M//O//O//O//M//L//L..K..^..f--f--f>>tT(TCCBBBBBBBBBBBBBBAA))77BBAACC<<'6EMQMKLOQRUWY\^_`djpw~}wtpokhec`WH@71%7$7$7$8%9%969GOUWYZ[\\^`acdeda^ZWTPMHFE>7 9 >) J12L//M//M//M//O11O11P11P11P11P22R33R33T33U33U11R22R11O//L11P..L--J((>((>'';%%7%%6$$6%%7%%8%%8%%9%%9%%9%%;%%;'';'';'';'';'';'';''<((>((@''<))B''>((@**B((=,,F**C((<((>((=((=))@((@))C--G--H//L//L//L//L..^..h--f--f>>tQ(QAABBBBBBCCEEEEEECC**77CCAAA@ (.BLQUOKLOPQRUWZ[^`emsy|xtrnmied^OC;32#6#7$7%828GPW\^_`acdeehijkmnnkiea^YRLEA$G#G( J12L//M//M//O11Q22P11P11P//O//P//M..J--H**C**C%%8%%8%%7$$6$$7##6$$7''<,,F))A((=((=((>''<%%9%%9'';%%8%%9%%9'';'';%%9''>%%;''<))@'';))A**C''<((=''<''<((=''<%%;%%;''=''<''<((<((<((;'';''<((>((@**E--H..K.._..h--f--f>>u/$/  '''''',,////11>>))66AABA#((>KPVWQKKMOPRTUWZ\cjpw||xusomihdUG>6/"2#7%<#<;HRZ`cceffijjkmooppsstwske_YRLB;#F) J12L/1J./K*-F()A)(@''<''<$$6$$6$$4##4##3""3""3##4##4##4##4##4##6##6##4##3$$7'';%%8%%9''<((=**C))A((>..J%%9''=''='';%%9$$8''9'';%%9%%8%%8%%9%%9%%9%%9%%8''8''8'';'';''=''>''=''C**Q**O))Q,,Y,,Y**Z,,a--c..f..h--f--f>>u-$-###$$8GOTYYRMJLMOQRTUW^ekrx~ zxusomjh\KB88/O2Q2Q1O/J'HTadcefhiijjmnnoprrstzzpjd^WQJ87%H(G%B$>#6 1 2 "1""1"#1"#/"#1"#2"#3"#3""2""3##4$$6##4##4$$6##6((A%%<$$7'';##4%%9'';##4%%8$$7%%8%%9''9''=''<((=))A)*@%'7%'7%%7%%8%%8%%9%%;%%;''E((O((M))M**V**W,,Z,,a,,a,,c,,h,,e,,c--e--f--f--f--f..f..f--f--h>>u-$-3CMRY\ZUOJKLOPQRQWahntz ## ~zyusonjcQE<89c#A#9" 2" 3""2%%;$%6"#/$'6#$3#$4%%9"#4$$7$$6##3##3##4##3##3##4#$3#$2#$2#$3##6##4##6$#8%%;% C'L%J)(Q))T))T**V**\**\**_**c**c,,d,,c,,d,,d,,e,,e,,e,,e,,c,,`--e--e--e--e--f..f..h--h--h>>u.$.$$**)AJPV\`\VPKJLMMLKHTcjpu| ""$$$$~|xwsoniYHA61[Cu@m>j#H#H$M$R$R%Y%^%^$^ V"U*)^**_**_**`**`**`**`**`,,a,,a,,c,,c,,d,,d,,d,,e,,e,,c,,a--e--e--e--f--f..f..h--j--j@@x*$*""7HMTZ`c^WRLHGGFCB@Mdmrx ~""$$%%'' |yutpm`OC6(QJF|ExCuBsAoAn>i2TM_ddfhjkkmnnrw}##((##yrke_YQ=4$H'M$H$J$K$K%L%L%M%M%O%M)Y,c,`*_*_*^*Y)V(O'M%J$C%G'K%H$O#V#U$[$_$_$_$_$`%`%a%c%_"U"T*)\**^**^**_**_**_**`**`,,a,,a,,c,,c,,d,,d--e--h--h--e--d--d--e--f--e--d..e--e))Z))Y;;i<9<'"'BMQW^de`ZTOKB<<;87Fant z""$$%%''))$$~}ywsphUF<COOLKJHH~G|Fx8^"GRddehikmmou|##%%**--wpjd^WG4 C'O$H$J$K$K%L%L%M%M%O%M)W,a,^*^*\*\*[)Z)Y)Z)Y(Y(W(U(T$W#Z#Y$\$\$\$^$^%_%`%`%a$_#U"T*)\**^**^,,a,,a,,c,,c,,`,,a,,c,,c,,a,,c,,c**_('U''U''U%%P((T))V%%O##H##H$$J$$H##E##F44VLLL;<;8888888888886661/12/22/22/2-*,-HPV\afha[UTRK@3/1-=^m w""}$$%%''))**''""|zwtn\LA=QWUUTQPMKH~>e,FJ`eehiimuz##((**//33))uoic[Q;@'O$H$J$K$K%L%L%M%M%O%M)W,a,_,_*\*\*[)Z(W)Y)W)V(V(U(T%V#Y#W$\$\$^$^$^%_%`%`%a$_#U"U*([**[**^((U%%L%%O%%O#$J$#J$#J##H" C" C" C" C" @" @ @ A""C""C""C%%M%%O""C$$J$$H$$F33ROOO>>>===;;;;;;;;;<<<<<<999888888==8((BMRY^ejic\ZZYUMA/$#4Yk""w##~%%''))**--,,$$|ywsdQE4<9= @ A=< @@<""C##C##E44T~~~rrrmmmddddddddddddddd[[[WWWYYWWWU$$EQW^cjojdaaa`^VOF4)Rh u%%''((**,,....))$$}zwkZJ9.ejfda^\ZWUROFy9\*CCQTT_s$$))--113388<<==//yrke_Q9B%K$J$K%K%L%M%O%P%P%P*[-e-c-a,`*_*^*[)Y)Z)Y)W(V(U(T'W$Z$Y$\$\$^$_%_%`%`%a%c$`#V"U"T"R"R#W M LHG R Y"V O L F E J PA>=>><;($;/1c**u**t<i1K@EJZn ,,114477<<@@CC<<,,xrjd[B=%K%L$J$J$J#G#E#F#F"A"C$L'R'Q'Q(W)Z*[)Y*\*[*Z)Y(V(T'W$Z$Y$\$\$^$_%_%`%a%a%c$`#W#U"T"R"T#V M LKJ \"e"f"h"f#e#f#i#iHEBA@=;,';/1e''w((t;;uuuuuuuuuuuuttttttttttttttttttoooKV_dkrurpppoonh`YQH,Aao$$}**--..//224411**%%~yiVECeupmkifdc_\[VL@n4U"@ATfz**4499<<*'<34B**<((<66LuuuuuuuuuuuuuuuttttttttttttuutnnpOYchouyyyxwuuuof`WT27_k""z))..1111336633..((##}o^K9Twspomjhec`_YOCt7Z@Mat%%66==@@EEHHLLMMAA11 zsmh[A.(%%,-%'2,)$.'6%3#.(%2*(2 9=C"R"T#U#W$\%^$\$\$_%`%a'c'd'd%`$_$`#^"U"T#U#V#V$Z O M LJ ["e"d"e#f#f#h#h#fHECA@==*';>@9;;8998JJHwwwuuuuuuuuuuuuuuutttttttttxxuaajM[ekry}}~~~~}}yphaZG2Zi w((..223344666611,,'' ueR;;||yxtrpnkiedc[PGy.VG[n 11>>EEHHLLPPTTKK;;,,xrmeK8889*'/)%/)'.($-1.499;88888999;;;;<;==<<==<>>=>><)Q Y U T V VTK K L L MKJEEG6.3,)(2>=CEFEE ^"f"f"f#h#h#i#k#iJECB@><*';==;999999JJJwwwwwwuuuuuuuuuuuuuuutttttt||xCC\K_iou}ypeYP6Rft%%--334466889944//))$$}kZFHx}zywspnkjhe^RGz PRi|**;;HHMMQQUUYYUUFF66''~wpkW>78=BB@>>===<@A>===<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;3,F,%>)'2'$2"/"/"."- /''''2 , (#2"1 *#* 8ECBCK ^"a"dY \ _ ` ` `"c"d \UT>BA>===)';==;;;;;;;KKKwwwwwwwwwuuuuuuuuuuuuuuutttyyw==[O`msyzodW88U -Kdr$$**22778899<<8822--((""saM@c~|ywtromki`U;pMcu''66EEQQUUYY\\\\PPAA11|todF44BLLHAAA===EEEEEECCCBBBBBBAAA>>>============;;<<=9=>9==;<<;;;9;;9;;9;;;99;888888989989988<<<<<<<<;<<;<<;==93-J(Z'V RHFFEA=6()24)(*** -$= , , ,)'9)%=31;<<;;;;;;;KKKwwwwwwwwwwwwuuuuuuuuuuuuwwuuuu//URcow}yoc[#>$Ban##}))117799<<==;;6611**%% ziW9M}yxutrokaY*hYp""11@@PPYY\\``dd[[KK<<))ytmT @HHGAAA===FFFEEECCCCCCBBBBBBAAAAAA@@@>>>===;;;;;;<<<;;;;;;999888888777777777998998887887777666888888777888;;;;;9999778774774884,,-%%('')33399988888988<887887998;;9;;99;99;89;99;9;;9<=9==9<<;;;;;;;;;;KKKwwwwwwwwwwwwwwwwwwuuuuuuwwwsss$$QUes|xmaW9 29\k""y((..66;;==>>>>9944..))$$p_E(c~|zxtsofWaf}**99JJZZaaeejjffWWGG66%%xtdE<>>===;;;;;;<<<;;;;;;999888888777777666888666333333222///111///...222777..-------,,,***,,,11/==<;;9777666666776776777777777777777777777888888888888999;;;;;;999999JJJxxxxxxwwwwwwwwwwwwwwwuuuwwwsssLYhu~wkcH$6)>1Viu''--33;;>>@@AA<<7722--(( xfPFw~}zywrk7~[w''44FFVVcciimmnnaaRR@@11 ~xoQ--CEEA===FFFEEECCCCCCCCCBBBAAA@@@@@@@@@>>><<<;;;<<<;;;;;;999999888777777666888777333222222222111///...222777---,,,,,,******))))))999777444444444666666666666777777777777777888888888888999;;;;;;999999KKKxxxxxxxxxwwwwwwwwwwwwwwwyyxZZfLZixwka;)=7Z,Ofs$$**2299@@BBCC@@;;66//**%%~mY@^~|yuemn //@@QQ``mmppttmm\\KK;;**|w`E==>>>=FFFEEEEEECCCCCCBBBAAAAAA@@@@@@>>><<<;;;<<<<<<;;;999999888777777666888777333222222222111///...222777---,,,,,,******))))))999777444444666666666666777777777777777888888888888888999;;;;;;999999KKKxxxxxxxxxxxxwwwwwwwwwwww~~zEE\K^kzwj^81LEt)JBcp##~**1177@@CCEECC==8833..((""ta@L}z>c~,,<>><<<<<<<<<<<<;;;999999888888777666888777333222222222111111...222777---,,,,,,******))))))999777444444666666666666777777777777777888888888888888999;;;;;;999999KKKxxxxxxxxxxxxxxxwwwwwwwww}}yCC^M_n|wkO'97[M4Z7`n""z((//66==CCFFFFAA<<7711**%% zhQVs wt''77GGVVddss}}~~rr__PPAA11 w\''@AA=FFFFFFEEECCCCCCBBBBBBAAAAAA@@@>>><<<<<<<<<<<<;;;999999888888777666888777333333222111111111...222777---,,,,,,******))))))999777444444666666666666777777777777888888888888888888;;;;;;;;;999;;;KKKyyyxxxxxxxxxxxxxxxxxxxxwxxw11UPap~ wi@.G>kQBr3Zjx''..44<>9944..))##o[LwEh""22BBQQ``nn}}||jjZZKK<<,,~jH>>=FFFFFFEEEEEECCCBBBBBBAAAAAA@@@>>><<<<<<===<<<;;;;;;999888888777666888777333333222111111111...222777---,,,,,,******))))))999777444444666666666777777777777777888888888888888999;;;;;;;;;999;;;KKKyyyyyyxxxxxxxxxxxxxxxxxxwww--UTdr xe#>6WEyUQ1Rhu%%,,3399@@GGKKGGBB==7722,,''""udF`$z--==LL[[iixxttddUUFF66''uU33>HHFFFFEEEEEECCCCCCBBBAAA@@@@@@@@@<<<<<<===<<<;;;;;;999888888777666888777333333333222111//////333777---,,,,,,******))))))999777444666666666666777777777777777888888888888888999;;;;;;;;;;;;;;;KKKyyyyyyyyyyyyxxxxxxxxxyyyrrtMWfu""""yT-E=hLY[1Her$$**2288>>FFKKKKFFAA;;66//**%%|kQ4}Lp((88GGVVddss탃oo``QQAA22""c$$FHHFFFFEEEEEECCCBBBBBBBBBAAA@@@@@@<<<<<<===<<<;;;;;;999999888777666888777444333333222111//////333777---,,,,,,,,,***))))))999777444666666666666777777777777888888888888888999999;;;;;;;;;;;;;;;KKKyyyyyyyyyyyyyyyxxxxxxyyyrrtLWfu "" yK1HAoPZa.V@co""}((//77==CCKKLLGGBB==7711,,'' nV'jVp%$44CCRRaaoo~~ssddUUEE66%%e$$HHHFFFFFFFEEECCCCCCBBBBBBAAA@@@@@@<<<<<<===<<<<<<;;;999999888777777888777444333222222222111///333777------,,,,,,***)))***999777444666666666666777777777777888888888888888999999999;;;;;;;;;;;;KKKzzzyyyyyyyyyyyyyyyyyyyyyttuLRap~ "" yY)@9cJVV.Mco""}((//66==CCJJKKFFAA;;66//**%%ziJW$r$$44CCRR``oo}}mm^^OO>>//zY33@JJGFFFFFFEEEEEECCCBBBAAAAAAAAA@@@<<<<<<======;;;;;;999999888888777888777444444333222222111///333777------,,,,,,***)))***999777444666666666666777777777777888888888888999999999999;;;;;;;;;;;;KKKzzzzzzyyyyyyyyyyyyyyyyyyxxx..RK\kyxjC3RCtTEx.Uco""}((//66<>>8833--((""r^M~z#umu$$44BBQQ``oo}}ssccRRCC44$$f##E@@=GGGGGGFFFFFFEEECCCCCCBBBAAAAAA@@@<<<<<<======<<<;;;;;;999888888777888777444444333333111111///333777...---,,,,,,***)))***999777666666666666777777777777888888888888888999999999999;;;;;;;;;;;;KKKzzzzzzzzzzzzzzzyyyyyyyyy}FF^FT`o}xkW$=6YK3Y9\an }''..44<>><<<<<<;;;;;;999888888777999777444333333333222111///333777...------,,,*********999777666666666666777777777777888888888888999999999999999;;;;;;;;;;;;KKK|||zzzzzzzzzzzzzzzyyyyyy|RRdGQ[iwwk\;/JAo"@F^an |''..44;;BBEEEEAA<<6611**$$|hK\r"jiru##33BBQQ__nnwwwwiiWWHH99))oT>>@>>>HHHGGGFFFFFFEEEEEECCCBBBAAAAAAAAA<<<<<<>>>===<<<<<<;;;999999888777999777444444333333222111///333777...------,,,*********999777666666666666777777777777888888888888999999999999999;;;;;;;;;;;;LLL||||||zzzzzzzzzzzzzzzzzzzzzssuKPYdr}uk_A)=4U)Q^an|%%--44;;AACCCC@@9944//))##waPn~z>Tpru""33AAPP__nnrrrrccRRBB33##}e..MFFA===HHHGGGGGGFFFEEEEEECCCCCCAAAAAAAAA<<<<<<>>>===<<<<<<;;;999999888777999777444444333333222111///333777...---*********))))))999777666666666666777777777777888888888888999999999999999;;;;;;;;;;;;LLL|||||||||zzzzzzzzzzzzzzz||zuuwMMV`m}~}~~yri^L"9(=2V^`n|%%,,33;;AAAAAA>>8833--''""s[V}xi^crru""22AAPP__jjnnmm^^MM>>..u\<>>===<<<<<<;;;;;;999888777999777444444444222222222111444887//.//.22223223222/444;;;999;;;999999;;;;;;;;;;;;<<;;;;9999999999;9;;;;;;;;9;;;;;;;;;;;;;;;LLL|||||||||||||||zzzzzzzzz||zzzz//TLV^fw~zyxywne\Q9);[^am|%%,,33;;>>@@@@==7722,,%% ~nO@~}|tm4pLkrru""22AAPP^^ffhhffWWGG88((~mPHHKBBB===HHHGGGGGGFFFFFFFFFEEECCCBBBBBB@@@<<<<<<>>>======<<<;;;;;;;;;;;;999;;;;;;999999999999999;;9;;;;;;;9<97=98<333''(''%)'.(%)$'#$'"$'"%'$$'"$'"%'$'%)//-998887784887888887888888;;;;;;;;;;;;KKK}}}|||||||||||||||zzzzzzzzz~~|;;ZHU\dr~~}|xwutsjcZO13M *C\^am|$$,,3399======;;4411**$$zhMc~}zztj[L[orsu 11@@OO^^aaccaaRRAA22""wc..LPPKBBB===GGGGGGFFFEEEEEE@@@@@@@@@>>>>>>>=>;;;;=9<>99=79;7;;9;;9998887887888888889888888887888888887;;<;=87(L2c/W)K(K)O*R)Q*R'H = < ;%F"= <#>"=."7#8"4#8 72,<<=;;;;;;;KKK}}}}}}|||||||||||||||zzzzzz~GG_GT[cmz}|zywutsoi_VM$$K%%6K\_amz$$**2299;;;;<<;;44//))##uaTt}|zyxsja.dEdprsu 11@@OO[[\\^^\\MM<<--pZ77AEEB@@@>>>>>>===<<<<<<<<<;;;;;;;;;999;;;;;;;;;8,E7$J3F(3" $"$)  ''*3$>$@%B'F#=%C6i7o7n7p8p8r8r3i2e'J)K(J'G%F$C#B/'=<=;;;;<<1R\_cmz##**22888899998833..'' ~p[Z}|zyxwsiaPGQjprsu 11@@OOVVWWZZYYGG77''zjM877('('%''''%$%,*-888786888888;9;=<=>>>>>>>>><<<7T6`8a7^3Y3W4W4W6Z1Q1O/L.L/M1P)@'<*B'<'='<$7#4)>,F)A)>,E/K.J-H3`4i4i4j6k6k6m6n6m)O(J(G'F%E$B#A/'=<=;;;;<<>MMRRRRUURRBB22""sc3"$-#'" "# $ " $1"3"2"2)A6Y6Y7[9_9a9a;d;e;f<f=i=j>j>m>n>n;e;c9`7^7\6Z4W2U2R1Q3`4i4i4j6k6k6k6n6k*M(J(H'F%E$B#A/'=<=;;;;999GHE~~~}}}}}}}}}}}}}}}|||||||||}}}wwxJOW`irupke`\WRMJECO27[\`cky##))224466666644//**%%ufTa~~}|yxwutsph^WAtALapprsu//>>KKLLMMPPMM<<,,}mY,B%/%*4-8,87H9P9M>V=^7_8_9`9a9c;c;d;e<e<f<h=h8`8^7\7[6Z4W4V2T2R2P3a4j4i4j6k6m6n6o6m*M(J(H'F%E$B#A/'=C8WC1e<,\C8Z~~~~~~}}}}}}}}}}}}}}}}}}}}}~~~yyx""GMV_hmnmf`ZTOHC>;66(A\^`dkz""))113333334444//))##|r`Ur|zywwusrpoh^VAuFCTipprsu//>>GGHHHHKKJJ77''wfP9K;O6H6H7J4G/@1@1@/>-8=R=R<QAZHcF`E_HdLiKfHdGcF`F^=^7_8_9`9a9c;c;d;e<e<f<h=h9`8_7\7[6Y4Y3V3U3T2Q4d6n4j3i6j4h4i4i4j*M(J'H'G'F'C$A1'>G6hH.|H1zZByyyxxxyyyuut%%ELU^ccdee`YRLF>94-"K\^adky""))//1111112222--(( xmY$eyzxwutrronmf^R7kJFO[mopstu..==AABBEEFFCC11o_,O9J8K8L9M;M;P<Q<Q<Q;QC\PoOnOmMjLhKhJeF`HdGcG`F`E_F^>^7_8_9`9a9c;c;d;e<e<f<h=h9`8_7^6\6[4W3T/M-G-G-L-P.Q,L'C#<#<%A%B 73226 62' /4*J9'_=*dQ=wyyykkkjjj^^^\\\\\\\\\[[[@@@>>>>>>BB>((ALTYYZZ\^^YRKE>8/*Q\_aejy ((......//////,,''}shO6yxuttrponmke\H%ZFMTZcnorstu//;;<<<<>>AA==,,yhW8R7H8K8L8L9M9M9O;O;P9O@WMkMjLiLiKfKfHdF`HdGaFaF`F_F^>^7_8_9a9a9c;c;d;e<e<f<h=h9a8_9^6U4T)@#4$4"2".#1#1$3%6$4%6'8.F$7 . -"/ 1)* .%/-"<,A/#FB3VKKK;;;;;;788788788788898<<<<<<<<<997--;JOOQRTUUVVPJC=3$"4U\_cejy ((------......**$$yodMLtooonnkjifZ9sJJRY^djnprstu..66778899<<88%%r`QAV6H8K8L8L9M9M9O;O;P9O@WMkMjLjLhKhKfHeF`HdGcGaF`F_F^>^7_8_9a9a9c;d;d;e<f<f<h=h9a8_@_> \> \<Z=Z=Z<Y3H6 M7 O7 P2H1F1G1F*;*<(8)9/A)9(9$31C)3, 9,9-<<1HHHH8984342./2/12/1/-.)'()'()'((%'CGGGJKLMOPOJA7*"%->Y\_cfkx ''****,,,,----))##~tk\WdjihhhhhheM(aHPW\afjmnprstu--112233447733~jZ1OBV6H8K8L8L9M9M9O;O;P9O@WMkMkLiLiKiKhJfGcKfJfJeHdGcG`@`8a9a9a9c9c;c;d;e<f<f=h=h9a8_@_@ _@ _> _@ _@ ^> ^C$aG(eG)eG)fF)dF(eG(fG(fE'dG'eE(aG*f>%Y6"K7#L6"J/@1#@6%F7$J2#C>2M-'*9FEFFFFGGHJH=2((/6GY\`dfkx''))))))****,,((""zpfV'facaaaaaca>QMU[`fiihknprsuw**,,--..1122--wdR7LAV6H8K8K8L9M9M9O;O;P9P@ZOnOnMmMmJfHdC\>T=R8J8H6H7H<P7Q1P4W8_8_9c<h<h<i=i=i=j=i9c8`@_@ _@ _@ ^@ ^@ ^> \A$_E'dF(dF(eE(cE(`E(aE(aE(aH(eG)cH*eF*cH*fG*fH*fG)fH-dM1iM/nL/mZ@y.$)$,$. ,EFFFGGGGGHE9.,18>O[^`dfjx%%''''(((())))'' ~wmcP.j^[[[[[^T1rVTZ`ehhedfjmortuw%%''(()),,--((o^#L<L@V6H8K8K8L;O;O;P<Q;O8L@UG`CZ@U=P/<*4)4'1(/'.%-%-%-'/%1#1$3%4#3)>1L/K/L6W4W6Y;c7^7\@cA cB cA aA _A `@ ^B$_E'eF(fF(fF(fG(iG(iG(iG(iH(hG)eJ,iF)dF)dF)dF)dF)dH-dL1hM/mM/n\A}7'.$M42#  8EGGGGHHHHB6.3;AHRZ^adhkx$$$$%%%%''''''$$|si^M;xYUUUUWBdZZ_dfeda`aeiknrtuw ""##$$''((""~hV,H9LAY7J7J7H4F2C3E/=1>,6%-)1*/*/49,1).18*2-4/8)2*4,4(1(1#,,* ,"- , -"."/#2)7,91A.<2=4H3H2F4K7O4K7O>#[C%cE'cH)jH)jJ)jH(jH(jH(kH(jF)fJ,jF)eF)dF)dF)dF)dH-dL1hM/nM/n\A|1%,'<GGHHHHHG>36=CKQV[^aehkw""####$$$$$$%%##xndYTJOMOPK/n^`_cdca`^\\`dhjmpsuw~~ ~##~uaO4G<L8G.;(1#)#)#)#*")"($)$*%-*.*.(,*-*.-1*.,/,/)-376;)-.3*2#-(3 ( )#)(/-8,4,37 A6 <-1.1.1',"* (#*%.$-%.(2)4*66"K7"M7"O>$W>$Y>$YB%_F(cG*fG)eH*hH*hF*eF)eG-dL1hM/nM/n\A|'$%# 2#A,,1#H/M3"$*AJHHHJJF;8>GMRTV[_aeimw """"""####""}ti`UR@kArCwCw;kKHV`a`_^\[YY[_ceikortxzyyxwwwoW1H8HE$LF%LC$H< B4;64 J6"J;$QA'ZJ.cL1iM/nM/n\A|^,CP4c>d@a>mFyMxL| M~ OF.e@"T"TnF #/EHJJJJB<CKQQPPU[_cfimw "" yoe[QC)A.B3@4912AKV\ZYWVUTWZ^adhjnprrppppoopc3K8H6HE$LJ%QF%LG'MJ'PJ'PH%OH%OG%MF$ME$K@"FB"JB%E@$A7 9-/.1,.,.,.-1@%C=$@7 9476 824-2-1.2,/,/..//12.//1/2.17"92 4,/28-3-47"A(2(2)4(3*6*4)3'2'2(3'2%1'1)4,4=%EE*LO/WU3_P2aK/iM/mM/n\A|3c"T"R"R"R"R Q Q Q"PF-eA"R~ P"Q[=$6FJJJG@EMPPMLPUZ_cfjmw}ukaWK17;48696;8;826BLUVTRQPRVY\`cfiihhhhhhfhhZ 4(/-;4EC$JG%OF%LF%MG%OG%MG%MH%OH%OH%PK'QK(QM(UR.UR.UP-TM-QM-QG)KO.RL-PH)LA'C36,-(*(*),',(,).*..3./././././././-../-/*.*.-114-/133"9,22 9/6)/6"=2 =(32 =A(LF*PP/ZU2^[4d[4dZ4aY3`P2aK/iM/mM/n\A|3_"P"P"P"P"P"P"P~"P~"PE-eA#R~"P~"P#TB3%<HKKEGMOMKJKPUZ_cfjnw~~~~zrf^RF7777889;89;;;9,77BMQOMLMQUY[^_______^\^ _.V,J3C2@,9-;,8@$FB%G@%BA%EA%EF%KF%LH%MH%OH%PK'QJ'PL'RP-TP-RP-TP-UQ.TR/U\7_U2WP.QQ/TM.PO.QG*KG*KF)J>%C=%B/3.2/3.1-/,.-.././/1/1/1./-/,1,1,/-/,/*-*-,..11"4H,LQ1UQ1VY4c\6f[6e[6fY4cW4aW4aW4aY3`P2aK/hM/kM/m\Ay3`"Q"Q"Q"P"P"P"P"P"PE-eA#R~"P~"P"Qw"M.--@KJJMMKHGFJOTY^cfjnwzzz||||||wncYQ">646632,'2.88;8=;2=CCKJGHLPTVVVVVVUUUUU7ZG[\\KO2B4F4G6G6H8JE$MG%PE%JC%HB%GC%GC%GC%GA%EC%GE%HH'MK'PP-RM-OL-OL-OM.QO.Q[7^U2WP.RR/UT/VT/VT1WT1WT1WU1YU1ZP.UP.UO.RL.OG,HC)EE)F7#81 21 2/1/1,-*-,/,.)-,..22 4C*GK/OU3W[6__8c_8c\6aY4eY4dW4cY6dW4aW4aW4aW6aY6aQ3cK/iM/mM/n\A|3`"Q"Q"Q"Q"Q"Q"Q"Q"QE.eB#R~"P~"P~"P#Rn H'3CKKJHGEEEJOTY^afkotwwxxxxxxytiaU1' $#" "#' )#1*HKCCEEHKLLLLLLKJJK(QGZV\c^`\`^GO1B4E4F4F4G7GE#LH%PF%KF%MF%MG%OG%OG%MG%MF%KF%KF%KF'KM-PM-PO-QP-RP.TQ.T\7aV2ZQ.TR.UR/UR/UR/VR/VQ/VQ/VR/WT/YT/YY3\Y4ZY4ZZ4[[4\W2YV3WR1TM.OK-LC*EC)F9$<4"8E*HK.MU3W[7^`;c`;c_9a_9a^8`^8`Z4`Y4dY6dY6cZ7dY7aY7aY7aY7cZ7aQ4cK/iM/mM/n\A|3`#Q#Q#Q#Q#Q#Q#Q#Q#QE.eB$T#Q~#Q~#P~#P$RW>(8FGFECAACHMRW\afjosssttttttupiR,########""%$ 3BBBBBBBBA@@'KCVT[a_d``^^^\\_^GO1B4E4E4F4G7GE#LH%OE%KF%LF%LG%MG%MH%OH%OH%OJ%PJ%PK'TP-RP-RP-RP-TP-TP.T\7`V2ZP.TR.UR/UR/UR/VR/VQ/VQ/VR/WR/WR/WV2[W3YW3YW3YY3ZZ3[Z3[Z6[Z6\[6\Z6\Y4\V3ZY4\`9d`9d^7a^7a^9`^9_^9_^9`^9`^9`Z7_Y7aY7cZ7c[8dZ8aZ8aZ8aZ8cZ8aQ4aK/iM/nM/m\A|4`#Q#Q#Q#Q#Q#Q#Q#Q#QF.eA$T#Q#Q~#Q~#Q#Q#QG8*=CBA@==CHMQW\aejmnnoppppprssQ  $$$$$$$$####"$#'188888684JO[ddieda``________a`HP1B4E4E4F4G7GE#LH%PE%KF%LF%LG%MG%MG%MH%OH%OJ%PJ%PK'RP-RP-RP-RP-TP-TQ.T^7aW2ZP.TR.UR.UR/UR/UR/VR/VQ/VR/WR/WR/WW2[W3YW3YW3YY3ZY3ZY3ZY4ZY4[Y4[W4ZV3ZW3Z[6_^8a\8`\8`^8`^9`^9`^9`^9`^9`^8`Z7_Y7aY7aY7a[8dY7aY7aZ7aZ8c[8cQ4cK/iM/nM/m\A|4a#R#R#R#R#R#R#R$R%UV8cA%T$Q$Q$Q#R#R#T#T<71>>=;9=BGLQV\`adeffhijkknskG#%$$$$$$$$$$$$$$$%# $(('-(B$4T%B`'PPLVU^^acde__WWGGJL>K2C3E4F4F4F6GE#KH%PE%KF%LF%LG%MG%MG%MH%OH%OH%OJ%PL'RP-RP-RP-RP-RP-TP.T^7aW2ZP.TQ.UR.UR/UR/UR/VR/VQ/UQ/VR/WR/WW2[W3YW3YW3YW3YY3ZY3ZY4ZY4[Y4[W4ZV3ZV3ZZ7^^9a^9a\9_\9`^9`^9_^9`^9`^9`^9`[7_Y7`Y7aY7a[8dZ7cY7aZ7aZ7cZ8cP2`J.hM/kM/k[@y4a#R$R$R$R$R$R$R$R%VY;eB%V$T%U%U$Qy$Mx$Li"Ef"B#,49767<AGLQUWZ[\\^_``aeiYE (''%%%%%%%%%%%%###"$/ 6%$9'%<)(8''>*(O21<)'%'$%(<6FA1-(';;KLHQ1C3F4F4F4F6GC#KH$OE%KF%LF%LG%MG%MG%MH%OH%OH%OH%OL'RO-RP-RO-RP-RP-TP.T_7aW2ZP.RQ.TR.TR.UR/UR/UR1UQ2TR2TR/VR/WW2[V3WW3YW3YW3YY3ZY3ZY3ZW4ZY4ZW3ZV2ZV3ZZ7\^9`^9`^9`^9`^9`^9_^9_^;_^;_^9`Z8^V7\W7^W7\Z7aY7`Y7aY7aY7`Z8aO2_F,cK.iK.iZ@w6a$R$R$R$R$R$R$U$W%UT7_>m#Ff"CW";U 8>,(*%('*6636<AFKMOQRTUVVWZ\ZM =1"%2"-(%$''''%$#$##*3##9'';((=));''L22L22. --)"#%%%%%#""%4,F@9;.82A4E6H4G6HC#LG$PE%KF%LF%LF%LG%MG%MH%OH%OH%OH%OL'RO-QP-QP-RP-RP-RP-T_7aV2ZP.RQ.TQ.TR.UR/UR/UR2TQ3QR3RR3RR3RV4WV4WW4WW4YW4YW3YY3ZY3ZY4ZY4ZW4YU3WU3VY7Y\9^^;_^;_\9_^9`^9`^9`^;`^;`^;`Z8^W7\W7^W7\Y8`W7^Y7_Y7_W6^Y7^L1YB,\G,eF,dV=r6a$R$R$R$R$R$Rc#@T 8>,%(%%""$$%%( .116;@BEFGJKLMMPRQ@ *')**7%%7$$1""/ (#$"(1""=((<((C,,;''L11U77>))*. ,""%%%''''''''''''$"#%')'.2/83@B#JJ$RF%MF%MF%MF%MG%MG%MG%MH%OH%OH%OL%RO,QO-QO-RO-RP-RP-T_7aV2ZP.RQ.TQ.TR.UR/UR/UR2TQ3QQ3QQ3QR3RV6VV4VV4VW4WW4WW4WY4YY4ZY4YW6WV6WV4WV4W[7\_;`_<`^<`\;_\;_^;^^;_^;_^;_^;_Y8\U7[V7\W7_Z8cW7^W7^Y7`Y8`Z8aK1W>)V@([C*`R)VA)[A)[Q;j7c%T%T%T%T%U}%Q8#%6$#6$$2""-(''((((((((($*-/123679;<81'('%%$,3##>))>))E--B,,Z88V66@))@**U44@))4##,(%%')))))))))))))))))))))(((((((((('%''(-%7"6<#>=#AA"HE#LH%OK%QO,RO-QO-RO-RP-RP-R_8aV3ZP-RQ.TQ.TQ.TR.UR.UR2TQ3QQ3QQ3QQ3QW6WV4VV4VW4WW4WW4WW4WW4WW4WW4WV4WU4WV4VZ8\`HG%OJ%QO,QO-QO-QO-RO-RP-R`9cW2ZO-RP.RP.QP/QP/RQ/RP2PQ3QQ3QQ3QQ3QV6VV4VV4VV4VW4WW4WW6WW6WW4WW4WV3WU3WU4V[8\aca>ca=ca=ca=ca=ca=ca=cada>da>da>ca>da>da>da=ca=ca))<''K//i@@K11C,,;''6$$)())*,---------------------------------,*,1"";%%;''G,,H--;%%/ -),,*')-3##O22Y77f@@rEEzJJzJJwHHuHHtGGtFFsFFsFFsFFsFFrFFrFFrFFsGFf>HF'KG'KJ(MJ-KF,FG.GH/HG.GY8WT6TK.KM/MM1MM1MM/MM/MO/OO1OO1OP1PP1PU3UU3UV3VV3VV3VV4VW6WW6WV4VU4UU3UU3VT3U\9^d>ec>dc>dc>dc>ec>da>da>da=da=d^9`\;a\>3##3##-*---------.............................-----,*.6##@((=''H--@((/ . 4##P33Z88hAAsFF|JJ|JJyHHwHHuGGuGGuGGtGGtGGtGGtGGsFFsFFsFFrFFrFFrFFtGFe@EC-CC,EC-CE.CF.FF/FF/FF.FR7RO4OH-HJ.JL/LM1MM1MM1MO1OO1OO1OO1OP1PU4UU3UU3UV3VV3VV4VU4UT3TT3TU3UU3UU3UT2T[8\c>dc=cc>dc>dc>dc>ec>dc>dc>dc=d^;`\><''B**>((8%%/ -...... . . . . . . . . . / / / / / / / / / / . . . . . . . . . . . . ....--,().9%%a;;\88f>>uGG}KK}KKzJJxJJwHHwGGwGGuGGuGGuGGuGGtGGtGGtGGtGGsGGsGGsFFsFFrFFrFFtGGe@FC-CE-EC-CC-CE-EE.EE.EE-ET7TP4PF-FH.HH/HG.GJ/JJ/JL/LO/OO/OO1OP1PU4UU3UU3UU3UR2RR2RT3TU3UT3TT3TR2TR2TR/RZ6[a=cah^=d\><''A))B))C,,@));''3"".-/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / . . ,)- 1""6$$R33`;;nBBwGG|JJf<c`=a`=a`=a`=a`>;''A))B))B**C**F,,E,,>((6$$/ ./ / / / / 1 1 1 1 1 1 1 1 1 1 1 1 1 / / 1 1 1 1 / / / / / / .*. 1 >((W77e==oCCxHHLLLL}KKzKKyHHe<ca=ca=ca=ca=c`=aa>;%%A))B))B**C**E**E,,G--F,,A))7$$/ / / 1 1 1""1""1""1""1""1""1""1""1""1""1""1""1""1""1""1""1""1""1 /.,,/3""8$$V66f==oCC|KKLLKK~KK}KKzJJzJJzJJyJJyJJe<ca>ca>ca=c`=c`=aa>;%%@))B))B**C**C**E,,F,,F,,H--G--B**<''6$$/ 1""1""2""2""2""2""2""2""2""2""2""2""2""2""2""2""/ / - ,4$$A**P22Z77d<dc>dc>dc>dc>ca=ca=ca=ac>;%%A))A))B**C**C**E,,F,,F,,F,,G--J--J..H-->((8%%2""1""2""2""2""3""3""3""3""3""2""1 / . .6##@))M11\88yHH~LLMMMMLLLLLL~KK}KK}KK}KK|KK|JJ|JJ|JJzJJzJJzJJzJJyJJd<*>P6PM4ME-EJ/JM1MO2OP4PL1LH/HG-GF,FF-FF-GG.GH.HJ.JJ.JJ.JJ.JK.KL.LK-LM-MP.QL.OL-MU6W^=a^cd>cd>cd=dc=dc=c[8\W6ZY8[Y9[T4VB)G3 <@'HR1Z`8hQ6^F2\J1dJ1dZBr=j,Z*Y*W*W*Y*T8#'3#"6##6$$7$$8$$8%%9%%;%%;''<''<''=''9%%Y88e>>;%%A))A))B**C**C**E**E,,F,,G,,G--H--H--J..K//L..E**8$$3""2""3""3""3""2 1 -1 7##@))O11\88zHH~KKMMOOMMLLLLLLKK~KK~KK~KK}KK}KK}KK|KK|JJ|JJzJJzJJzJJzJJzJJzJJd<d_=a\<_^<`\;`^;a_>;%%A))A))B))C**C**E**E,,F,,G,,G--H--H--H--J..K..L..M..F,,;''3##/"". 7%%C,,Q33f>>~KKLLMMOOMMLLLLLLLLLLLLLL~KK~KK~KK~KK}KK}KK}KK|KK|JJ|JJzJJzJJzJJzJJzJJzJJd<U[C[;-;/'/1#17#8<%>B)BF,GG,GF,FE*EE*FE*FG,GH-HJ-JJ-JJ.JK.JK.LK-LK-LL-ML-MK,LT4U^=_^<_\<_\<_`=c_>;%%@))A))B))B**C**E**E,,F,,G,,G--H--H--J--J..K..K..K..M11O11E**L//`;;}JJMMOOPPOOOOMMLLLLLLLLLLLLLLLLLL~KK~KK~KK~KK}KK}KK}KK|KK|KK|JJzJJzJJzJJzJJzJJzJJd;;oCCzKKyJJyJJyJJxJJxJJxJJxJJwJJwJJwJJwHHuHHuHHuHHuHHtHHtHHtHHtJJuJJuJJwKJiEKK6KJ6KK6KK6KK6KK6KK4KH2HY>YQ9QC.EB*C8";./--)*238#8@(@F*FG,HG,HH-HH-HJ-JJ-JJ-JK-KK-KK-KK-LK.LL.MK,LU4V_=`^<_^<_\<^\;\^<_`=``=aV6YE*J<#EB(O_8jd;ne>;%%@))A))B))B**C**E**E,,F,,F,,G--H--H--J--J..K..K..L..L//L//J..mAARROOMMMMMMMMMMMMLLLLLLLLLLLLLLLLLL~LL~KK~KK}KK}KK}KK}KK|KK|KK|JJzJJzJJzJJzJJzJJzKKd<23-.*--.4"6<%`^=_^<_^<_`<`^<_R3TC*F<%@Q2Ua9fd9oe;pc>;%%@))A))B))B**C**C**E,,F,,F,,G--H--H--J--J..K..K..L..L//M//J--i>>PPMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLL~LL~KK~KK}KK}KK}KK|KK|KK|KK|JJzJJzJJzKKzKKzKKzKKd<(>B)BG,HK-KK-KK-KK-KK.KK.KJ-JT6U_>__=^_>`^<_T6U<%>9#=J-Ld=hjAna9hc6nd6oc8j`8h_9h`;i`;j`;ia9iQ6_C3UE3VE3VUCf=h,Y,Y,Y,Y,Z*U8#%3#"4##6$$7$$7$$8%%9%%9%%;%%;''<''<''9$$Y77e>>;%%@))A))A))B**C**C**E,,F,,F,,G,,G--H--J--J..K..K..L..L//L//J--i>>PPMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLL~LL~KK~KK}KK}KK}KK|KK|KK|KKzKKzKKzKKzKKzKKzKKzKKd<'>9%94"62 29%9A(BF*FJ-JL.LM/LK-JV6Va@a[;[Q4R>'A;$>J.Oe=hkAni@kh>ka9hc6oe7ra7j^6c\7d\7d`7h_9f`9hQ6\B3UF3WF3YUCe=h,Y,Y,Y-Z-[,V8#%3#"4##6$$7$$7$$8%%8%%9%%;%%;''<''<''9$$Y77e>>9%%@))A))A))B**C**C**E**E,,F,,G,,G--H--H--J..J..K..K..L//L//J--i>>PPMMMMMMMMMMMMMMMMLLLLLLLLLLLLLL~LL~LL~LL~KK}KK}KK}KK|KK|KK|KKzKKzKKzKKzKKzKKzKKzKKc<3 34 48#9='=H,HR3TE,F9#;G,JY6[e>ikBoj@mi@mi@mjAmc9hd6oe7ra7k^7d^7e^7e^7eZ6_[4`J7M;9>>7F@7JTCc=i-Z-Z-Z-Z-[,V8#%3#"4##6$$7$$7$$8$$8%%9%%;%%;''<''<''8$$Y77e>>9%%@))A))A))B**C**C**E**E,,F,,G,,G--G--H--J--J..K..K..L..L//H--i>>PPMMMMMMMMMMMMMMMMMMLLLLLLLLLLLL~LL~LL~LL~KK}KK}KK}KK|KK|KK|KK|KKzKKzKKzKKzKKzKKzKKc<i-Z-Z-Z-Z-[,V8#%2#"4##6$$7$$7$$8$$8%%9%%9%%;'';''<''8$$Y77e>>9%%>((A))A))B))B**C**E**E,,F,,G,,G--H--H--J--J..J..K..L..L//H--i>>PPMMMMMMMMMMMMMMMMMMLLLLLLLLLLLL~LL~LL~LL}KK}KK}KK|KK|KK|KK|KK|KK|KK|KKzKKzKKzKKzKKc<i-Z-Z-Z-Z.[-V8#%2#"4##6##7$$7$$7$$8%%9%%9%%;%%;''<''8$$Y77e@@9%%@((@))A))B))B**C**E**E,,F,,G,,G--H--H--J--J..K..K..L..L//H--i>>PPMMMMMMMMMMMMMMMMMMLLLLLLLLLLLL~LL~LL~LL}LL}KK}KK|KK|KK|KK|KK|KK|KK|KK|KKzKKzKKzKKc<i-Z-Z.Z.Z.[-W8#%2#"4##6##6$$7$$8$$8%%9%%9%%;%%;''<''8$$Y77e@@9%%@((@))A))B))B**C**E**E,,F,,F,,G--H--H--J--J..K..K..K..L..H--h@@PPMMMMMMMMMMMMMMMMMMLLLLLLLLLLLL~LL~LL~LL}LL}KK}KK|KK|KK|KK|KK|KK|KK|KK|KK|KK|KKzLLa;;kBB}MMzKKzKKyKKyKKyKKyKKxKKxKKxKKxKKwKKwKKwKKwKKwKKwKKxLLxLLxLLxLLxLLzMLhAH>%>@(AC-CG2GG4GJ6JJ6JF3F^<`_4eH#ML%PL'RL'RM'TM'TO'TO'TP'UP(UP(VQ(WQ-UQ.TQ.TR.UR/UT/UT/VT/VT/VT/VU/VR.U_9amEnkCmkCmkCmkCnkBokBokBokBomCod$@@$@B%BH)HF,FH2HE3E\<`_4eH#ML%PL%QL'RM'RM'TO'TO'TP'UP(UP(VP(VQ-UQ.TQ.TR.UR.UR/UT/UT/VT/VT/UT/UR.T`9anEnkCnkCnkCnkEomEomComCpmCpmCpa9h[1fj;wf9oa9h`9h`9i`8h\7c_8dC%M668999888JJJ@j.[.[.[.[.\.W8#%2#"4##6##6$$7$$7$$8$$8%%9%%;%%;''<''8$$W77e@@9%%@((@))A))A))B**C**C**E,,F,,F,,F,,G--H--H--J--J..K..K..K..H--h@@QQMMMMMMMMMMMMMMMMMMMMLLLLLLLL~LL~LL~LL~LL}LL}KK}KK|KK|KK|KK|KK|KK|LL|LL|LL|LL|LL|LL`;;i@@}MMzLLzLLzLLyLLyKKyKKyKKxKKxKKxKKxKKxKKxKKxLLxLLxLLxLLxLLxLLxMMxMMzOMhBJ@$AB%CF%FE%EC$CA$AA%A@'@Z8[_4cH#MK%QL%QL'RM'RM'TO'TO'TO'UP'UP(VP(VQ-UQ.TQ.TQ.TR.UR/UR/UT/VT/VT/UT/UR.T`9cnEpkCnmCnkCnkEomEpmEpmEpmEpnEra9fZ1fj((@))A))A))B**C**C**E**F,,F,,G,,G--H--H--J--J..K..K..K..H,,h>>QQOOMMMMMMMMMMMMMMMMMMMMLLLLLL~LL~LL~LL}LL}LL}LL|KK|KK|KK|LL|LL|LL|LL|LL|LL|LL|LL|LL`;;h@@}MMzLLzLLzLLyLLyLLyLLyLLyKKxKKxKKxLLxLLxLLxLLxLLxLLxLLxMMyMMyMMyMM|OMjBKC$CC$CA%A@%@A%AA%AA%A@#@W6WW6WA#BF%HH%LL%QL'TM'TM'TO'TO'TP'TP'UP(VP-TQ.TQ.TQ.TR.UR.UR/UR/UT/UT/UT/UR.Ra;coFrnEnnEnnEonEpnFrnFrnErnEroFrc;h[1fm=xf((@))A))A))B**C**C**E**F,,F,,G,,G--H--H--H--J..J..K..K..G,,h>>QQOOMMMMMMMMMMMMMMMMMMMMLLLLLL~LL~LL~LL}LL}LL}KK|KK|LL|LL|LL|LL|LL|LL|LL|LL|LL|LL|LL`99i@@}MMzLLzLLzLLzLLyLLyLLyLLyLLxLLxLLxLLxLLxLLyLLyLLyMMyMMyMMyMMyMMyMM|POjCLA$AA$AA%AA%AA%AA%AA%A>#>W7WW7W@#@B%BC%BC%EG'JJ'MM'RO'TO'TO'TP'UP(VP-TQ.RQ.TQ.TQ.TR.UR.UR/UR/UT/UT/UQ.Ra;cpGsnFpnFpnFpnFpnFroFroFrnEroFrc;h[1fm=xh>9%%>((@((A))A))B))B**C**E**E,,F,,G,,G--G--H--H--J--J..K..K..G,,h>>QQOOMMMMMMMMMMMMMMMMMMMMLLLL~LL~LL~LL~LL}LL}LL}LL}LL|LL|LL|LL|LL|LL|LL|LL|LL|LL|LL|LL`99i@@}MMzLLzLLzLLzLLyLLyLLyLLyLLyLLyLLyLLyLLyLLyMMyMMyMMyMMyMMyMMyOOyOO|PPiBJA$AB$BB$BB%BA%AA%AA%A>#>Y7YY7Y@#@C%CC%CB%BE%EK'KR'TM'TO'UO'TP'UP'UP-TP.RQ.TQ.TQ.TR.TR.UR/UR/UR/UT/UQ.R`;crGsoFpnFpnFooFroFsoFsoFroFroFsc;i[2fm=xh>8%%>((@((@))A))B))B**C**E**E,,F,,F,,G,,G--H--H--J--J..J..K..G,,h>>QQOOOOMMMMMMMMMMMMMMMMMMLLLL~LL~LL~LL~LL}LL}LL}LL}LL}LL}LL|LL|LL|LL|LL|LL|LL|LL|LL|LL`99i@@~MMzLLzLLzLLzLLzLLyLLyLLyLLyLLyLLyLLyMMyMMyMMyMMyMMyMMyOOyOOyOOyOO}PPjBK@$@@$@B$BE%EC%CE%EC%C@#@Y7YY7Y>#>A%AF%FK%KR%RV%VQ'QJ'OL'QM'RO'TP'UP,TP.RP.RQ.TQ.TR.TR.UR.UR/UR/TR/TQ.Rapd>kd>8$$>((@((@))A))B))B**C**C**E,,F,,F,,G,,G--H--H--H--J..J..K..G,,h>>QQOOOOMMMMMMMMMMMMMMMMMMMMLL~LL~LL~LL~LL}LL}LL}LL}LL}LL}LL}LL}LL|LL|LL|LL|LL|LL|MM|MM`99i@@~OO|MMzMMzLLzLLzLLyLLyLLyLLyLLyLLyMMyMMyMMyMMyMMyMMyOOzOOzOOzOOzOO}QPjCLA$AA$AA$AA$AA%AB%BE%EA#AY7YY7YB#BL%LT%TV%VT%TU%UR'TM'QL'QH'MK'PK'QO,RP.RP.RP.RQ.TQ.TR.TR.UR.UR/TR/TP.Qase>md=jdAhdFdcFceEdLALF4OH(Z=%HC4KBj1\1\1\1\1\2_k,H1" 3##4##6##6$$6$$7$$8$$8%%9%%9%%;''7$$Y88e@@8$$=((@((@))A))B))B**C**C**E,,F,,F,,G,,G--G--H--H--J--J..K..G,,h>>QQOOOOMMMMMMMMMMMMMMMMMMMMLL~LL~LL~LL}LL}LL}LL}LL}LL}LL}LL}LL}LL}LL|LL|LL|MM|MM|MM|MM_99i@@~OO|MMzMMzMMzMMzLLzLLyLLyLLyMMyMMyMMyMMzMMzMMzOOzOOzOOzOOzOOzOOzPP}RQjCL@$AA$AA$AB$BB%BA%AA%A>#>^8^c8cQ#QV%VU%UU%UT%TT%TQ%TM'RM'TO'TM'RK'PL,OP-PO.QP.RQ.TQ.TQ.TQ.TQ.TR.TR/TO.Pah\3fo>|j>tf@kfEheHedGdcFceEeLAKF4PZ.rY1ne@xBj1\1\1\1\/[.[P(62#"3##4##4##6$$7$$7$$7$$8%%9%%9%%;%%7$$W88e@@8$$>((>((@))A))A))B**C**C**E,,E,,F,,F,,G,,G--H--H--J--J..J..G,,h>>QQOOOOOOMMMMMMMMMMMMMMMMMMLL~LL~LL~LL}LL}LL}LL}LL}LL}LL}LL}LL}LL}LL}MM}MM|MM|MM|MM|MM_99h@@~OO|MM|MMzMMzMMzMMzMMyMMyMMzMMzMMzMMzMMzOOzOOzOOzOOzOOzOOzPPzPPzPP}RQjCL@$AA$AA$AA$AA$AB%BF%FH#Hk8ki8iQ#QT%TT%TT%TT%TT%TQ%TL'RM'RO'RO'TO'UO'VP)TP*RO.QO.PP.QQ.TQ.TP.RQ.RR/TP.Qc=dtKurJtrJtrJtrLppMppMpoLooLopLpaBaW((>((@))A))A))B**C**C**E**E,,F,,F,,G,,G--H--H--H--J..J..G,,h>>QQOOOOOOMMMMMMMMMMMMMMMMMM~MM~LL~LL~LL}LL}LL}LL}LL}LL}LL}LL}MM}MM}MM}MM}MM}MM}MM|MM|MM_99h@@~OO|MM|MMzMMzMMzMMzMMzMMzMMzMMzMMzMMzOOzOOzOOzOOzOOzOOzPPzPPzPP|PP~QQkELA$AA$A@$@A$AF$FP%PU%UR#Rn8ni8iP#PT%TT%TT%TT%TT%TQ%RL%RM'RM'RO'TO'TO'UO'UP'VP(VP*UP.QP.QQ.RP.RR.TR.TP-Qc=dtMwrKtrKtsKtsMspOppMppLppLppMpaBaW>WjMjiLihKhfJffHfeGedGdhFhK@HF4PY.nV.kfAyAj4_=cPjds}zyz6((2 6##7$$6##6##6$$7$$7$$8%%9%%9%%;%%7$$W88e@@7$$>((>((@))A))A))B**B**C**E**E,,F,,F,,G,,G--G--H--H--J--J..F,,h>>QQOOOOOOMMMMMMMMMMMMMMMMMM~MM~LL~LL~LL}LL}LL}LL}LL}LL}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM|MM_99h@@~OO|MM|MMzMMzMMzMMzMMzMMzMMzMMzOOzOOzOOzOOzOOzOOzPP|PP|PP|PP|PP|PP~TQmCMC EB#BC%CO$OU$UU$UT%TQ#Qn8ni8iP#PT%TT%TT%TT%TT%TQ%RL%RM'RM'RM'RO'TO'UO'UO'UP'VP(VQ(VQ)VQ-UQ.UQ.TR.RP,Qc=euMwtKttKtsKurMsrOrrOrpMppLprMrcBcW>WkMkiLiiKifJffHfhHhdFdQ@Q9<8H4RW.mV.jeAyuz~}~yyy6('1 3""6$$8%%7$$6$$7$$7$$8%%9%%9%%;%%7$$W88e@@7$$>((>((@((A))A))B))B**C**C**E,,E,,F,,F,,G,,G--H--H--J--J..F,,f>>QQOOOOOOOOMMMMMMMMMMMMMMMM~MM~LL~LL}LL}LL}LL}LL}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM_99h@@~OO|MM|MM|MMzMMzMMzMMzMMzOOzOOzOOzOOzOO|OO|OO|PP|PP|PP|PP|PP|PQ|QQVRoBOFFMO__V#VR%RT%TT$TQ#Qm9mi9iP#PT%TT%TT%TT%TT%TQ%RL%QM%RM'RM'RO'RO'TO'UO'UP'VP'VP(VQ(VQ(VQ(VP(VP*TO*Qc=ewOxtLutLwsLurOsrOrrOrrOrpOprMrcBcY>YmMmiLiiKihKhjJjYCY=8=3638;7H6RW.mU.je@yyxx6''1 3""3##7$$9%%7%%6$$7$$8%%8%%9%%9%%7##W88e@@7$$=((>((@((@))A))B))B**B**C**E**E,,F,,F,,G,,G--H--H--H--J..F,,f>>QQOOOOOOOOMMMMMMMMMMMMMMMM~MM~MM~LL}LL}LL}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM_99hAA~PP|MM|MM|MMzMMzMMzOOzOO|OO|OO|OO|OO|OO|PP|PP|PP|PP|PP|PP|QQ~TTTRsGPV$KCEQRmmff``W"WT$TP$Pn;nj;jP#PR%RT%TT%TR%RT%RQ%RL%QL%RM%RM'RM'RO'TO'UO'UO'UP'VP(VP(VP(VP(VP(VP(UL%Ra8huLztLuuMwuMwtPtsPssOssOsrOrsOsaCaY>YmOmiLijLjkLkUBU3433436668;7H6RV.mU.je@xyyy6''1 3""3##4##7$$9%%9%%7$$7$$8%%9%%9%%7##W88e@@7$$=((>((@((@))A))A))B**C**C**E**E,,F,,F,,G,,G--G--H--H--J--F,,f>>QQOOOOOOOOMMMMMMMMMMMMMMMM~MM~LL~LL~MM~MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}OO}OO_;;iAAPP|OO|OO|MM|MM|OO|OO|OO|OO|OO|OO|PP|PP|PP|PP|PP|PP|QQTTTTpJJQ44<.A((@((@))A))A))B))B**C**E**E,,F,,F,,F,,G--G--H--H--J--F,,f>>QQOOOOOOOOMMMMMMMMMMMMMM~MM~MM~MM~MM~MM~MM~MM~MM}MM}MM}MM}MM}MM}MM}MM}MM}MM}OO}OO}OO}OO_;;hAAPP|OO|OO|OO|OO|OO|OO|OO|OO|PP|PP|PP|PP|PP|PP}PPRRTTkFFO338$$A**eEAj@LEEQQjjiiffffffeeeeWWR#RR'RR'RR%RR%RR%RP%QK%QL%RL%QM%RM'RM'RM'TO'UO'UO'UP'VP'VP(VP(UP(UP(UL%Ra8hwK|sHxsHxrHwoPooQopQprPrsPsuPudBdZ=ZpPpYCY8681314444444446668;7H6QV.kU.ie@x~~~~~~yxx6''1 3""3##4##4##6##6%%;''<%%8$$8%%9%%7##W77e@@7$$=((>((>((@))A))A))B))B**C**C**E**E,,F,,F,,G,,G--H--H--H--F,,f>>QQOOOOOOOOOOMMMMMMMMMMMM~MM~MM~MM~MM~MM~MM~MM~MM~MM}MM}MM}MM}MM}MM}MM}OO}OO}OO}OO}OO}OO_99hAAPP|OO|OO|OO|OO|OO|OO|OO|PP|PP|PP|PP|PP}PPRRTTjFFL227$$A**cAA}RRYVoAPEEOPiihhhhffddddddWW\\\\VVR%RQ'QR%RP%QK%QL%RL%QL%QM%RM'RM'TO'UO'UO'UP'UP'VP(VP(UO(UP(UL%Ra8hwK}tHztMxrUsoUnnQnnQnnPnoMosOseBeV;VL7L2(21)13.34344444644448;7H6QV.jT.id@w~~~~~~~~~xxx6''1 3""3##4##4##6##6$$7$$;''<''8%%9%%7##W88e@@7##=((>((>((@))@))A))B))B**C**C**E**E,,F,,F,,G,,G--G--H--H--F**f>>QQOOOOOOOOOOMMMMMMMMMMMM~MM~MM~MM~MM~MM~MM~MM~MM~MM~MM~MM}MM}MM}OO}OO}OO}OO}OO}OO}OO}OO_99h@@PP}OO|OO|OO|OO|OO|PP|PP}PP}PP}PP~QQRRRRkFFM228$$H//eBB|RRVV~TTVToAPEEOPiihhffffddddddWW^^``^^[[YYP$PK,KH-JJ*LL'QL$RM%RM%RM'RM'TO'UO'UO'UP'UP'UP(UO(UO(TL%Rc8ixK}pHsnLooPppTrrUrpQpnMnnMnsOs[A[6)6/$/2'23'33%33(33,33.34348<7H6RV.kT.hd@w~~~~~~~~~~~~~~~xww6''1 3""3##4##4##4##6$$7$$7$$<''=''9%%6##W88e@@7##<((>((>((@((@))A))A))B**C**C**E**E,,F,,F,,F,,G--G--H--H--E**f>>QQOOOOOOOOOOMMMMMMMMMMMM~MM~MM~MM~MM~MM~MM~MM~MM~MM~MM~MM~OO~OO}OO}OO}OO}OO}OO}OO}OO}OO_99h@@PP}OO|OO|OO}PP}PP}PP}PP}PPQQRR|PPd@@J//9$$J11iEE}RRUU~TT}RR}RRVUnAPCCPPiihhffeeeeccddVV\\``__[[QQPPM M@2@F2EK/KJ,LL'QM$TM%TM'TM'TO'UO'UO'UP'UP'UO(TO(TK%Q`9drMtnKonJomHonKooLooLosQspPpP((@((@))@))A))B))B**C**C**E,,E,,F,,F,,G,,G--H--H--E**f>>QQOOOOOOOOOOOOMMMMMMMM~MM~MM~MM~MM~MM~MM~MM~MM~MM~OO~OO~OO~OO~OO~OO~OO}OO}OO}OO}OO}OO}OO^99h@@QQ}OO}PP}PP}PP}PP}PPQQTTwLL`>>C--;%%Q44hCC}RRUU~TT~RR~RR~TT~TTWUoBQCCOPhhhheeeeddddccVV__[[OOMMRR\\PP232868>4>@2@F.GJ,KK(MM'QM'UO'UO'UO'UO'UO'UP'UM(QF%J[9^sMtoKpoKroKprLsrLstOudBfA(B/ /4'47*76*64)44(43'33'34(44(44(46)6;'=B#LH$V[7j~~~~~~}}}}}}~~~xww6''/ 2""3""3##4##4##6$$7$$7$$8$$8$$;''<''Q44Y887$$=''=((>((>((@))@))A))B))B**C**C**E**E,,F,,F,,G,,G--G--H--E**e>>QQOOOOOOOOOOOOMMMMMMMM~MM~MM~MM~MM~MM~MM~MM~MM~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO}OO}OO}OO}PP^99h@@RR}PP}PP}PP}PPQQRRrJJ[;;@))=((T66sKKTTUU~TT~RR~RR~TT~TT~TT~UUWVoBQCCOOhhffeeeecccceeVVRRLLPP^^\\[[OO333464464/1/6/6=1=C1CG/GJ,LL(QM%UO%UO'UO'TJ'OF'HC%E[9^tOwpMsrMsrMsxPwuOu_;_<@2426/3234$66)78,87*76)64(44(44(47,69(=; A< BL2T~~~}}}}}}}}}~~~xww4%%/ 2""3""3##4##4##6$$6$$7$$8$$8%%8%%<''=''@((@))<''=((>((>((@((@))A))A))B**C**C**E**E,,F,,F,,F,,G,,G--H--E**e>>QQOOOOOOOOOOOOMMMMMMMM~MM~MM~MM~MM~MM~MM~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~PP}PP}PP^99h@@RR}PP~PPQQQQsJJU66<''A))Y88yOOTTTT~RR~RR~RR~RR~TT~TT~TT~TT~UUYVoCQCCMOhhffeeddeeddZZGGPP____[[[[[[OO232666666111/1/////./;/;@/@F.FJ.LO*RM'RG'JE'FE'GC$F\;^uQwsOtsOtwQxpJpM,O8;<>>AAC9<6814/2247'78*88,87*77)77,7>)CE$OB$KP4V}}}}}}}}}}}}~~~wuu4%%/ 2""3""3##4##4##6##6$$7$$8$$8%%9%%7$$F,,xKK_==9%%=''=((>((@((@))@))A))B**B**C**C**E,,E,,F,,F,,G,,G--H--E**e>>QQOOOOOOOOOOOOOOMMMMMM~MM~MM~MM~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~PP~PP~PP~PP^99h@@RRRR|PPmFFW88=''B**Y88zOORRRR~RR~RR~RR~RR~RR~TT~TT~TT~TTTTUUYWpCQCCMOhhffffff[[TTMMRR^^^^\\[[[[[[OO232666666/////////...,-,1/1>6>F8FJ1LL(PH'KF'HF'HC%F_<_wRxuQwtPu_<_C#E;<>@@B>@=@>AAB>A9<4814134"66'78,87-7>)CE$OC$Mf=o}}}}}}}}}}}}}}}www4%%/ 2""3""3##4##4##6##6$$7$$7$$8%%8%%6##Y88jCC=((@))=''=((>((>((@))A))A))B))B**C**C**E**E,,F,,F,,G,,G--G--E**e>>QQOOOOOOOOOOOOOOMMMMMMMM~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~PP~PP~PP~PP~PP~PP^;;jBBRRrHHP339%%B**Y99zOORRRR~RR~RR~RR~RR~RR~RR~TT~TT~TT~TT~UUUUUUZWoCRBBMOhhhh``TTOO^^ddUU[[^^\\[[ZZZZMM333666666//////......444;<;;<;242>1AKRM#TM(RH)KF'G_=`zU|tOuJ,L/3;=>A@A>@@A@B@A>@@AABAB>A8<47/4246%6=(BG%QY,cd>6##A))A))=((=((>((@((@))A))B))B**C**C**E**E,,F,,F,,F,,G--G--E**e>>QQOOOOOOOOOOOOOOMMMMOOOOOOOOOO~OO~OO~OO~OO~OO~OO~OO~OO~OO~OO~PP~PP~PP~PP~PP~PPQQQQV66\99T44;%%G--[;;zOORRRR~QQ~RR~RR~RR~RR~RR~TT~TT~TT~TT~TT~TT~UUVVVVZYoCQ@@OOffTTPPZZccccaaUU[[^^\\ZZZZZZMM222464666//////222999<<<777...*-*<.@EQERL TM(QJ'Ld@fmGoA"C/337>A@A>@>@>A@A@A@B@BAB@A@AABBC;=8<47E*K\.fU*[Z7_}}}|||||||||}}}www4%%/ 2""2""3##4##4##6##6$$7$$7$$8$$8%%6##W88d@@6##<((A))A))>))>((>((@))A))A))B**B**C**C**E,,E,,F,,F,,G,,G--C**e>>QQOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO~OO~OO~OO~OO~OO~OO~PP~PP~PP~PP~PP~PPQQRR}OOnFFL//<''H--^<F8>8<>@>A>A>A@B@B@B@A@AACAEBCABABBCBCL"MZ1^Y*^M'RZ8_||||||||||||}}}uuu4%%/2""2""3""4##4##6##6$$7$$7$$8$$8%%6##W88d@@6##;''<''A))B**@))>((@))A))A))B))B**C**C**E**E,,F,,F,,G,,G--C**e>>QQOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO~OO~OO~PP~PP~PP~PP~PP~PPRRRR|OOhAAJ//H--P11Y88|PPTTRR~QQ~RR~RR~RR~RR~RR~RR~RR~TT~TT~TT~TT~TTUUUUUUVVVVWW[YrETBBKKccffddaaaa``aaTTZZ\\[[ZZYYZZMM222444888999<<<777///------,,,,-*<.@CQEQHRMTMUMTOVOVGPBHCFAB@A@A@B@BABABABABABABBEACACO#PY(ZO)PT'WV)Za9f|||||||||||||||wuu4%%/2""2""3""3##4##4##6$$7$$7$$8$$8%%4##W88d@@6##<''<''=''B))C**A))@((@))A))B))B**C**C**E**E,,F,,F,,F,,G--C**e>>QQOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPP~PP~PP~PP~PPRRRRtJJ\;;H-->((Q44kFF[88jCCTT~QQ~QQ~RR~RR~RR~RR~RR~RR~TT~TT~TTTTTTTTUUUUUUUUVVWWYY\ZpFTAAMMffddcccc``````TTZZ\\ZZZZYYYYLL343898<<<898222...------,,,,,,,-*<.@CPCQHRMTMTOUOVOVPVOUR"VO RGKEGBCABABACACACBBBCBEE GW'YT$UB CK'MO%QO%Q`8c|||||||||~~~~tss3%%/2""2""3""3##4##4##6$$7$$7$$7$$8%%4##V88d@@4"";''<''<''=((A))C**B))@))A))A))B**C**C**C**E,,E,,F,,F,,G,,C**e>>QQOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPP~PPRRRRtJJZ88B))@((Y88oGG~QQTT^99fAATT~QQ~RR~RR~RR~RR~RR~RR~TTTTTTTTTTTTUUUUUUUUVVWWWWYY\ZrFTAALMeeddccaaaa__``TTZZ[[ZZZZYYYYOO;=;8-8661'1..../.------,,,****-*<.@CPCQHRMTMTMUOUOVOVOUU#YV#ZU#YQ"UK MFJCFBCACBCCEBECF\(_V%WBCB CK(MP'RO'Q^8`~~~}}}zzzjjjTTTCCC/""1 2""2""3""3##4##4##6##6$$7$$7$$8$$4##V88d@@4"";''<''<''=''=((A))F,,C**@))A))B))B**C**C**E**E,,F,,F,,G,,C**e>>QQOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQuJJZ99C**@((U44sHHRRRRRR~QQ\99hAATT~RR~RR~RR~RRRRRRTTTTTTTTTTTTUUUUUUUUVVWWWWWWZZ^[rFTAALLddddcc````__``TTZZ[[ZZYYWWYYOO7 7444444441 1-,-,.,,,,****-*<.@CPCPHQLRMTMUMUOVOVOUT#WU#YV#ZW#[W$[R#VM"PHLFJEGBEH"KZ'\M#PBCCEC EL(MP'RP'Q_8`iiiRRRFFF9997888881""1 1""2""3""3##4##4##6##6$$7$$7$$8$$4##V88d@@4"";''<''<''=''=((>((A**E,,C**A))A))B**C**C**E**E,,F,,F,,F,,C**e>>QQOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPRRQQnFFT44E,,@))U66rHH~PPRRRR~QQ~QQ~QQ\88hAAUU~RRRRRRRRTTTTTTTTTTTTUUUUUUUUUUUUVVWWYYYYZZ^[rGTAAKLddccaaaa______TTYY[[ZZYYYYRR@@3344666666663311,*,*,**-*;2=AMCOHRLRLRMTMUOUOUMTT#WU#YV#YV#ZV$ZV%YV%YT%VQ#TGJJ"L_(aR#TBECFCFC EL(OP%TP'R_8aYYY9;;6879;;;;;;47;")1 / 1""2""3""3##4##4##6##6$$7$$7$$8$$4##V88d@@4"";'';''<''=''=((>((>((A))F,,E**A))B))C**C**E**E,,E,,F,,F,,C))e>>QQOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPQQRRQQpFFT44B))B))V66sHH~PPQQQQ~QQ~QQ~QQ~QQ~QQ\88hAAUURRRRRRTTTTTTTTTTTTUUUUUUUUUUUUVVWWWWYYZZZZ_\sGTAAKLddccaa````^^__RRYYZZZZYYOO<<6666666666666666666611,),;1=@K;FBJLRLTLTMTMUMUMTT#WU#WU#YU$YU%VU%VU%WV%WW%ZR%U\(^T%UBECFCFCFC EL(OP'TP'R_8aHKJ;;;;37<$,<%<;1 / 1""2""2""3##4##4##4##6$$7$$7$$7$$4""V88d@@4"";''<''<''<''=((>((>((>((B**G,,F**B))B**C**C**E**E,,F,,F,,B))e>>QQOOOOOOOOOOOOOOOOOOPPPPPPPPPPRR~OOkBBW77B))F,,d>>uJJPPQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR[99fAAUURRRRTTTTTTTTTTTTUUUUUUUUUUVVVVVVWWYYZZZZZZ_^sGU@@KKccccaa______^^RRYY\\RR@@8899<<9977777777777777777776=>@HAOEMHMHMLQLTMUMUMTT#VT#WT$VT%UT%VU%WU%WV%YV%YU%V\(\W'YQ%TM#PF GC EC#EM)OQ'TP'R_8aL((>((@((@((B**G--G--C**B**C**E**E,,F,,F,,B))e>>RROOOOOOOOOOOOOOPPPPPPPPPPRR~OOjBBP22A((F**\99wKKRRQQPP~PP~QQ~QQ~QQ~QQ~QQ~QQ~QQRR\88fAAUURRTTTTTTTTTTUUUUUUUUUUUUVVVVVVWWYYYYZZ[[[[`^sGU@@CEaaaa````^^^^^^RRWWHH9977888899<<==;;88888888777799==8877;>CJLQJPJOJPMRMTMRR#VT$UR$UT$UT%VU%VU%WU%WV%YT%V\(\W'YU%VV'WT'UP%QJ#KK)KM(OP'Q`8aM%1== = = > = / / 1""2""2""3""3##4##4##6##6$$7$$7$$4""V77d@@4""9%%;''<''<''=((=((>((>((@))@))B))F--H--E,,C**E**E,,E,,F,,B))e>>RROOOOOOOOOOPPPPPPPPQQRR~OOjBBO11A((F--^;;wJJQQQQPPPP~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRR\88fAAUUTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVWWYYZZZZ[[\\`^sHV@@BB``aa``__^^^^``MM@@88999999999999;;====99887788==>>99888876=>GGJMKRKPKPJOKQO"TQ$RR$UT$UU%VU%VU%WU%WV%WT%V[(\V'WU%VU'VU'VV'WV'WW,WV*VO'O\8\O$2> > > > > = / / 1 2""2""3""3##4##4##6##6$$7$$7$$3""V77c@@4"";%%;''<''<''=''=((>((>((@))A))A))A))G--J--F,,C**C**E,,F,,B))d>>RRPPOOOOPPPPPPPPQQQQwJJa==O11E**T44d>>uJJQQQQPPPPPPQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRR\88fAAVVTTTTTTUUUUUUUUUUUUVVVVVVVVVVWWYYZZZZ[[\\\\`^sHV@@BB__aa____``YYPPEE;;99;;;;;;9999999999<<<<<<>>@@<<9999999988@@FFFEGHJMLQKQJ ML PM"QP#RR#TT$UU%VU%VV%WV%WT%U[(\V'WT%UU%WU'VU'VU'V[-[_,_\,\f;fO$2> @ @ @ @ > / / 1 1""2""3""3##4##4##6##6$$6$$7$$3""U77cAA3""9%%;''<''<''=''=((>((>((@((@))A))A))B))F,,J--G,,E**E,,F,,B))d>>RRPPPPPPPPPPRRQQxJJ_;;G,,C))R33oFFQQRRQQPPPPPPPPQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRR[99fAAVVTTTTUUUUUUUUUUUUVVVVVVVVVVWWYYYYZZ[[[[\\^^a_tJV@@BB__````__QQ=8=>(>GGFGAB=;<8<;;<;<<<<<<<;;;;>>CCAA>><<;;999988@@GGFFFFFFHHK LL OL PM PK OO"QP"TR#UT$UU%WV%WT%U[(\V'WT%UU%VU%VU'VU'VZ-Z^,^_,_m=mP$2@ @ @ @ A"@"/ / 1 1""2""2""3""3##4##4##6##6$$7$$3""U77c@@3""9%%;%%;''<''=''=((>((>((@((@))A))A))B))B))E,,K--H--E,,E,,B))d>>RRPPPPPPRRPPoFF_;;H--C))R22kBBPPQQPPPPPPPPPPPPQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRRTT[99fAAVVTTUUUUUUUUUUUUVVVVVVVVVVWWWWYYZZZZ[[\\\\^^a`tJV>@BB__cc[[F-F4947=7A'AGGGFGAF><<;;;;AAGGFFGGH HJ JJ JJ JL MM PM QL PM"QP"TP"RT#VT$VT%U[(\V'WT'UU'VU'VU'VV'V[-Z^,^^,^k=kQ$3A"A"@"A"A"@"/ / 1 1""2""2""3""3##4##4##6##6$$7$$3""U77iCC6##9%%;%%;''<''<''=((>((>((@((@))A))A))B))B**B**F,,K..H..E,,B))d>>RRPPQQPPsHHW77C**F,,R44kBBOORRPPPPPPPPPPPPPPQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRRTT[88fAAVVUUUUUUUUUUVVVVVVVVVVVVWWWWYYZZZZ[[\\\\\\__c`tMW>>BB``TT>3>6967778<8@'AGEF=G;G=G=G;E9A9><<=@@EE@@<<<<<<<<<<@@CC@@<((@((@))A))A))A))B))B**B**F,,K..J..B))d==UUOOuJJZ88F**H--[99pFFPPQQPPPPPPPPPPPPPPPPQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRRTTTT[88fAAWWUUUUUUUUVVVVVVVVVVVVWWWWYYYYZZ[[[[\\^^^^__aatVV;8;>$>H*H898797777777898B'=F@==>>>>>>>>>>====@@AABBHHJ JJ JJ JK KL LL LL MM QM QO"QO"RO"RP"RO"RO"RL"OU%WP$RP$RR%TT'UU'VU'V[-[\,\Z,Zj=jC$/A"B"B"B"B"A"/ / / 1 1""2""3""3##4##4##6##6$$6$$3""T66wLL8%%8%%;%%;''<''<''=''=((>((>((@))@))A))A))B))B**C**C**F,,L..F,,c==pFFT33G,,H,,Y77sGGQQQQPPPPPPPPPPPPPPPPPPQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTT[88fAAWWUUUUUUVVVVVVVVVVVVWWWWWWYYZZZZ[[\\\\^^____aatVV;<;8<98;8898888687846@/6E$8F;G>@>@@@>>>>>>>>>>==@@GGH HJ JK KM ML LL LM MM QM QM QO"RO"RP"RP"RP"TM"PR$UO#QM#OM#PP$QR%TU'VY,YZ,Z[,[h=hG$/3C"C"C"B"A 1. / 1 1""2""2""3""3##4##4##6##6$$2""T66uLL8%%8%%9%%;''<''<''<''=((>((>((@((@))A))A))B))B**C**C**C**F,,L..M//G,,J--V66rFFQQQQPPPPPPPPPPPPPPPPPPPPQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRRTTTTTT[88fAAWWUUUUVVVVVVVVVVWWWWWWWWYYZZZZ[[[[\\\\^^____cctWW;;;999999888787;37A,6B-7E$;GJ>J>J>J>J=F;B<@>@@@@@@@@@@>>>>CCFFFFJJL LL LL LL LM MM PO QO QO"RO"RO"RP"TP"TM"PT$UM#PK"ML"MM#PL"OO%QR-RZ-ZW*We C"@ G$T*Q,1 / / 1""2""2""3""3##4##4##6##6$$2""T66uLL8%%8%%9%%;%%;''<''=''=((>((>((@((@))A))A))B))B**B**C**C**E**F,,L//Y77rFFQQQQPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUZ88fAAWWUUVVVVVVVVVVWWWWWWWWYYYYZZ[[[[\\\\^^__````cctWW999899899968>/7B*7A*6B-7E$;GJ>J>J>J>K@J>G;C((@((@))A))A))A))B**B**C**C**E**A))a==RRQQPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RRRRRRTTTTTTUUZ88fAAWWVVVVVVVVVVWWWWWWWWWWYYZZZZ[[\\\\^^____````ddtWW999899<48B,7B,7B,7B*7B-7F$;GJ>J>K@K@K@K@K@L@L@H=F=C@ABAB@AFFMMMMMMLLLLHHHHKLM PM QO QO QO RP"RP"RP"TM"PT$UO#PK"ML"MK#LP*PU.UP,PR*RT,Tc>cV%6d4H(L*c3G$B"E#F#7"." 1 1""2""3""3""4##4##4##6$$2""R66uLL8$$8%%9%%9%%;''<''<''=''=((>((@((@))@))A))A))B))B**C**C**E**A((c>>RRPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUZ88fBBYYVVVVVVVVWWWWWWWWWWYYZZZZ[[[[\\^^^^____aaaaddtWW;79@/8E,8F,9B,7B,7B*6C-7F%;HJ>J>L@K@K@L@L@LALALAL@H>F>C@FGLLMMMMLLLLKKKKJJHKJMLPM QO QO RP"RP"RP"TM"PT$UM#PK"MK#LP*PT-TO,OP,PT*TT)Td F#F#F#G#C#2 /" 1""2""2""3""4##4##4##6##2""R66uMM8$$8%%9%%;%%;'';''<''=''=((>((>((@((@))A))A))B))B**C**C**C**A((c==RRPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRRRTTTTUUUUUUZ88fBBYYVVVVVVWWWWWWWWWWWWYYZZ[[[[\\\\^^__````aacceewUWC.8B-8F*8H(9G*9C,8B*6C-7F'9GJ>L@K@K@L@L@L@LALAMAMBL@K@LCLJMMLLLLLLKKKKKKE"EA'BG KKPMQO"RO"RP"RP"TM"PT$UM#PK"LO)OT,RM*MO*OP,PT*TT)Tc;cW'7A F#C"1E#H#G#G#H#A"/" 1""2""2""3""3##4##4##6##2 R77uMM8$$8$$9%%9%%;''<''<''=''=((>((>((@((@))A))A))B))B**C**C**C**A((c==RRPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUY88fBBYYVVWWWWWWWWWWWWWWYYZZZZ[[\\\\^^____``aaaaccfezPWG#8C,8G,8J(8J(8J)8F*8E.8G%;HJ>J>K>K>K@K@L@L@LAMAMAMAMAMBOBLAPB^%QMJLKLLKKKKJJKKC"E=*=@)@B'CGKKQMRP"RP"TM"PT$UO#PM'MR,RL)LL)LO*OP,PR*RT)Tc;cV$4G#G#H#= 3G#H$H$H$J$@#1" 1""2""3""3##4##4##6##2 R77uMM8$$8$$9%%9%%;%%;''<''<''=((>((>((@((@))A))A))B))B**B**C**C**@((c==RRPPPPPPPPPPPPPPPPQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUVVY88fBBYYWWWWWWWWWWWWYYYYYYZZ[[[[\\^^^^____aaaaaaddhfzQYJ8H8J%8J(8J(8J(8J(8J*9J%J>J>K>K@K@L@L@LAMAMAMAMAMBKAU Gr-\e*QL @L ALEKJJJJJJJB#B>)>@)@@)>@)@C%FGLMROTM"PR$UO(PT,TM*MK)KL)LO*OP,PT*TT)Tc;cV$4G#G#H$H$69J%H$H$H$K$9"/#"2""2""3##4##4##4##2 R77uMM7$$7$$9%%9%%;%%;''<''<''=''>((>((@((@))A))A))A))B))B**C**C**@((c==RRPPPPPPPPPPPPPPQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUVVZ88fBBZZWWWWWWWWYYYYYYYYZZ[[[[\\\\^^____``aaccccddhf|RYK9J9L9L%9K(9J(9J(9J(9L$K@K@K@L@L@LALAMAMAMBOBMAV Hs.^j-RW'CL @L @L @L AKEJJHJC"C=)=>(>@)@@)@@*>@)AE%GJOHLG(GT,TP*PK)KL)LL)LO*OP,PT*TT)Tc;cW$6H$H$H$J$F#/B"L$J$J$J$J$6#1#"2""3""3##4##4##1 R66uMM7$$7$$9%%9%%9%%;''<''<''=''=((>((>((@))@))A))A))B))B**B**C**@((c==RRPPPPPPPPPPPPQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUVVVVZ88fBBZZWWWWWWYYYYYYYYYYZZ[[\\\\^^^^__````aaccccdeki}RZL;K;M;M";M$;K';J(9K)9L';M#K>J>J>K>K>L@L@L@L@LALAMAMALBJ@_$My1ai-R^)GY'FL AL AL AL @L >K AKEC"B=)=>(>@)@@)@@)@@)@@*>A)BB'CH-HH-HC)CJ)JL)LL)LO*OP,PT*TT)Tc;cW$6J$J$J$J$K$B"4H#K$K$K$L$G#3 "2""3""3##4##4##1 R66uMM7$$7$$8%%9%%;%%;'';''<''=''=((>((>((@((@))A))A))B))B))B**C**@((c==RRPPPPPPPPPPQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVVVY88fBBZZWWWWYYYYYYYYYYZZ[[\\\\^^^^__````aacccceeifU\Z,CL;L;M;O"L@K>K>L@L@L@L@L@MAMALAMAa'Qs/\e-O^)H_)HZ(FM"AL"AL"@L"@L"@L"@L"@J%>C(=@(==(>>)@@)@@)@@)@A)A@)@H-HC,CA*AB*BF)FJ)JP*PP,PR*RT)Tc;cY$6J$J$J$K$K$L$> <L$K$K%L%M%E$2#"2""3"#4##4##1 R66uMM7$$7$$8%%9%%9%%;'';''<''=''=((>((>((@((@))@))A))A))B))B**B**>((c==RRPPPPPPPPQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUVVVVVVY88fBBZZWWYYYYYYYYZZZZZZ[[\\^^^^____``aaaacchecdmAQLM@L@L@L@L@LAMAMAK@LAm,Yy3`e-O_)H`)J`)HZ(FM"AL"AM"AM"AM"AM"AL"AL$@L)>J(=E(=@(>>)@@)@@)@@)@@)@H,HC*CB*BB*B@*@A*AH-HO-OR)RT)Tc;cZ$6K$K$K$K$K$K$K$3C"L%L%L%L%M%>#/" 3##4##4##1 Q66uMM7$$7$$8%%9%%9%%;%%;''<''<''=((>((>((>((@((@))A))A))B))B))B**>((c==RRPPPPPPQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVVVWWY88eBBZZYYYYYYYYYYZZ[[[[[[\\^^____``aaaaccheZ__1FK9M;MO J(=C(=A)@>)@@)@@)@H,HC*CB*BB*BB*BC*CF/FH1HP*PR)Rc;cZ$6K$K$K$L%L%L%M%C#/J$M%M%K$G"R(E#*1" 3##4##1 Q66uMM7$$7$$8%%9%%9%%;%%;''<''<''=((=((>((>((@((@))A))A))A))B))B**>((c==RRPPPPQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUVVVVWWWWY88fBB[[YYYYYYYYZZZZ[[\\\\^^^^__````aadcddwKVP=K9MO@MAMAK>T"Fu2_s2[a,K`*K`)K`)K`)J`)H[(GO"BM"AM"AM"AM"AM"@M"AL"@L">L"@L$@L(@L)>J(=C(>@)@>)>G,GC*CA)AB*BB*BB*BG/GK1KP*PM)M_;_[$7L%L%L%L%L%L%L%O'< ;L$G"[-s <-Q.L6""1""4##1 Q66uMM7$$7$$8$$8%%9%%;%%;''<''<''=''=((>((>((@((@))@))A))A))B))B**>((a==RRPPQQQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVVVWWWWY88fBB[[YYYYYYZZZZZZ[[\\^^^^____``aadccce7KL;M=O=P=R>R>O=O=P =P#P#>P#>Q AL>U"Gu3`n1V_,Ja*Ka*K`*K`)K`)J`)H[(GO"BM"AM"AM"AM"AM"AM"AL"@L"@L"@L"@L"@L%@M)AM*AJ(>B)=G,GB*BA)AB*BB*BB*BG/GK1KP*PO)O^<^[$7L%L%L%M%M%M%M%M%J#2O(w >1T3Z2Y2Yr*A,"3##1 Q66uMM7$$7$$8$$8%%9%%9%%;''<''<''=''=((>((>((>((@((@))A))A))A))B))>((a==RRQQQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RRRRTTTTTTUUUUUUVVVVWWWWWWY88fBB[[YYZZZZZZ[[[[[[\\^^____``aaed~TZZ*CM;P=Q=T@T@P=P=P=P=P =P#P#>P#>O"=\)Hi-Vr3Ya-Ka,Ka*Ka*Ka*Ka*J`*J`)H[(FO"AO"AO"AM"AM"AM"@M"@M"@L"@L"@L"@M"@M"@M#@M(AM)AL)@O*BF)@A)AA)AB*BB*BG/GK1KO*OO)O^<^\$7M%M%M%M%M%M%J#M$f3H'd 76^2W1V1U1U1UU'2.# 1 Q66uMM6$$6$$8$$8%%9%%9%%;%%;''<''<''=((=((>((>((@((@))@))A))A))B))>((a>>TTQQQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVVVWWWWWWW88fBB[[YYZZZZZZ[[\\\\\\^^___`dcaaoBQP =L;OP>Q>P>P>Q =Q#=Q#=Q#=Q#=Q#=R#=R#=R#=R$=R%=R%=R%=R#=R#>O#>O"=f.Ow7[\)H`,Ja,Kc-La*La*Ka*J`*J`*J`)J['FO"AO"AM"AM"AO"AO"@O"AM"@L"@M"@M"@M"AL"@M"@M"AM#AM'AQ,CO*AK)>E)@B)AB*BG/GK1KO*OO)O`;`\$7M%M%M%L%K#J#[-(J4[a 6`43Z1V1U1U1U/V.OC%*- Q66uMM6$$6$$8$$8%%9%%9%%;%%;''<''<''=''=((>((>((@((@))@))A))A))B))>''a==TTQQQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~TTTTTTUUUUUUVVVVVVWWWWWWYYW88eBB\\ZZZZZZZZ[[\\^^^^_^``ecU\_.GK9MQ>R>R>Q>Q>Q>Q =Q#T%>R#>O"=k2Rz9_W'CY'E^,FZ)C_*Gc,Ka*La*Ja*J`)Ja)J['FOAO AO"AO"AO"AO"AO"AO"@M"@M"AM"AM"@M"@M"AM"AM#AM#AQ$EP(BO*AO)@J)@E)AF.FJ1JO*OP(Pe8e^$7O%L$J#P%\-%E1V3Y4[`4`43Y1U1U1U/T/T1V-H3 "P66uMM6$$6$$7$$8%%9%%9%%;%%;''<''<''=''=((=((>((>((@((@))A))A))A))=''a==TTQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVVVWWWWWWYYW77eCC\\ZZZZ[[[[\\\\\\^^a`a`oEPM>LU@P>P=Q>Q>T>T>T>T>R =Q#T%>R$=V(Am4Tw9[T$@O"R.HJ2JO*OU'Ue8e\$6K#R(z#@-O1V3Y2W1V3Z_4_43Y1U1U/T/T/T/R.Ur(>O64tOM6$$6$$7$$8$$8%%9%%9%%;%%;''<''<''=''=((>((>((@((@))@))A))A))=''a==TTQQQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RRTTTTUUUUUUVVVVVVWWWWWWYYZZ^<3H9O=TAR@P=P=Q=Q>Q>R>T>T@T@T >R#=R#=R#=R#=R$=R$=R$=T%=T%=U%>U%>R$=^*E>`t9WT%>Q$=Q#>[(F_,H[)C[(CZ(C[(C\(E_*Ha*Ka)J['FOAMAM@M@M@O AO"AM"AO"AO"AO"AP"BO"AO"AO"BO"BO"BR#EP#CO#BO#BM#A\-Ku<_L2KP(QU%Ue8ea%9y#@,O3Z3Y1V1V1V1U3Y_4_43Y/T/T/T/R.R.R.Q,P;LsGJ6##6$$7$$7$$8%%9%%9%%;%%;''<''<''=''=((>((>((>((@((@))A))A))=''`==TTQQQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVVVWWWWYYYY\\eAAdAA\\ZZZZ[[\\\\__daoFPE791>3>3E6Q>P=P=P=Q>Q>Q>R>R>R>R>U@T">R#=T#=T#=T$=T%=T%=T%=T%=U%>U%>R$R%>T%>R%>\)F_*G[)C[)C[(C[(CZ(CZ)C\)F`)H['GOAOAO@L@L>K=L >M"AO#AO#AO#AP#BP#BP#BP#BO#BO"BR#EQ#CP#BO#AQ$Cw4_y8aL1KW'WU%Uc7c=^3Z2Y1V1V1U1U1U1U3Y_4^32W/T/T/R.R.R.Q.Q-Q/U|*C4#"4$$7$$7$$8%%9%%9%%;%%;''<''<''=''=((=((>((>((@((@))A))A))=''`==TTQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~TTTTTTUUUUUUVVVVVVWWWWWWYYYY\\cAAdAA\\[[[[[[\\`_[\Z1C<291=3>3>3E6Q=J8MQ>Q>R>R@T@T>T@T >R#=T#=T$=T%=T%=T%=T%=U%>U%>Q#T'>R'=\,F`-G[)C[)C[)C[)C[)C[)CZ)CZ)CZ'CPAO@O@M@L>K=K=K=L">O#AO#AP#BP#BP#BQ#BQ#BP#BR$EQ#CO#AQ$Cr4\~8dt6^L1KY'YZ'Zi8iBf1V1U1U1U1U1U1U1U2W[2\32W/T/R.R.R.Q.Q-Q-P-Q,J;#%3##7$$7$$8$$8%%9%%9%%;%%;''<''<''=''=((>((>((@((@))@))A))=''`==TTQQQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RRTTTTTTUUUUUUVVVVWWWWWWYYYYYY\\cAAdAA^^[[[[\\``yPVG86-;1=2=2=3>3E6Q=H8H7L;Q=Q>Q>R>R@R@T@T@R>Q#=T%=T%=T%=U%>U%>U%>T$=U%@t;Y~@``,HT$>U'>R(=R(=T(>T'>^*F`-G\*C\*C[)C[)C[)C[)C[)CZ)CY(BT$AQ"AOAOAOAM@K=K=L>L >M"@P#BP#BP#BP#BP#BP#BT$EQ#CM#Ak1W;fy7`s6\L1KW'WZ'Zj8jBd1U1U1U1U1U1U/T/T1Vu%@e 72V/R.R.R.Q.Q-P-P-P-O,P|*C6##4$#7$$7$$8%%9%%9%%;%%;''<''<''=''=((>((>((>((@((@))A))=''`==TTQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~TTTTTTUUUUUUVVVVVVWWWWWWYYYYYY\\dAAdBB__[[^^^\\=G<17.;1<1<2=2=2>3C6P=H8H7H7L9Q=R>R>R>R@T@T@R@Q#U%>T%=U%>y<\Bd\*ER$=V%@U'>R(=T)>R)=R(=^,F`,G\*C\*C\*C[)C[)C[)C[)C[)CY(BT$AT$AT#AR BQBOAL>L>L>L>L>M @O#AP#BP#BP#BP#BT$FP"Ba,P;fz8ax6_s6[L1KW'WZ'Zi8iBd1U1U1U/T/T/T/T/T/T,Lk#;/U.R.Q.Q.Q-P-P-P-O,O,O,Pd(82$"7$$7$$8%%8%%9%%9%%;''<''<''=''=((=((>((>((@((@))@))<''`==TTQQQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RR~TTTTTTUUUUVVVVVVWWWWWWYYYYYYZZ\\dAAdBB^^^^|YYMGE4$27.;/;1<1<2<2=2=3C4P=H8G7H7H8J8P=T>R>R@T@T@T >T$>R$=Q$U$>V'@|>_z=^[)BT$=V%>V%@U'@T(=T)>T)>R(=^-E`-F\*C\*C\*C\)C\)C\)C[)C[)CY(BT$AT$AU$AU$AT"BQBOAPBOAM@M@L>L>O"AQ#BQ#BQ#BQ#CZ(J~;e}9dx8_w7^r4[K1JW'WY'Yi8iBd/T/T/T/T/T/T/T/R/T*Kj";/U.Q.Q-Q-P-P-P,O,O,O,M,O*MF%,2$#7$$8$$8%%9%%9%%;'';''<''<''=''=((>((>((>((@((@))<''`==TTQQQQQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RR~TTTTTTUUUUUUVVVVVVWWWWWWYYYYZZZZ^^dAAfBB``sUUHCC8=<=.9>39/9/;1;1<2=2=2C4PT@T@T#@U$>T#=T#>T$>R$=T$=W'A}@_z=\U%>T$>V%@V%@V%@U'@T(>T)>U)>T)>\-E`-F[*C[*C\*E\)E\)E\)E[)E[)EZ(CU$AU$AU$AU$AV$BV$BR BQCQCQCM@M@M@M@M@O"@O"AZ(Ky9c((>((@((@))<''_<@@<>>=>=;/7<2A4;19/;1<2<2=2C4PU#>U#>U$@U$@V#>V#@V$@Q"\W'AV%>W'@W'@W'@W'@V'>T)=U*>V)>T(=\-C`-F[,C[*C\*C\*E\*E\*E^*E\*CY(BU$AU$AU%AV%AV%BV%BV%BU$CT"CRCQCQBOAM@M@L>R"Cx7a=h|;cx7`u6^u6^r4ZK/JV'VY%Yh8hAc/T/R/R/R.R.R.R.Q.R*Ji"9.T-P-P-P-O,O,O,M,M*M*L*L*L)Mu(@7$$6$$8$$8%%9%%;%%;'';''<''<''=''=((>((>((@((@))>((F--|OORRQQ~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RR~RR~TTTTTTUUUUUUVVVVVVWWWWYYYYYYZZZZ[[\\\MM;@@<>>>@@>>>=>=9/78.;1B6=291<1<2<2C4OU#AW$AW$AW$AV#@R =t7Yo7TP#;W'@W'@W'@W'@W'@V'>U*=V)>V'>T'=\-C_.F[,C\*C[*C[*C\*C\*C^*CZ)BW'BV'AV'AU%AV%AV%AV%AV%BV%BV%BV$BT CRCREQCOAQ Cr3\~;ew7_w8_x7`u4^u4\p4YK1JV'VW%Wh7hAa/R/R.R.R.R.Q.Q.Q.R)Ji 8.R-P-P,O,O,O,M*M*M*L*L*L)K)L*OW#11# 8$$8%%9%%9%%;%%;''<''<''=''=((>((>((>((@((>((C,,|OORR~QQ~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RR~RR~TTTTTTUUUUUUVVVVVVWWWWWWYYYYYYZZ[[}WWVJJ>@@@@@@@@@@@>>>=>=9/78.8.;1C7@4;1<1<2B4OV'@W'@W'@W'@W(@V)@V'@V'@V'>^*F`-G[*C\*C\*C[*C\*C\*CZ(BZ)BZ)CW'AW'AW%BU%BU%BV%AV%AV%BV%BV%CW%CU#CREREPCo1Z=ix8`t6\s4[t3[s4Zt4[o3YK1JU'UW%Wf7f@a.R.R.Q.Q.Q.Q.Q-Q-Q)Jh 9.R-O,O,O,M,M*M*L*L*L)K)K*M(Ho8d2J$-4$#8%%9%%9%%;%%;''<''<''=''=((=((>((>((@((>((C,,|OORR~QQ~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RR~RR~RR~TTTTTTUUUUUUVVVVWWWWWWYYYYYYZZ[[uUUKEE=@@@@@@@@@@@>>>>>><==9/78.8.8/8/A6A6;/<1B4Os6Wp4VR"=U%@T%>U'>W'@W'@W'@V'@V'@V'@V'>`*Fa,G^*C^*C\*C\*C\*CZ*BZ)C[)CY'AY'AY'AY(BY(BV%BV%BU%BW%BW%BW%CW%CW%CV$CQBf*T((>((>((>''C,,zOORR~QQ~QQ~QQ~QQ~QQ~RR~RR~RR~RR~RR~RR~TT~TTTTUUUUUUVVVVVVWWWWWWYYYY[Z[ZfOOCBB>AA@AA@@@@@@>>>>>>>>><=<9/77.8.8/9/9/A6E9;1A3M;F6F6F6J8M"9O"9O";P#;P#;P#t6Wr6VQ =V#@V%@U%>U%>V'@W'@V'@W'@W'@V'>_*F`,G^*C^*C\*C\*CZ*BY,B[)CW'AW'AY'AY'AY(AY(BY(BW(BV%BV%BW%BW%BW%CW%CU$Ad-Op1\9$%7$$9%%9%%;%%;''<''<''=''=((=((>((>((>''C,,zOORR~QQ~QQ~QQ~QQ~RR~RR~RR~RR~RR~RR~TT~TTTTTTUUUUUUVVVVWWWWWWWWZZ\[~QU[KK=AA@AAAAA@@@@@@@@@>>>>>>===<=<9/77.7.8.9/9/9/A6E8E4L;F6E6K 8M"9M"9O"9O";O#;P#;P#;Q#V$AU$@V%@U%@U%>U'>W'@W'AW'AV'@`*Fa,G^*E^*E^*E[)BY*A[,CY'AY'AY'BY'BY'BY'BY(BZ(BZ(BY(BY'CV%BW%BW%BU$Bd.O>dn1Z)K(J'H'H'G'Ha%76$#8%%9%%;%%;''<''<''<''=((=((>((>((>''C**zOORR~QQ~QQ~QQ~RR~RR~RR~RR~RR~RR~RR~TT~TTTTUUUUUUVVVVVVWWWWWWZZ[Zt@L\6M 7@EB@BA@@@@@@@@@>>>>>>======<=<9/77.7.8.8/9/9/9/=2G7L;G6K"8L"9M"9M";M";O";O";P#;P#;P#W$AV$AU$@V#@V%@U%>U%>V'@W'AV'@`*Ga,G^*E^*E\)CZ(B[)CY*AW'AY'BY'BY'BY'BY'BY(BZ(BZ(BZ(BZ(CZ(CY'CU$A_*JCj>em/Y8=V$VZ"Zh6h>_-P-P-P-P-O-O,O,O,P(Ge 7-P*M*L*L*L)L'Ft<^.x =)K)K(H'H'G'G'G%F)HE347$#9%%;%%;'';''<''<''=''=((>((>((=''C**zOORR~QQ~QQ~RR~RR~RR~RR~RR~RR~RR~TT~TTTTUUUUUUUUVVVVWWWWWW[ZUVm3FW3Y4Z4P$9B>@>AA@@@>>>>>>>>>======<=<9/76-7.8.8.9/9/9/;1@2K9L"9L"8L"9M"9M";M";M";O";O";O#;P#;U#@V#@V#@V#@V#AU#>m1Qn3UT">W$AW$AW$AU$@V$@V%@U%>U%>V'@V(@`,Ga-G^,E\)C[(B\)EZ(BY(AZ(AY(BY(BY(BZ(BZ(BZ(BZ(BZ(BZ(BZ(B[(CZ(CY'Cy;_Em>dk/Y;iz7cs6[p3Yn1Vn/Wk.Tj.Qd/M>8=R$RW"Wh4h>_-P-P-O-O,O,O,O,M,O(Ge7,P*L*L,M(Hh4a/}"A(H)K(H(H'H'G'G%G%F$F(GVPQ=//8$$9%%;%%;''<''<''=''=((=((>((=''C**zOORR~QQ~QQ~RR~RR~RR~RR~RR~RR~RR~TT~TTTTUUUUUUVVVVVVWWYW\ZuBM_;W4Y6Z6Z6d9V9B9>=A>>>>>>>=========<=<9/76-7-8.8.8/9/9/91B4O";M"9M";L"9L"9M"9M";O";O";O";O#W$AW$AW$AW$AW$AU$>T%@V%@U%>U%>_*Fc-G[)B\(C\)EY)BZ(AZ(AZ(AZ(AY(BY(BZ(BZ(BZ(BZ(BZ(BZ(B[(BZ(B[(C@aHmCi@cp3Z8=U$UW#We4e>_-O-O,O,O,O,M,M,M,O'Gd6,O,M)Kt;e2t;(H)K(J(H'H'H'G'G%F%F%F$E'FWRULHH8%%9$$;%%;''<''<''<''=''=((>((=''B**zOORR~QQ~RR~RR~RR~RR}RR}RR~RR~TT~TTTTUUUUUUVVVVVVVV[YVVj.CZ6Y4Z6Y6\8d;_8\6W7C8=<@>=========<<<<=<9/76-6-7.7.8.9/9/9/@3P=P \'Ej1PT#>W$AW$AW$AW$AW%AW%AU$>T$>V%@U%>^)C^)E[(B^)E[)CY(AZ(BZ(BZ(BZ(BZ(BZ(BZ(BZ(BZ(BZ(CZ(CZ(C[(CZ'Bt9WJmGjFiAcs4Z@j~9dr4Yn2Vn/Wk/Th.Ph.Pc.M>8=T$TW#Wh4h>^,O,O,O,M,M,M,M*M*M'Fk 9-O|"@`/f3'F)L(J(H(H'H'G'G'G%F%F%F%E#E'EUPQRVUE<<8##9%%;'';''<''<''=''=((>((=''B**zOORR~RR~RR~RR~RR~RR~RR~RR~TT~TT~TTTTUUUUUUVVVVWV^ZxFO`;W3Z6Z6Z4a9f<^8[6[7^7Y8B6=<@====<<<<<<;<<9/76-6-7.8.8.8/9/9/>2H7H8M ;L"9M"9M"9M#9M#;O#;O#;O#;P#\'Ei1OT#=W$AW$AV$AV$AW$AW%AW%@V$@U$@V%@Y'AZ'BZ(BZ(BZ(BZ(BZ(BZ(BZ(BZ(B[(B[(B[(B[(BZ(BZ(C[(C[(CY'Bs8WKnGkFiEh@at6WAi8=T$TW#Wf4f=^,O,M,M,M,M*M*L*L*M)H^/h4i6$B*K)K(J(H(H'H'G'G'G%F%F%F$E$E#C'EUPQQTRQRR@228##9%%;''<''<''=''=((=((=''B**zOOTT~RR~RR~RR~RR}RR}RR~RR~TT~TTTTUUUUUUUUVVWWYWs=K\7Y3[6[6\7e<<<<<;<;<;9486-6-7-7.8.8.8/9/>1H7C4G6M ;M"9O";O#;M#9O#;O#;O#;P#\'Ei/OT#=V$AW$AV$AV$@W$@W%AW%AW%AV%AT#>Z'C_)GW'AV%@Y(AZ(BZ(BZ(BZ(BZ(B[(B[(B[(B[(B[(B[(C[(CW%Ai2OHkHkFjEhEh>at6WAh=d9a}7_u4Zk/Th-Ph,Pc-L>8=R$TV#Vf4f=\,M,M,M*M*L*L*L,L(JW.M)|">)K)K(J(H(H(H'G'G'G%F%F%F%E$E$E$C#C%ETOPPRQQRRMLL;((9$$;''<''<''<''=''=((=''B**zPPTT~RR~RR~RR~RR~RR~RR~TT~TT~TTTTUUUUUUVVYYRUi*BZ4Z6[6[6_9f=a9[7\7\7\7^7^7^7_7_8G.<9><;;;;;;;<<8176-6,7.7.8.8.9/>1G7C4A3E6M U#@U#@U#@V#@U#>\'Ei/OT#=V$@V$AW$AW$AW$@W$AV%AW%AW%A['C['E\'EV%AW%AV%@W'@Z(B[(C[(C[(C[(C[(C[(C[(C[(C\(CY'Af1MHkJmGjGiEfCf>at6WAf=c;a}8^|6^x3[m/Te,Oa-L>8=R$RV#Ve4e=\,M*M*L*L*L*M)Kp8`.d4c6,O(J(J(H(H'H'G'G'G%F%F%F%E$E$E$C#C"B~%CTOPPQQPPPPQQJEE9%%;%%;'';''<''=''=((<''B**zPPTT~RR~RR~RR}RR}RR~RR~TT~TTTTUUUUUUWWYYwHJP1W4\7\7\7d;f<_8[7\7^7^7^8^8^8_8_8`8`8G-98=;;;;;;;9<9837616,7.8.8.8/>1G7C4B3B3E6M ;P"U#@U#@U#@V#@U#>\'Ei/OT"=V$@V$@W$AW$AV$@W$@V$AV$A^(E`*HY%AW%@U$@V$BW%BW'@W'@Z(B[(C[(C[(C[(C[(C\(C\(C['B^)ECfKoHkGjFiEeBe>`t6W@fU#@U#@U#@U#@U#@\'Eh.MT"=V$@V$@V$@V$@V$@W$@W$@['Ca*HZ'CV%AW'AY'AW%@V$AY%BY'@W'@Y(A[(C\(C\(C\(C\)C[)B^*ECdLoHkHkGiFhCeBe>`s4V@eT#>U#@U#@U#@T#>\'Eh.MR"=V#@V$@V$@V$@V$AV$AZ%Ca*HZ'CV%@V%AY'BY'AY'AY'AV$AY$AY'AW'@Y(A[(C\(C\(C\)CZ(A|>^MpJkJkGjFhEfBeBd=_s4V>d;a9_~8\~7\|6\|6[|7[m1RZ'J`$RY#Tc4d=\,M#Aj4j4}#A)J*K)J(K%C`4)K(H'G'G'G%F%F%F%E$E$E$C$C#C#B#B"B A}$BRLOMPOPPPKKKBBB<==;999((;%%<''<''=''<''A**zPPTT~RR}RR}RR~RR~TT~TT~TTUUWWTTp>@d-.a)*c,-c,-c,-d,-Q,Q2[7`8_8_8_8_8`8`8`8`9`9`9a9a9a9a9a9c9Q$98887887777877767"17.8.=1F6B3A2B3B3C4C4C4J8P =Q#T#>U#>U#@U#@T#>['Cf.MT"=V#@V#@V$@V$@U$@Y'B_)G['CV$AW%AY%AY'AY'AY'AZ'AZ'AW%AY%BZ'BY'BW'AZ'A[(B[)Cx=[LnKmJkHjFiEhCeBdAd~=_s4V=d;`9^~7\}7\}7\}7[t4Vk/P\'Jd%Re%To7c6Tj4f2y"@*K*K)J(J(J(J~%B`4(J'G'G'G%F%F%E$E$E$C$C#C#B#B#B"A"A @|#AQLMMOMFFF;;;999999;<T#>T#>U#@U#@T#@[%Cf-LR"=V#>V#>U$@U$@V'A^*FY'BV$AW$AY$BY%BY'BY'AY'AY(AZ(AZ(BY'BW%AZ%BZ'BY'AW%@d.JMoKnKkJkGjFhCeBdBdAd}<^s4U=d9`~8^}7^}7\|7[z7Ym1Qs2V^(Kd%Te%Ut7dn)@t<*K*K(J(J(J(H(H(J}$B`3(J'G'F%F%F%E$E$E$C$C#C#B#B#B"A"A~"A@z#AMHJ@BA999;;;999===GGGLMMF>>;''<''<''<%%A**zPPTT}RR}RR~RR~TT~TTUUUUtEEd-.c*,d,-d,-d,-e,-e,-d,-d,-d,-f,.R-Q2c9`9`9a9a9a9a9a9a9c9c9c9c9c;c;c;d;f;R"96876666664664446'2</E6A3A2A2B3B3C4C4E4E4E6P=["EU#>T#>U#>U#@R#>[%Cf-LR"=U#>U#>U#>V%A_*FY(BT$@V$@Y$AY$BY$BY'BY(AY(AY(AZ(AZ(AZ(BY'BW%AY%BZ'CW%@i2OLnKmJmHjFhFhCfBdAc@a|<^r4U=d9_~8^}7\}7[}8[n1Qs2Vt3W^(Ke%Te%Us7d;W*K)J(J(J(H(H(H(H'H|$A_3(H'F%F%F%E$E$E$C$C#B#B#B"A"A"A~"@~ @~ @x">@9<9;;999;;;BBBKKKLLLKKKKLLB99;$$<''<%%A**zPP~TT}RR~RR~RR~UUVV|PPk78a)*d*,d,-d,-d-.e-.e-.d-.d-.d-.d-.d--e-.T.R3c;a9a9a9a9c9c9c9c;c;c;d;d;d;d;d;j<`=6666666664444443649)2B4A2@2A2B3B3B3C4C4E4E6E6WB[#ET#@T#>T#>T#>Z%Be-LR"V%@^)FY'BT$>T$>U$@U$@W$AY$BY'BY(AY(AY(AZ(BZ(BZ(BZ(B[(BY'AW%AY$Bi1PLnKkJjGiFhEeBdAcAa@a|;\r3Ux >>9;899===GGGLLLKKKKKKJJJJJJHJJ<..;%%;%%A))zPP~TT}RR~RRUUUUuFGe./c*,e-.e-.d-.e-.e-.e-.e-.e-.e-.e-.e-.e-.e..h-/U1T3d;c9c9c;c;c;c;d;d;d;d;d;d;d;j=r@_=666666444444444333;-3=(3@2@2A2A3B3B3C4C4C4E4F6P>YC["EU#@T#>T#>Y%Be-LR"=T#>U%@\)EY'BT#>T$>U$>U$@U$@U$@W$AY%AY(AY(AY(AZ(BZ(BZ(BZ(B[(B[(BZ'BU$>i1PLoKkGiFiFhCeBdAc@a@az;[r3T}>y=>8;ABBKKKLLLKKKKKKJJJJJJHKKMGGQ22>%%9%%A))yPP~TT}RRUU~RRp@Ad,-d-.e-.e-.e-.f-.f-.e-.e-.e-.e-.e-.e-.e-.e-.e-.e..f)1T1Q2eoAp@^=666464444444344333;,3<(2<'3>2@2A2B3B3B3C4C4C4F6P>Q=VA^ FW#BR#=Y%Be-LQ#U$>U$@U$@U$@V$@W%AY'AY(AY(AY(BZ(BZ(BZ(B[(B[(C[(CY'@i2PKoJnGjFfEfCeBcAc@`>`z;[r3U;a~7\~9\}8\p2Us2Ww4Zu3Ys1V_(M[(K^(Ln9^9W(H(H(H'G'G'G'G'F%Gy#@^2'G%E$E$C$C#B#B#B#A"A"A~"@~ @} @| >| >~>zHGGLMLKKKKKKKKKJJJJKKJKKR@@c..h--Q,,9%%@))yPP~TTUUzOOk77d*,e-.e-.e-.f-.f-.f-.e-.e-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f..e)1H,R3f2A2A2B3B3C3C4C4E6O=Q=P=Q>[ EW#AZ%Bd,KR$>\*EW'AR$=R$=T$>T$>U$>U$@U$@V$@V$@V%@W'AY'AY(AY(AZ(BZ(BZ(B[(B[(C[(CZ(Ak4PKnHmGkGiEeAdAa@a@`>_z9[r3U;a~8\}9\s4Vr2Ux6[w3Yu3Ws2V`(M_(M^(Lc8U9W(H'G'G'G'G'F'F%F%Gy#@\2%G$E$C$C#C#B#B#A"A~"A~"@} @} @| >|>z=n%=T;BGMKKLLKKKKKKKKKJJJJKKKHHW<))yRRTTuEEe..d,,f--f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.f-.h..e)1H*T3eZCZ%EZ(CY)BW'BR$=R$>R$>T$>T$>T$>U$>U$@V$@V$@V%@W'@W'AY'AZ(BZ(BZ(BZ(BZ(BZ(B\)CZ(Bk4OKmJkFiEiChBc@a@a>`~=_y9Zr3U;`9^y6Zm/Qt6Yw4Zw3Yu3Ws2Wa)M`)OW'Hh8W8V'G'G'G'G'F%F%F%F%Fy#@\2%F$C$C#B#B#B"A"A~"A~"@} @| @|>~>u[<4444444443333332229*2;'2=)3>-6C(7K7G3A2A2B3C3C4C4O=P=P=O=Pe.OY(CP#R$>R$>T$>T$>U$>U$@U$@V$@V%@W'@W'@W'AY(BZ(BZ(B[(B[(BZ)A[)CZ(Bj3PJmHkGiCfBeAe@d>`~=_~<^x9Zr3T;`~8\r/U|4\z6\s3Vs3Vu3Ws2Wc*P\(KZ'Hx;d8V'G'G'F%F%F%F%E%E$Fx">\1%E$B#B#B#B~"A~"A~"@}"@| @| >}>|=c,=LCFJOLLMMKKKKKKKKKKJJHKKOFFMAAK))h--e..e..f..f..f..h--a--e..e,,f--f--f--f--f--f-.f-.f-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.i..i-/R/^8i=fpAoAn@m@m@m>m>\<4444443333332332228*1<(3@-6C(6K7K7L7G4A2A3B3B3E6O'2F-;h/QV#AR#>Q$=R$=R$>T$>T$>T$>U$@U$@U$@U$@U%@V'@W'@W'@W'AY(BZ(BZ(BY(AY)AZ)BZ(Aj2OJkGjFhChBeAc>c>c=`};^x8Yr3T;`x3Yy3[}6^|4\z3[u2Wr2Vs2Wc)PV'Gf(Qz;e8V'F'F%F%F%E%E%E$E$Ez#@@$~#A#B#B#B"A~"A~"@}"@} @| >~>x=Y4AHLKKOMLLLKKKKKKKKKJKKHKKRAAd11`//<""V))j//f..f..f..f..f..h--f--f--h--h--h--h--h--h--h--h-.h-.h-.h-.h-.h-.h-.h-.h-.h-.h./h./h./h./h./h./h./h./i//h*2Q2^8i=m>pAoAnAn@n@k>k>k>f=7242433333332221118*1@-4C(6K6K6K7L7L7H6A3B3B3C4MT#>Q$=R$=T$>T$>T$>T$>U$@U$@U%@V'@W'@W'@W'@Y'AY'AY(AZ(BY(AY)BZ)BY(Ai2OHkGiEfCfBeAd>a=`=a<_x8Wr3Tz6[t1W6_}4^|4\y3[z2[x2Yp1TY(G`(Mn)Wz;e8V%F%F%F%E%E$E$C$C$E|#@3y">#C#A"A~"A}"@} @| @}>~=i'=MAEHOLLMMLKKKKKKKKKKKHLLJJJ\88h--h--h..P''= \,,h//f..f..h..h..h--h--h--h--h--h--h--h--h--h.-h..i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./j//h%3O1ek>k>f=724233333222222444<16B'4K6K6K6L7L7L7M7J6B3A3C3OU$@U$@V%@V'@V'@W'@W'AW'AY'AY'AY(AY(AZ)BZ)BW(Ah2MGiGhEhBeAdAc@c=`~;_<`|9\n/Qw2Y~4_}6_}4\|3\z2[y2Zz2Zt1VY*Hc(Ok)V|;f7V%F%E%E%E$E$C$C$C$Cz">4y">#A~"A~"A}"@} @| >~>r"=U7AHKJKOMLLLLKKKKKKKKJKKHLLQBBc22i--f..f..h..f--F##C##h..i..h..h..h..h--h--h--h--h..h..i..i..i..i..i..i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./i./k11\%-a9rBn@n@n@m@k>k>j>j=e=713243222222676;<;E(7J4K6K6L6L7L7L7L7O8K8E4B3MU$@T$>U$>U$@V%@V'@W'@W'AW'AY'AY'AY(AY(AZ)AZ)BW(Ah2MGhEfCeBeAd@a>a>`<_}9^|8[p/T|4^~6_}4^|4\|3\z2[y2Zy1Zp1Uh*Tn)Vd'Ot8`7U%E%E$E$C$C$C$C#B#Cy">4x >"B}"A}"@} @~>~>h,@LCFHOLLMMLLLLLLKKKKKKJLLJJJ[99h--h--h..h..h..h..j..a,,= T((j//h..h//h//h..i..i..i..i..i..i..i..i..i..i..i..i./i./i./i./i./i./i./i./i./i./i./j./j./j./j./j./j./j./j./k1.j"3o@n@n@m@k>k>j>i=j=e=714233222676;=R$=T$>U$@U$>U$>U%@V'@V'@W'AW'AW'AY'AY'AY'AZ)AZ)BW(Ah2LFhEeBdAcAc@a=a=`<^;_o2Ri,P6`~6_}4^|4\|3\z2[y2Zu1Wt/Vp*Yr)Yp)Yw9a7U%E$C$C$C$C$B#B#B#Bx"=4w >"A}"@} @~>r#=U7BJKKLOMLLLLLLLLLKKKKKKHLLQBBc22i,,h..h..h..h..h..h..h--k..V))= ^,,j11i//i//i./i..i..i..i..i..i..i..j..j..j..j..j./j./j./j./j./j./j./j./j./j./j./j./j./j./j./j./k./k./k./h--}>=|%Hk>m@k>k>j>j=i=i=d<613122466;=;J'U$@U$>U%@V'@V'@V'@W'AW'AY'AY'AY'AZ(AZ)BW(Ah2MFfCeBdAa>`>a>`<_;^y7Zj.Ph-O~6^~6^}4^|3\z3[y2[x2Yt1Vw/Zr*Zp)Yp)Y~;iGd1O6T6T6T4R4R4R4Q4R2OC'/2M3Q2P2Or@P\TVW^[[\\[[[[[[[[[ZZZZZZYZZfMMw>>w>>u@@u@@u@@uAAwAAwAAwAAw@@w@@x@@W66T44uAAwAAwA@w@@w@Aw@@w@@x@@x@@x@@x@@x@@x@@x@@x@@x@@x@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ax@Ay@Ay@Ay@Ax>@VWppGUw,Hz$Py$Ox$Ox$Mw$Mu$Mw$Lr'LFACEFEKLKY8Li$Li$Lf$KV%BV,CZ-FZ-F[.F[.F[.G\.G\.G\.G^.H^.H^.H^.H_.JQ3CJ7BO;EV@KpA\V/GU.FV.FV.GV.GV.GY/Jd3Qe6Pa6Oc6Od6Pd7Od8Pe8Pe8Pe8Qf8Qf8Qh8Qh8Qh9Qi;Rh9QtB[UsTrQpQnOnMmMmLmJj|AaCew>_FkFkEkCjBjBjBeBhBi;j~;j|6dLwkiki/win32-vc/installer/wizard_small.bmp0000666000000000000000000002212010334753425017247 0ustar rootrootBMP$6(77  44A997999999;;;;;;;;;<<<<<<<<<======>>>>>>;;;@@@@@@@@@AAAAAAAAABBBBBBCCCEEEEEECCCAAA===444111,,,*********---......------,,,******)))))),,,...%%%'''%%%%%%$$$$$$"$"1133>;;8999;;;;;;;;;<<<<<<<<<=========>>>>>>;;;@@@@@@AAAAAABBBCCCCCCAAA<<<999444---***)))))))))***************)))***,,,---,,,,,,******(((,,,...''''''%%%%%%$$$$$$"$"..66A998999;;;;;;;;;<<<<<<=========>>>>>>>>>;;;AAAAAABBB>>><<<666111,,,))))))))))))))))))))))))))))))))))))))))))))))))******,,,******(((,,,...''''''%%%%%%$$$$$$"$"--66A998999;;;;;;<<<<<<<<<======>>>@@@@@@>>>;;;;;;222...***((((((((())))))))))))))))))))))))))))))(((((((((((())))))(((((((((((()))***))),,,...''''''%%%%%%%%%$$$"$"2266B998999;;;;;;<<<===>>>>>>===<<<777333---,,,---***,,,***)))(((((()))))))))(((((((((((((((((((((((((((((((((((((((((('''''''''%%%''''''//////'''''''''%%%%%%$$$"$"2266B998<<<<<<<<<<<<888444111,,,)))((((((((((((((()))))),,,,,,,,,***((((((((((((((((((((((((((('''''''''''''''%%%%%%'''(((**)***//////---222)))'''''''''%%%%%%$$$"$"2266B88466311/---,,,((('''(((((((((((((((((((((((((((((('''((()))*********)))(((''''''''''''%%%%%%'''(((***)))---11/--,***$$$%%'**)(('''%$$$$$$%%%%%%'''%%%%%%$$$"$"3311L-->**7'',(('''%((%()'((((((((((((''''''''''''''''''''''''''''''%%%''''''))))))***)))(((...---***------))((('##'$" #$ %%%$$$$$$$$$$$$$$$$$$$$$$"$"3311Q11Q//P//L..H--B)%6% .'''''%'(%'(%'(%''''''''''''%%%%%%%%%%%%''''''))),,,***---111---,,,,,,'''%%$%%"$$# ).1113343/ $$$##$##$#"#""$""$"#$# % 3311P11O//O//M//M/1O)"K"E"A#<);% ,$#(%%%$'#%'$'(%**)**)**)--,---)))))))))%%%%%%$$$###$$$$$$''"''(/;ABBCFJHE@9.""#%"$% '))--//--99@@11P11P//O//O//M/1L)"H"E"C#E,H-G.L1K1F/B)#1""$"$""%%%##$#######$$$$$$$$$$$$$$####9MUWWYZ\\YTOJE=.<;@@AABB<<22CCAA11Q11P11O//M//M11L)"H"E"C#C1O3Q3R/O)G6,-28<4##$$$##$"##"##"#$"## ""$<W[`djnnkha^YUOJ<$1CA@@AA<<22BBAA11Q11P11O//M//M11L)"J"F"C$E/L*H>76<ELOOLJ@%4%.#'#'#)*7L[_dipupjhc`\YTOK414CAAB<<22BBBB22R11Q11Q//P//M12M)#G < >CCEJPZ^__\YVTM=#8'9%8'83=Raejou|sha_[WTPLOG-=;EC<<22CCCC,,E,,G-.H..K.1L14L*$K BBOZdkoonkhfec`\Q<6616E\fkpu}xm`[WTQOKTRA*A@>>44AA>>""1" 3"6"7$>(G$F8MYdr|trpomkihedY'K1L3P%B9Mfmpuz |peZTROLLVWO8%$$""$H$K$K$J$J%M=>Vam} zronkjhf`U4Z;c=hBr$K=Ynrw|""## ujWKOMJOY_VK-%O%O%L$K$J'L9O_iu%%''xomkhfW(UCnFxG|JKAFesx|''''## xoP9>AHQ\d\QA%M%M%L$K$J#H@[hr66//'' ufe`L3WKPRV[L;Rpx}##**((%%""}nB%1FTV_icWL('221/212444%M%M%L%L'M@Mfo~44>>66//((rTK$G>dQVZ_cm@~;`x}**//**(($$i3-JYacdmj_Q>>Pcc_aaafff2.61;@_ny))FFFF==88''fC*HFuW\aejny/kFn''1133..--##|^2M[ioppsreVEE^}}zwwwwww/-4)%/$ -%",%$1Lkt ==QQLLFF;;Y$MK\dhmptzyPUx##,,664433,,wT<\ix|}}|xk\99ZyyutttuuuAA@BCB@A>GGB)*A_s33QQ[[UUKK22rQHcjmrwz~e>h))33;;8844))rJ'%Eat~sa%%RuuuuutuuuCCCFFF@@ACCBJo|((GGaaccZZCC''c9yhpux|LGu%%..88==;;33''m>6`ryhRpprwwuuuuCCCEEEBBA44@^y==\\oojjWW99}iixz~*hZ ,,44>>AA;;//$$~e9'9UpmQiinxxwwwwCCCFFFCC> Ep22PPooyyiiMM11mMQk''22;;CCCC99-- zY(L8UHopRVVe}}ywwwEEEGGF@@>V))GGdd||``EE($"|fK|##--77AAHHBB66))uL;fFu Ak tVKKa}}yxxxEEEHHF22En"">>ZZxxrrWW<<z^EZ))33==GGJJ>>33''o@KP/Lc""x\<<\~~zxxxEEEJJF11Gs))FFaakkQQ66ui9`"",,66@@JJJJ==11$$jART6T\ y\66Z~~zxxxEEEHHG>>>_;;VVuukkQQ66w(^R))33==GGHH<<11$$kE=mK'FjoQCC^~~|yyyFFFGGGCC>P11LLkk}}kkPP44}a[zUz''11;;EEFF<Uesux||eU$$Pzzzzzz|||314))*'%'((%''6i$$EEZZYYMM22zrpL>uitxz}wWu''22999977,,h`M;T_fntx|tcQ66Y}||||||#$.[}99QQOOKK11zrr^FPfrtwy|~,ti$$//776644,,~h`T6KHPZajtraOGG`|||}}}7J8K9M8L<L#Rp//HHGGCC11yspiJOKeoptux<^| --332222**~h`[.)8ALWcih`LJJ[~~|zzz<P;P9M8L9J2Qc$$>><<;;//zsrn`QK8pcnnosxPUu**////..))~ha^7.@KV[YWUM44>BB@CEEPPP;P9O9M8L7J=QVx444411,,zsrnje[L%_Vkhfi`Zk~((--,,**((~ia^G($7JOLKHGB# "$"#$#$8K9O9O9M8K@Q$Mk**,,((%%|trmfehdUWB^\[\ ^cw%%))((''%%}ic_Q;-/CHGFFG3 #*%/(2)3/<=K2H^ }""|toje^_cd_\)mLTU/iZp""%%$$$$##}id^VL>2=JHHH>7=9@=B@#FC$HH'M<H)Mntttusnic[VWZ^^J>#)T#.W%OThy"" }je_WQPE<HJJC*e@\7<676Mas|kf_VMMPHEKH-\>#UuK\;#V"TF%JE%HE%JC%HC%HF'M8G3E4E;ER[=ZWRQTUUQLHJ G3883.*.)2-<[mz|||zxmf^UKFHMKK6@4#R"QrHZ9#R"PH%MH%OG%OF%MF%LG%O9H3F3C8F`\d_a^PZ;UHBCCEB6,'%""""$4extttssne\TKBAEH>'.~#O#Q#Rs JY;$T#QH%PH%OG%MG%MF%LH%M9G4F3E7GQRUUaaa_[VUM77"--,"#""$$$$$%-dsokjifc\RJ@;=>#4y"O$V$T$Tt"Ka@%T#RH%OH%OG%MG%MF%MH%P9J4H3C6BCA)#/(,##%/"7%#2#"9'$=)'." /""-%%#$$$')$7T__[ZWUPJ@6726(O3T7j#Et$Km"FhC%Y$TH%PH%PJ%QF%MC%JA#E14,,("%%'$%''%$%')- 2""@**7$$8''A**4##. 6$$/ . ('"'@MMKGEA=4/"'  "')- F /u$KF%H;"<21(#(%''(((())))))))(''$*. ;''E--<((H..@))8%%@**3$$.,$ .7841/*#)((('',1"",#h$Ca;Cd>;P31<('2"",%%')**))**))((,/ 2##7%%7$$1 ,'('*,6$$7%%6$$H..C,*8%#4$$*) )#$%()))*1 7##9%%8$$1#j%Ff=HuHGwHHwHHsFFnBB[99L118%%,('(**)*.3"";%%9%%7$$/ -**,---,,*)*)-. 3#"7%#G-,E,*=('G.-;((/""-4##;%%<''9%%8%%7$$/#j%Ff>GsGFrFFsFFtFFwGGxJJzJJwGGmBB_;;G..;((,. 4##8$$<''4##1 ,,--.---.....--.--,*),,3##;''Y77H..=''<'';''9%%8%%7$$/#j'Fe@FtGFsFFsGGsGGtGGtGGuGGuGGyHHzKK|KK|JJkBBa;;U44=((-(),-. . / . . . / / / / / / . . . . . .-.2""9%%;%%W66M11;''<'';''9%%8%%7$$/#m'GfAFuHGsGGsGGtGGtGGuGGuGGwHHwHHwHHxHHyHHwGGoAA~LL}KKrFFe==U44>))3"",*,.1 1 / 1 1 1 1 1 1 1 / / ./ 7$$@))E,,C**=''W66M11;''<'';%%9%%8%%7$$1#c$AfAFuJHsGGtGGtGGtHHuHHuHHwHHwHHxHHxHHyJJuGGmAAzKKzJJ~KKLLMMLLxGGd<mqG9l [J8_ <ue44UULLp&&3#CQKD4%AZ }((}##fO-Fx} l-,Rh77QQ;;W!@F;/%2D^ }~##qZ A fok `QD4Ol99FFo**9144'=Fa xseN2 #DULGB5k$GPp8888S**+ +?Id nhYA!6m@<@FMTM @"",7@DC?4226<AB>3&)*( $'$ p??  (0`  !%((%!$(*.14884/*-0369<?BDA;6*$..136:<?DKG@:3-"12.1258;@HPMD>72#/84.1247;EMU THB:5( -7>7/0101AKT [] NF?9/)./.,%%5?A91,($(DP Y`eWJC=517889::81'1;DC;5*CV^fl_ PFA: 52 $8@ABCCDDEC;0;CKF@:1$@YdltiYJE?% !B&M"D48CDEFGHILK=1"BJOJE?7*=Yiqzrb PIC-!C1a,Y(O 1=CFGHINTU B6(2IQSOJD<.9Wlv""zjWLF5>:v6l0a)R.4CEHOV \aK;-@QXVRNI@,5Tk{##&&$$ta RK=-C=z6m.^'N*+6@X `fn_B3'GX ]YTPK<) 1S i~$$**))}jZNC& IA;v3g-Z= ';Y iow##pM8, M^ b[VRK8&0,P f}##--..##rb SI.ME?~7o1c(Q! 5U nv##~))**]=13T f e ^YUI48*U%M dz!!//33))|l\N8MRE[ lh a\WG0 (Q6mLbx ..77..!!ue T@B[VB;v4i+VJe**88==00Z<.A] ni d_XC&83f>}J`u--8844&&}mZH&7m^[UD8q1b A E_z%%<) (Q =Oe{..33,, qc Q9 ]kfca_\T8sPi00GGYYJJ11\13CXXSPK<( )/@Rh~ ,,//((vhZF+.~xpg^8rFi//EEYYRR;;k##A2ARTOLH:( :AT j!!++,,$$oaS;Bw{!#&*+<4k11GGWWHH22^4-@MOJFA7&>BV l!!''((x gY J0cvz| |mZ$?Un22HHRR==m''M,@GG=6/)&+?DX n ##|$$o^P@" *Mmpssi _QK>}0NWp44GGGGx00Y7+:<>:1'8AF[ q}y u hW I6 Z g cXNKHE2d &FNZs77BB??h&&H%-024.$ <BH] svrm`O@+ +WNIGD@={,X 7LN\ u55<<|44V6 *****,>CI_ qnidWF4/^EA>|;v8p0a8 *GMO^ y!!00}33h))A++++&!+7@EKb kgc]P >*:u:v7o3h1b+W) +:LMPby""x**p--W/",,*"%05:AFLa d_[VH5! .^.]-Z*T!C *6<FLMQdrj##b%%F (-*-113:CHO^ [ W S M >),==4& 5:AEFIMNRecZP0,/.--3:CJQXTP L F 7 #?@BDB@BGLNS_VM@#)('+39BJQQMID>-4?=;:<@EIMSQI ? .#"#+29AFGFD@;/44259=BEFD?8&"*15787761 ,.36653/(#%&''# $$"  ?|0???0$50H0 h  00$HWB0 !! $HWB0 50H kiki.ico$HWB0 1450H$$$HWB0 &DHWB h    0-50H0 -HWB0  4.HWB0 x.HWB0 kiki/win32-vc/kiki.dsp0000666000000000000000000004135710070562137013531 0ustar rootroot# Microsoft Developer Studio Project File - Name="kiki" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** NICHT BEARBEITEN ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=kiki - Win32 Debug !MESSAGE Dies ist kein gltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und fhren Sie den Befehl !MESSAGE !MESSAGE NMAKE /f "kiki.mak". !MESSAGE !MESSAGE Sie knnen beim Ausfhren von NMAKE eine Konfiguration angeben !MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: !MESSAGE !MESSAGE NMAKE /f "kiki.mak" CFG="kiki - Win32 Debug" !MESSAGE !MESSAGE Fr die Konfiguration stehen zur Auswahl: !MESSAGE !MESSAGE "kiki - Win32 Release" (basierend auf "Win32 (x86) Application") !MESSAGE "kiki - Win32 Debug" (basierend auf "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "kiki - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\kodilib\src\windows" /I "..\kodilib\src\widgets" /I "..\kodilib\src\types" /I "..\kodilib\src\handler" /I "..\kodilib\src\tools" /I "..\SWIG" /I "..\src\base" /I "..\src\bots" /I "..\src\gui" /I "..\src\items" /I "..\src\main" /I "..\src\sound" /I "..\src\world" /I "..\kodilib\win32-vc" /I "..\kodilib\win32-vc\SDL\include" /I "..\kodilib\win32-vc\SDL_mixer\include" /I "..\kodilib\win32-vc\SDL_image\include" /I "C:\Python\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 kodilib.lib python23.lib SDL.lib SDLmain.lib SDL_image.lib SDL_mixer.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"../kodilib/win32-vc/Release/" /libpath:"../kodilib/win32-vc/GLUT" /libpath:"../kodilib/win32-vc/SDL/lib" /libpath:"../kodilib/win32-vc/SDL_image/lib" /libpath:"../kodilib/win32-vc/SDL_mixer/lib" /libpath:"C:\Python\libs" # Begin Special Build Tool SOURCE="$(InputPath)" PostBuild_Cmds=copy ..\kodilib\win32-vc\SDL\lib\SDL.dll Release copy ..\kodilib\win32-vc\SDL_image\lib\*.dll Release copy ..\kodilib\win32-vc\SDL_mixer\lib\SDL_mixer.dll Release copy ..\kodilib\win32-vc\GLUT\glut32.dll Release # End Special Build Tool !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /w /W0 /Gm /GX /ZI /Od /I "..\kodilib\src\windows" /I "..\kodilib\src\widgets" /I "..\kodilib\src\types" /I "..\kodilib\src\handler" /I "..\kodilib\src\tools" /I "..\SWIG" /I "..\src\base" /I "..\src\bots" /I "..\src\gui" /I "..\src\items" /I "..\src\main" /I "..\src\sound" /I "..\src\world" /I "..\kodilib\win32-vc" /I "..\kodilib\win32-vc\SDL\include" /I "..\kodilib\win32-vc\SDL_mixer\include" /I "..\kodilib\win32-vc\SDL_image\include" /I "C:\Python\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 kodilib.lib python23.lib SDL.lib SDLmain.lib SDL_image.lib SDL_mixer.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"../kodilib/win32-vc/Debug/" /libpath:"../kodilib/win32-vc/GLUT" /libpath:"../kodilib/win32-vc/SDL/lib" /libpath:"../kodilib/win32-vc/SDL_image/lib" /libpath:"../kodilib/win32-vc/SDL_mixer/lib" /libpath:"C:\Python\libs" # Begin Special Build Tool SOURCE="$(InputPath)" PostBuild_Cmds=copy ..\kodilib\win32-vc\SDL\lib\SDL.dll Debug # End Special Build Tool !ENDIF # Begin Target # Name "kiki - Win32 Release" # Name "kiki - Win32 Debug" # Begin Group "Quellcodedateien" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Group "base" # PROP Default_Filter "" # Begin Group "base_header" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\base\KikiAction.h # End Source File # Begin Source File SOURCE=..\src\base\KikiActionObject.h # End Source File # Begin Source File SOURCE=..\src\base\KikiBase.h # End Source File # Begin Source File SOURCE=..\src\base\KikiColorObject.h # End Source File # Begin Source File SOURCE=..\src\base\KikiEvent.h # End Source File # Begin Source File SOURCE=..\src\base\KikiFace.h # End Source File # Begin Source File SOURCE=..\src\base\KikiObject.h # End Source File # Begin Source File SOURCE=..\src\base\KikiObjectHeader.h # End Source File # Begin Source File SOURCE=..\src\base\KikiPos.h # End Source File # Begin Source File SOURCE=..\src\base\KikiPyAction.h # End Source File # Begin Source File SOURCE=..\src\base\KikiTools.h # End Source File # End Group # Begin Source File SOURCE=..\src\base\KikiAction.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # Begin Source File SOURCE=..\src\base\KikiActionObject.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # Begin Source File SOURCE=..\src\base\KikiEvent.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # Begin Source File SOURCE=..\src\base\KikiFace.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # Begin Source File SOURCE=..\src\base\KikiObject.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # Begin Source File SOURCE=..\src\base\KikiPyAction.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # Begin Source File SOURCE=..\src\base\KikiTools.cpp !IF "$(CFG)" == "kiki - Win32 Release" !ELSEIF "$(CFG)" == "kiki - Win32 Debug" # ADD CPP /I "..\base" /I "..\bots" /I "..\gui" !ENDIF # End Source File # End Group # Begin Group "bots" # PROP Default_Filter "" # Begin Group "bots_header" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\bots\body.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiBot.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiBotFume.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiBots.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiBotStatus.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiMutant.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiPlayback.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiPlayer.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiRecorder.h # End Source File # Begin Source File SOURCE=..\src\bots\KikiStatusDisplay.h # End Source File # Begin Source File SOURCE=..\src\bots\tire.h # End Source File # End Group # Begin Source File SOURCE=..\src\bots\KikiBot.cpp # End Source File # Begin Source File SOURCE=..\src\bots\KikiBotFume.cpp # End Source File # Begin Source File SOURCE=..\src\bots\KikiMutant.cpp # End Source File # Begin Source File SOURCE=..\src\bots\KikiPlayback.cpp # End Source File # Begin Source File SOURCE=..\src\bots\KikiPlayer.cpp # End Source File # Begin Source File SOURCE=..\src\bots\KikiRecorder.cpp # End Source File # Begin Source File SOURCE=..\src\bots\KikiStatusDisplay.cpp # End Source File # End Group # Begin Group "gui" # PROP Default_Filter "" # Begin Group "gui_header" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\gui\KikiCharacter.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiColumnMenu.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiGUI.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiMenu.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiPageText.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiScreenText.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiScrollMenu.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiText.h # End Source File # Begin Source File SOURCE=..\src\gui\KikiTextLine.h # End Source File # End Group # Begin Source File SOURCE=..\src\gui\KikiCharacter.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiColumnMenu.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiGUI.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiMenu.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiPageText.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiScreenText.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiScrollMenu.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiText.cpp # End Source File # Begin Source File SOURCE=..\src\gui\KikiTextLine.cpp # End Source File # End Group # Begin Group "items" # PROP Default_Filter "" # Begin Group "items_header" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\items\cylinder.h # End Source File # Begin Source File SOURCE=..\src\items\gear.h # End Source File # Begin Source File SOURCE=..\src\items\generator.h # End Source File # Begin Source File SOURCE=..\src\items\KikiAtom.h # End Source File # Begin Source File SOURCE=..\src\items\KikiBillBoard.h # End Source File # Begin Source File SOURCE=..\src\items\KikiBomb.h # End Source File # Begin Source File SOURCE=..\src\items\KikiBullet.h # End Source File # Begin Source File SOURCE=..\src\items\KikiCellText.h # End Source File # Begin Source File SOURCE=..\src\items\KikiGate.h # End Source File # Begin Source File SOURCE=..\src\items\KikiGear.h # End Source File # Begin Source File SOURCE=..\src\items\KikiGenerator.h # End Source File # Begin Source File SOURCE=..\src\items\KikiItems.h # End Source File # Begin Source File SOURCE=..\src\items\KikiLight.h # End Source File # Begin Source File SOURCE=..\src\items\KikiMotorCylinder.h # End Source File # Begin Source File SOURCE=..\src\items\KikiMotorGear.h # End Source File # Begin Source File SOURCE=..\src\items\KikiNeutron.h # End Source File # Begin Source File SOURCE=..\src\items\KikiPushable.h # End Source File # Begin Source File SOURCE=..\src\items\KikiSpikes.h # End Source File # Begin Source File SOURCE=..\src\items\KikiStone.h # End Source File # Begin Source File SOURCE=..\src\items\KikiSwitch.h # End Source File # Begin Source File SOURCE=..\src\items\KikiTest.h # End Source File # Begin Source File SOURCE=..\src\items\KikiValve.h # End Source File # Begin Source File SOURCE=..\src\items\KikiWall.h # End Source File # Begin Source File SOURCE=..\src\items\KikiWire.h # End Source File # Begin Source File SOURCE=..\src\items\KikiWireStone.h # End Source File # Begin Source File SOURCE=..\src\items\kolben.h # End Source File # Begin Source File SOURCE=..\src\items\motor.h # End Source File # Begin Source File SOURCE=..\src\items\valve.h # End Source File # Begin Source File SOURCE=..\src\items\wire.h # End Source File # End Group # Begin Source File SOURCE=..\src\items\KikiAtom.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiBillBoard.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiBomb.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiBullet.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiCellText.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiGate.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiGear.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiGenerator.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiLight.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiMotorCylinder.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiMotorGear.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiNeutron.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiPushable.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiSpikes.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiStone.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiSwitch.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiTest.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiValve.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiWall.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiWire.cpp # End Source File # Begin Source File SOURCE=..\src\items\KikiWireStone.cpp # End Source File # End Group # Begin Group "main" # PROP Default_Filter "" # Begin Group "main_header" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\main\Kiki.h # End Source File # Begin Source File SOURCE=..\src\main\KikiController.h # End Source File # Begin Source File SOURCE=..\src\main\KikiLocalization.h # End Source File # Begin Source File SOURCE=..\src\main\KikiMain.h # End Source File # Begin Source File SOURCE=..\src\main\KikiPython.h # End Source File # Begin Source File SOURCE=..\src\main\KikiPythonWidget.h # End Source File # End Group # Begin Source File SOURCE=..\src\main\KikiController.cpp # End Source File # Begin Source File SOURCE=..\src\main\KikiPython.cpp # End Source File # Begin Source File SOURCE=..\src\main\KikiPythonWidget.cpp # End Source File # Begin Source File SOURCE=..\src\main\main.cpp # End Source File # End Group # Begin Group "sound" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\sound\KikiSound.cpp # End Source File # Begin Source File SOURCE=..\src\sound\KikiSound.h # End Source File # End Group # Begin Group "world" # PROP Default_Filter "" # Begin Source File SOURCE=..\src\world\KikiCell.cpp # End Source File # Begin Source File SOURCE=..\src\world\KikiCell.h # End Source File # Begin Source File SOURCE=..\src\world\KikiWorld.cpp # End Source File # Begin Source File SOURCE=..\src\world\KikiWorld.h # End Source File # End Group # Begin Group "kikipy" # PROP Default_Filter "" # Begin Source File SOURCE=..\SWIG\KikiPy_wrap.cpp # End Source File # Begin Source File SOURCE=..\SWIG\KikiPy_wrap.h # End Source File # End Group # Begin Source File SOURCE=.\kiki.rc # End Source File # End Group # Begin Group "Ressourcendateien" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project kiki/win32-vc/kiki.dsw0000666000000000000000000000153210070562137013527 0ustar rootrootMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELSCHT WERDEN! ############################################################################### Project: "kiki"=".\kiki.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name kodilib End Project Dependency }}} ############################################################################### Project: "kodilib"="..\kodilib\win32-vc\kodilib.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### kiki/win32-vc/kiki.ico0000666000000000000000000001006610320462535013505 0ustar rootrooth&  ( %02#)18IE-=-0XW <  78+:J5$foI +W+ FPEST: h%%\& A)S%df%c \+ ;b00u;M={*d66B\ X#2c00yAV\:tKEEo$$MK(-j((a$+~tB$;DD}11:1>mqG9l [J8_ <ue44UULLp&&3#CQKD4%AZ }((}##fO-Fx} l-,Rh77QQ;;W!@F;/%2D^ }~##qZ A fok `QD4Ol99FFo**9144'=Fa xseN2 #DULGB5k$GPp8888S**+ +?Id nhYA!6m@<@FMTM @"",7@DC?4226<AB>3&)*( $'$ p??kiki/win32-vc/kiki.ncb0000666000000000000000000000003210336064717013474 0ustar rootrootMicrosoft C/C++ MSF 7.00 kiki/win32-vc/kiki.py0000666000000000000000000024214110336064720013365 0ustar rootroot# This file was created automatically by SWIG. # Don't modify this file, modify the SWIG interface instead. # This file is compatible with both classic and new-style classes. import _kiki def _swig_setattr(self,class_type,name,value): if (name == "this"): if isinstance(value, class_type): self.__dict__[name] = value.this if hasattr(value,"thisown"): self.__dict__["thisown"] = value.thisown del value.thisown return method = class_type.__swig_setmethods__.get(name,None) if method: return method(self,value) self.__dict__[name] = value def _swig_getattr(self,class_type,name): method = class_type.__swig_getmethods__.get(name,None) if method: return method(self) raise AttributeError,name import types try: _object = types.ObjectType _newclass = 1 except AttributeError: class _object : pass _newclass = 0 class KikiPos(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPos, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPos, name) __swig_setmethods__["x"] = _kiki.KikiPos_x_set __swig_getmethods__["x"] = _kiki.KikiPos_x_get if _newclass:x = property(_kiki.KikiPos_x_get,_kiki.KikiPos_x_set) __swig_setmethods__["y"] = _kiki.KikiPos_y_set __swig_getmethods__["y"] = _kiki.KikiPos_y_get if _newclass:y = property(_kiki.KikiPos_y_get,_kiki.KikiPos_y_set) __swig_setmethods__["z"] = _kiki.KikiPos_z_set __swig_getmethods__["z"] = _kiki.KikiPos_z_get if _newclass:z = property(_kiki.KikiPos_z_get,_kiki.KikiPos_z_set) def __init__(self,*args): _swig_setattr(self, KikiPos, 'this', apply(_kiki.new_KikiPos,args)) _swig_setattr(self, KikiPos, 'thisown', 1) def __sub__(*args): return apply(_kiki.KikiPos___sub__,args) def __add__(*args): return apply(_kiki.KikiPos___add__,args) def __iadd__(*args): return apply(_kiki.KikiPos___iadd__,args) def __isub__(*args): return apply(_kiki.KikiPos___isub__,args) def getString(*args): return apply(_kiki.KikiPos_getString,args) def __eq__(*args): return apply(_kiki.KikiPos___eq__,args) def __ne__(*args): return apply(_kiki.KikiPos___ne__,args) def __str__(*args): return apply(_kiki.KikiPos___str__,args) def __del__(self, destroy= _kiki.delete_KikiPos): try: if self.thisown: destroy(self) except: pass def __repr__(self): return "" % (self.this,) class KikiPosPtr(KikiPos): def __init__(self,this): _swig_setattr(self, KikiPos, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPos, 'thisown', 0) _swig_setattr(self, KikiPos,self.__class__,KikiPos) _kiki.KikiPos_swigregister(KikiPosPtr) class KVector(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KVector, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KVector, name) def __init__(self,*args): _swig_setattr(self, KVector, 'this', apply(_kiki.new_KVector,args)) _swig_setattr(self, KVector, 'thisown', 1) def reset(*args): return apply(_kiki.KVector_reset,args) def normalize(*args): return apply(_kiki.KVector_normalize,args) def __iadd__(*args): return apply(_kiki.KVector___iadd__,args) def __isub__(*args): return apply(_kiki.KVector___isub__,args) def __imul__(*args): return apply(_kiki.KVector___imul__,args) def __idiv__(*args): return apply(_kiki.KVector___idiv__,args) def cross(*args): return apply(_kiki.KVector_cross,args) def __sub__(*args): return apply(_kiki.KVector___sub__,args) def __add__(*args): return apply(_kiki.KVector___add__,args) def __mul__(*args): return apply(_kiki.KVector___mul__,args) def __div__(*args): return apply(_kiki.KVector___div__,args) def perpendicular(*args): return apply(_kiki.KVector_perpendicular,args) def parallel(*args): return apply(_kiki.KVector_parallel,args) def reflect(*args): return apply(_kiki.KVector_reflect,args) def normal(*args): return apply(_kiki.KVector_normal,args) def length(*args): return apply(_kiki.KVector_length,args) def angle(*args): return apply(_kiki.KVector_angle,args) def xyangle(*args): return apply(_kiki.KVector_xyangle,args) def xyperp(*args): return apply(_kiki.KVector_xyperp,args) def round(*args): return apply(_kiki.KVector_round,args) def glVertex(*args): return apply(_kiki.KVector_glVertex,args) def __getitem__(*args): return apply(_kiki.KVector___getitem__,args) def __str__(*args): return apply(_kiki.KVector___str__,args) def __del__(self, destroy= _kiki.delete_KVector): try: if self.thisown: destroy(self) except: pass def __repr__(self): return "" % (self.this,) class KVectorPtr(KVector): def __init__(self,this): _swig_setattr(self, KVector, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KVector, 'thisown', 0) _swig_setattr(self, KVector,self.__class__,KVector) _kiki.KVector_swigregister(KVectorPtr) class KQuaternion(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KQuaternion, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KQuaternion, name) __swig_setmethods__["w"] = _kiki.KQuaternion_w_set __swig_getmethods__["w"] = _kiki.KQuaternion_w_get if _newclass:w = property(_kiki.KQuaternion_w_get,_kiki.KQuaternion_w_set) __swig_setmethods__["x"] = _kiki.KQuaternion_x_set __swig_getmethods__["x"] = _kiki.KQuaternion_x_get if _newclass:x = property(_kiki.KQuaternion_x_get,_kiki.KQuaternion_x_set) __swig_setmethods__["y"] = _kiki.KQuaternion_y_set __swig_getmethods__["y"] = _kiki.KQuaternion_y_get if _newclass:y = property(_kiki.KQuaternion_y_get,_kiki.KQuaternion_y_set) __swig_setmethods__["z"] = _kiki.KQuaternion_z_set __swig_getmethods__["z"] = _kiki.KQuaternion_z_get if _newclass:z = property(_kiki.KQuaternion_z_get,_kiki.KQuaternion_z_set) def __init__(self,*args): _swig_setattr(self, KQuaternion, 'this', apply(_kiki.new_KQuaternion,args)) _swig_setattr(self, KQuaternion, 'thisown', 1) __swig_getmethods__["rotationAroundVector"] = lambda x: _kiki.KQuaternion_rotationAroundVector if _newclass:rotationAroundVector = staticmethod(_kiki.KQuaternion_rotationAroundVector) def rotate(*args): return apply(_kiki.KQuaternion_rotate,args) def normalize(*args): return apply(_kiki.KQuaternion_normalize,args) def invert(*args): return apply(_kiki.KQuaternion_invert,args) def conjugate(*args): return apply(_kiki.KQuaternion_conjugate,args) def getNormal(*args): return apply(_kiki.KQuaternion_getNormal,args) def getConjugate(*args): return apply(_kiki.KQuaternion_getConjugate,args) def getInverse(*args): return apply(_kiki.KQuaternion_getInverse,args) def length(*args): return apply(_kiki.KQuaternion_length,args) def glRotate(*args): return apply(_kiki.KQuaternion_glRotate,args) def slerp(*args): return apply(_kiki.KQuaternion_slerp,args) def __mul__(*args): return apply(_kiki.KQuaternion___mul__,args) def __str__(*args): return apply(_kiki.KQuaternion___str__,args) def __del__(self, destroy= _kiki.delete_KQuaternion): try: if self.thisown: destroy(self) except: pass def __repr__(self): return "" % (self.this,) class KQuaternionPtr(KQuaternion): def __init__(self,this): _swig_setattr(self, KQuaternion, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KQuaternion, 'thisown', 0) _swig_setattr(self, KQuaternion,self.__class__,KQuaternion) _kiki.KQuaternion_swigregister(KQuaternionPtr) KQuaternion_rotationAroundVector = _kiki.KQuaternion_rotationAroundVector class KColor(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KColor, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KColor, name) def __init__(self,*args): _swig_setattr(self, KColor, 'this', apply(_kiki.new_KColor,args)) _swig_setattr(self, KColor, 'thisown', 1) def setValues(*args): return apply(_kiki.KColor_setValues,args) def setRed(*args): return apply(_kiki.KColor_setRed,args) def setGreen(*args): return apply(_kiki.KColor_setGreen,args) def setBlue(*args): return apply(_kiki.KColor_setBlue,args) def setAlpha(*args): return apply(_kiki.KColor_setAlpha,args) def getRed(*args): return apply(_kiki.KColor_getRed,args) def getGreen(*args): return apply(_kiki.KColor_getGreen,args) def getBlue(*args): return apply(_kiki.KColor_getBlue,args) def getAlpha(*args): return apply(_kiki.KColor_getAlpha,args) def glColor(*args): return apply(_kiki.KColor_glColor,args) def __str__(*args): return apply(_kiki.KColor___str__,args) def __del__(self, destroy= _kiki.delete_KColor): try: if self.thisown: destroy(self) except: pass def __repr__(self): return "" % (self.this,) class KColorPtr(KColor): def __init__(self,this): _swig_setattr(self, KColor, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KColor, 'thisown', 0) _swig_setattr(self, KColor,self.__class__,KColor) _kiki.KColor_swigregister(KColorPtr) class KProjection(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KProjection, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KProjection, name) def focusOn(*args): return apply(_kiki.KProjection_focusOn,args) def setFov(*args): return apply(_kiki.KProjection_setFov,args) def getFov(*args): return apply(_kiki.KProjection_getFov,args) def setViewport(*args): return apply(_kiki.KProjection_setViewport,args) def setPosition(*args): return apply(_kiki.KProjection_setPosition,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KProjectionPtr(KProjection): def __init__(self,this): _swig_setattr(self, KProjection, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KProjection, 'thisown', 0) _swig_setattr(self, KProjection,self.__class__,KProjection) _kiki.KProjection_swigregister(KProjectionPtr) class KKey(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KKey, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KKey, name) def __init__(self,*args): _swig_setattr(self, KKey, 'this', apply(_kiki.new_KKey,args)) _swig_setattr(self, KKey, 'thisown', 1) __swig_setmethods__["name"] = _kiki.KKey_name_set __swig_getmethods__["name"] = _kiki.KKey_name_get if _newclass:name = property(_kiki.KKey_name_get,_kiki.KKey_name_set) def getUnmodifiedName(*args): return apply(_kiki.KKey_getUnmodifiedName,args) def getModifierName(*args): return apply(_kiki.KKey_getModifierName,args) def __repr__(self): return "" % (self.this,) class KKeyPtr(KKey): def __init__(self,this): _swig_setattr(self, KKey, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KKey, 'thisown', 0) _swig_setattr(self, KKey,self.__class__,KKey) _kiki.KKey_swigregister(KKeyPtr) class KikiAction(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiAction, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiAction, name) ONCE = _kiki.KikiAction_ONCE CONTINUOUS = _kiki.KikiAction_CONTINUOUS REPEAT = _kiki.KikiAction_REPEAT def __init__(self,*args): _swig_setattr(self, KikiAction, 'this', apply(_kiki.new_KikiAction,args)) _swig_setattr(self, KikiAction, 'thisown', 1) def getId(*args): return apply(_kiki.KikiAction_getId,args) def getName(*args): return apply(_kiki.KikiAction_getName,args) def getRelativeTime(*args): return apply(_kiki.KikiAction_getRelativeTime,args) def getRelativeDelta(*args): return apply(_kiki.KikiAction_getRelativeDelta,args) def getDuration(*args): return apply(_kiki.KikiAction_getDuration,args) def setDuration(*args): return apply(_kiki.KikiAction_setDuration,args) def __repr__(self): return "" % (self.this,) class KikiActionPtr(KikiAction): def __init__(self,this): _swig_setattr(self, KikiAction, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiAction, 'thisown', 0) _swig_setattr(self, KikiAction,self.__class__,KikiAction) _kiki.KikiAction_swigregister(KikiActionPtr) class KikiPyAction(KikiAction): __swig_setmethods__ = {} for _s in [KikiAction]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPyAction, name, value) __swig_getmethods__ = {} for _s in [KikiAction]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPyAction, name) def __init__(self,*args): _swig_setattr(self, KikiPyAction, 'this', apply(_kiki.new_KikiPyAction,args)) _swig_setattr(self, KikiPyAction, 'thisown', 1) def __del__(self, destroy= _kiki.delete_KikiPyAction): try: if self.thisown: destroy(self) except: pass def __init__(self,*args): self.this = apply (_kiki.new_KikiPyAction, (self,) + args) self.thisown = 1 def __repr__(self): return "" % (self.this,) class KikiPyActionPtr(KikiPyAction): def __init__(self,this): _swig_setattr(self, KikiPyAction, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPyAction, 'thisown', 0) _swig_setattr(self, KikiPyAction,self.__class__,KikiPyAction) _kiki.KikiPyAction_swigregister(KikiPyActionPtr) class KikiEvent(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiEvent, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiEvent, name) def __init__(self,*args): _swig_setattr(self, KikiEvent, 'this', apply(_kiki.new_KikiEvent,args)) _swig_setattr(self, KikiEvent, 'thisown', 1) def addAction(*args): return apply(_kiki.KikiEvent_addAction,args) def removeAction(*args): return apply(_kiki.KikiEvent_removeAction,args) def removeAllActions(*args): return apply(_kiki.KikiEvent_removeAllActions,args) def removeActionsOfObject(*args): return apply(_kiki.KikiEvent_removeActionsOfObject,args) def removeActionWithName(*args): return apply(_kiki.KikiEvent_removeActionWithName,args) def triggerActions(*args): return apply(_kiki.KikiEvent_triggerActions,args) def getTime(*args): return apply(_kiki.KikiEvent_getTime,args) def __repr__(self): return "" % (self.this,) class KikiEventPtr(KikiEvent): def __init__(self,this): _swig_setattr(self, KikiEvent, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiEvent, 'thisown', 0) _swig_setattr(self, KikiEvent,self.__class__,KikiEvent) _kiki.KikiEvent_swigregister(KikiEventPtr) class KikiActionObject(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiActionObject, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiActionObject, name) def addAction(*args): return apply(_kiki.KikiActionObject_addAction,args) def removeAction(*args): return apply(_kiki.KikiActionObject_removeAction,args) def startTimedAction(*args): return apply(_kiki.KikiActionObject_startTimedAction,args) def startTimer(*args): return apply(_kiki.KikiActionObject_startTimer,args) def getActionWithName(*args): return apply(_kiki.KikiActionObject_getActionWithName,args) def getActionWithId(*args): return apply(_kiki.KikiActionObject_getActionWithId,args) def addEventWithName(*args): return apply(_kiki.KikiActionObject_addEventWithName,args) def getEventWithName(*args): return apply(_kiki.KikiActionObject_getEventWithName,args) def getEventWithId(*args): return apply(_kiki.KikiActionObject_getEventWithId,args) def getClassName(*args): return apply(_kiki.KikiActionObject_getClassName,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiActionObjectPtr(KikiActionObject): def __init__(self,this): _swig_setattr(self, KikiActionObject, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiActionObject, 'thisown', 0) _swig_setattr(self, KikiActionObject,self.__class__,KikiActionObject) _kiki.KikiActionObject_swigregister(KikiActionObjectPtr) class KikiObject(KikiActionObject): __swig_setmethods__ = {} for _s in [KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiObject, name, value) __swig_getmethods__ = {} for _s in [KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiObject, name) def setName(*args): return apply(_kiki.KikiObject_setName,args) def getName(*args): return apply(_kiki.KikiObject_getName,args) def getPos(*args): return apply(_kiki.KikiObject_getPos,args) def setPosition(*args): return apply(_kiki.KikiObject_setPosition,args) def getPosition(*args): return apply(_kiki.KikiObject_getPosition,args) def setOrientation(*args): return apply(_kiki.KikiObject_setOrientation,args) def getOrientation(*args): return apply(_kiki.KikiObject_getOrientation,args) def setCurrentOrientation(*args): return apply(_kiki.KikiObject_setCurrentOrientation,args) def getCurrentOrientation(*args): return apply(_kiki.KikiObject_getCurrentOrientation,args) def isSpaceEgoistic(*args): return apply(_kiki.KikiObject_isSpaceEgoistic,args) def getClassName(*args): return apply(_kiki.KikiObject_getClassName,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiObjectPtr(KikiObject): def __init__(self,this): _swig_setattr(self, KikiObject, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiObject, 'thisown', 0) _swig_setattr(self, KikiObject,self.__class__,KikiObject) _kiki.KikiObject_swigregister(KikiObjectPtr) class KikiBotStatus(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBotStatus, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiBotStatus, name) def getMoves(*args): return apply(_kiki.KikiBotStatus_getMoves,args) def setMoves(*args): return apply(_kiki.KikiBotStatus_setMoves,args) def addMoves(*args): return apply(_kiki.KikiBotStatus_addMoves,args) def getMinMoves(*args): return apply(_kiki.KikiBotStatus_getMinMoves,args) def setMinMoves(*args): return apply(_kiki.KikiBotStatus_setMinMoves,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiBotStatusPtr(KikiBotStatus): def __init__(self,this): _swig_setattr(self, KikiBotStatus, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBotStatus, 'thisown', 0) _swig_setattr(self, KikiBotStatus,self.__class__,KikiBotStatus) _kiki.KikiBotStatus_swigregister(KikiBotStatusPtr) class KikiBotFume(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBotFume, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBotFume, name) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBotFume_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBotFume_setObjectColor) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiBotFumePtr(KikiBotFume): def __init__(self,this): _swig_setattr(self, KikiBotFume, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBotFume, 'thisown', 0) _swig_setattr(self, KikiBotFume,self.__class__,KikiBotFume) _kiki.KikiBotFume_swigregister(KikiBotFumePtr) KikiBotFume_setObjectColor = _kiki.KikiBotFume_setObjectColor class KikiBot(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBot, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBot, name) def isDead(*args): return apply(_kiki.KikiBot_isDead,args) def getDown(*args): return apply(_kiki.KikiBot_getDown,args) def getUp(*args): return apply(_kiki.KikiBot_getUp,args) def getDir(*args): return apply(_kiki.KikiBot_getDir,args) def setMove(*args): return apply(_kiki.KikiBot_setMove,args) def getStatus(*args): return apply(_kiki.KikiBot_getStatus,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiBotPtr(KikiBot): def __init__(self,this): _swig_setattr(self, KikiBot, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBot, 'thisown', 0) _swig_setattr(self, KikiBot,self.__class__,KikiBot) _kiki.KikiBot_swigregister(KikiBotPtr) class KikiStatusDisplay(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiStatusDisplay, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiStatusDisplay, name) def show(*args): return apply(_kiki.KikiStatusDisplay_show,args) def hide(*args): return apply(_kiki.KikiStatusDisplay_hide,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiStatusDisplayPtr(KikiStatusDisplay): def __init__(self,this): _swig_setattr(self, KikiStatusDisplay, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiStatusDisplay, 'thisown', 0) _swig_setattr(self, KikiStatusDisplay,self.__class__,KikiStatusDisplay) _kiki.KikiStatusDisplay_swigregister(KikiStatusDisplayPtr) class KikiPlayback(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPlayback, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPlayback, name) __swig_getmethods__["start"] = lambda x: _kiki.KikiPlayback_start if _newclass:start = staticmethod(_kiki.KikiPlayback_start) __swig_getmethods__["stop"] = lambda x: _kiki.KikiPlayback_stop if _newclass:stop = staticmethod(_kiki.KikiPlayback_stop) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiPlaybackPtr(KikiPlayback): def __init__(self,this): _swig_setattr(self, KikiPlayback, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPlayback, 'thisown', 0) _swig_setattr(self, KikiPlayback,self.__class__,KikiPlayback) _kiki.KikiPlayback_swigregister(KikiPlaybackPtr) KikiPlayback_start = _kiki.KikiPlayback_start KikiPlayback_stop = _kiki.KikiPlayback_stop class KikiPlayer(KikiBot): __swig_setmethods__ = {} for _s in [KikiBot]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPlayer, name, value) __swig_getmethods__ = {} for _s in [KikiBot]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPlayer, name) def die(*args): return apply(_kiki.KikiPlayer_die,args) def reborn(*args): return apply(_kiki.KikiPlayer_reborn,args) def reset(*args): return apply(_kiki.KikiPlayer_reset,args) def startRecorder(*args): return apply(_kiki.KikiPlayer_startRecorder,args) def saveRecorder(*args): return apply(_kiki.KikiPlayer_saveRecorder,args) def getProjection(*args): return apply(_kiki.KikiPlayer_getProjection,args) def handleKey(*args): return apply(_kiki.KikiPlayer_handleKey,args) def handleKeyRelease(*args): return apply(_kiki.KikiPlayer_handleKeyRelease,args) def recordKeyForAction(*args): return apply(_kiki.KikiPlayer_recordKeyForAction,args) __swig_getmethods__["getActionForKey"] = lambda x: _kiki.KikiPlayer_getActionForKey if _newclass:getActionForKey = staticmethod(_kiki.KikiPlayer_getActionForKey) __swig_getmethods__["getKeyForAction"] = lambda x: _kiki.KikiPlayer_getKeyForAction if _newclass:getKeyForAction = staticmethod(_kiki.KikiPlayer_getKeyForAction) __swig_getmethods__["setKeyForAction"] = lambda x: _kiki.KikiPlayer_setKeyForAction if _newclass:setKeyForAction = staticmethod(_kiki.KikiPlayer_setKeyForAction) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiPlayer_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiPlayer_setObjectColor) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiPlayerPtr(KikiPlayer): def __init__(self,this): _swig_setattr(self, KikiPlayer, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPlayer, 'thisown', 0) _swig_setattr(self, KikiPlayer,self.__class__,KikiPlayer) _kiki.KikiPlayer_swigregister(KikiPlayerPtr) KikiPlayer_getActionForKey = _kiki.KikiPlayer_getActionForKey KikiPlayer_getKeyForAction = _kiki.KikiPlayer_getKeyForAction KikiPlayer_setKeyForAction = _kiki.KikiPlayer_setKeyForAction KikiPlayer_setObjectColor = _kiki.KikiPlayer_setObjectColor class KikiMutant(KikiBot): __swig_setmethods__ = {} for _s in [KikiBot]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMutant, name, value) __swig_getmethods__ = {} for _s in [KikiBot]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMutant, name) def __init__(self,*args): _swig_setattr(self, KikiMutant, 'this', apply(_kiki.new_KikiMutant,args)) _swig_setattr(self, KikiMutant, 'thisown', 1) def die(*args): return apply(_kiki.KikiMutant_die,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMutant_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMutant_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiMutantPtr(KikiMutant): def __init__(self,this): _swig_setattr(self, KikiMutant, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMutant, 'thisown', 0) _swig_setattr(self, KikiMutant,self.__class__,KikiMutant) _kiki.KikiMutant_swigregister(KikiMutantPtr) KikiMutant_setObjectColor = _kiki.KikiMutant_setObjectColor class KikiSound(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSound, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiSound, name) def toggleMute(*args): return apply(_kiki.KikiSound_toggleMute,args) def setMute(*args): return apply(_kiki.KikiSound_setMute,args) def isMute(*args): return apply(_kiki.KikiSound_isMute,args) def setSoundVolume(*args): return apply(_kiki.KikiSound_setSoundVolume,args) def getSoundVolume(*args): return apply(_kiki.KikiSound_getSoundVolume,args) def playSound(*args): return apply(_kiki.KikiSound_playSound,args) def playSoundAtPos(*args): return apply(_kiki.KikiSound_playSoundAtPos,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiSoundPtr(KikiSound): def __init__(self,this): _swig_setattr(self, KikiSound, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSound, 'thisown', 0) _swig_setattr(self, KikiSound,self.__class__,KikiSound) _kiki.KikiSound_swigregister(KikiSoundPtr) class KikiWorld(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWorld, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiWorld, name) CAMERA_INSIDE = _kiki.KikiWorld_CAMERA_INSIDE CAMERA_BEHIND = _kiki.KikiWorld_CAMERA_BEHIND CAMERA_FOLLOW = _kiki.KikiWorld_CAMERA_FOLLOW def setSize(*args): return apply(_kiki.KikiWorld_setSize,args) def getSize(*args): return apply(_kiki.KikiWorld_getSize,args) def setName(*args): return apply(_kiki.KikiWorld_setName,args) def getName(*args): return apply(_kiki.KikiWorld_getName,args) def init(*args): return apply(_kiki.KikiWorld_init,args) def setDisplayShadows(*args): return apply(_kiki.KikiWorld_setDisplayShadows,args) def setDisplayRaster(*args): return apply(_kiki.KikiWorld_setDisplayRaster,args) def setDisplayBorder(*args): return apply(_kiki.KikiWorld_setDisplayBorder,args) def setRasterSize(*args): return apply(_kiki.KikiWorld_setRasterSize,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWorld_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWorld_setObjectColor) def changeCameraMode(*args): return apply(_kiki.KikiWorld_changeCameraMode,args) def getCameraMode(*args): return apply(_kiki.KikiWorld_getCameraMode,args) def setCameraMode(*args): return apply(_kiki.KikiWorld_setCameraMode,args) def getProjection(*args): return apply(_kiki.KikiWorld_getProjection,args) def addObjectAtPos(*args): return apply(_kiki.KikiWorld_addObjectAtPos,args) def setObjectAtPos(*args): return apply(_kiki.KikiWorld_setObjectAtPos,args) def unsetObject(*args): return apply(_kiki.KikiWorld_unsetObject,args) def removeObject(*args): return apply(_kiki.KikiWorld_removeObject,args) def deleteObject(*args): return apply(_kiki.KikiWorld_deleteObject,args) def deleteAllObjects(*args): return apply(_kiki.KikiWorld_deleteAllObjects,args) def deleteObjectsWithClassName(*args): return apply(_kiki.KikiWorld_deleteObjectsWithClassName,args) def getObjectWithName(*args): return apply(_kiki.KikiWorld_getObjectWithName,args) def moveObjectToPos(*args): return apply(_kiki.KikiWorld_moveObjectToPos,args) def objectWillMoveToPos(*args): return apply(_kiki.KikiWorld_objectWillMoveToPos,args) def objectMovedFromPos(*args): return apply(_kiki.KikiWorld_objectMovedFromPos,args) def getBotAtPos(*args): return apply(_kiki.KikiWorld_getBotAtPos,args) def getOccupantAtPos(*args): return apply(_kiki.KikiWorld_getOccupantAtPos,args) def getRealOccupantAtPos(*args): return apply(_kiki.KikiWorld_getRealOccupantAtPos,args) def getNearestValidPos(*args): return apply(_kiki.KikiWorld_getNearestValidPos,args) def isInvalidPos(*args): return apply(_kiki.KikiWorld_isInvalidPos,args) def isValidPos(*args): return apply(_kiki.KikiWorld_isValidPos,args) def isUnoccupiedPos(*args): return apply(_kiki.KikiWorld_isUnoccupiedPos,args) def isOccupiedPos(*args): return apply(_kiki.KikiWorld_isOccupiedPos,args) def posToIndex(*args): return apply(_kiki.KikiWorld_posToIndex,args) def indexToPos(*args): return apply(_kiki.KikiWorld_indexToPos,args) def getPickedPos(*args): return apply(_kiki.KikiWorld_getPickedPos,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiWorldPtr(KikiWorld): def __init__(self,this): _swig_setattr(self, KikiWorld, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWorld, 'thisown', 0) _swig_setattr(self, KikiWorld,self.__class__,KikiWorld) _kiki.KikiWorld_swigregister(KikiWorldPtr) KikiWorld_setObjectColor = _kiki.KikiWorld_setObjectColor class KEventHandler(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KEventHandler, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KEventHandler, name) def quit(*args): return apply(_kiki.KEventHandler_quit,args) __swig_getmethods__["getMouseState"] = lambda x: _kiki.KEventHandler_getMouseState if _newclass:getMouseState = staticmethod(_kiki.KEventHandler_getMouseState) __swig_getmethods__["getMousePos"] = lambda x: _kiki.KEventHandler_getMousePos if _newclass:getMousePos = staticmethod(_kiki.KEventHandler_getMousePos) __swig_getmethods__["getMouseDelta"] = lambda x: _kiki.KEventHandler_getMouseDelta if _newclass:getMouseDelta = staticmethod(_kiki.KEventHandler_getMouseDelta) __swig_getmethods__["getScreenSize"] = lambda x: _kiki.KEventHandler_getScreenSize if _newclass:getScreenSize = staticmethod(_kiki.KEventHandler_getScreenSize) __swig_getmethods__["setScreenSize"] = lambda x: _kiki.KEventHandler_setScreenSize if _newclass:setScreenSize = staticmethod(_kiki.KEventHandler_setScreenSize) __swig_getmethods__["getFullscreen"] = lambda x: _kiki.KEventHandler_getFullscreen if _newclass:getFullscreen = staticmethod(_kiki.KEventHandler_getFullscreen) __swig_getmethods__["setFullscreen"] = lambda x: _kiki.KEventHandler_setFullscreen if _newclass:setFullscreen = staticmethod(_kiki.KEventHandler_setFullscreen) __swig_getmethods__["getTime"] = lambda x: _kiki.KEventHandler_getTime if _newclass:getTime = staticmethod(_kiki.KEventHandler_getTime) def setWireframeMode(*args): return apply(_kiki.KEventHandler_setWireframeMode,args) def setDisplayFps(*args): return apply(_kiki.KEventHandler_setDisplayFps,args) def getDisplayFps(*args): return apply(_kiki.KEventHandler_getDisplayFps,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KEventHandlerPtr(KEventHandler): def __init__(self,this): _swig_setattr(self, KEventHandler, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KEventHandler, 'thisown', 0) _swig_setattr(self, KEventHandler,self.__class__,KEventHandler) _kiki.KEventHandler_swigregister(KEventHandlerPtr) KEventHandler_getMouseState = _kiki.KEventHandler_getMouseState KEventHandler_getMousePos = _kiki.KEventHandler_getMousePos KEventHandler_getMouseDelta = _kiki.KEventHandler_getMouseDelta KEventHandler_getScreenSize = _kiki.KEventHandler_getScreenSize KEventHandler_setScreenSize = _kiki.KEventHandler_setScreenSize KEventHandler_getFullscreen = _kiki.KEventHandler_getFullscreen KEventHandler_setFullscreen = _kiki.KEventHandler_setFullscreen KEventHandler_getTime = _kiki.KEventHandler_getTime class KikiController(KEventHandler,KikiActionObject): __swig_setmethods__ = {} for _s in [KEventHandler,KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiController, name, value) __swig_getmethods__ = {} for _s in [KEventHandler,KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiController, name) __swig_setmethods__["gui"] = _kiki.KikiController_gui_set __swig_getmethods__["gui"] = _kiki.KikiController_gui_get if _newclass:gui = property(_kiki.KikiController_gui_get,_kiki.KikiController_gui_set) __swig_setmethods__["sound"] = _kiki.KikiController_sound_set __swig_getmethods__["sound"] = _kiki.KikiController_sound_get if _newclass:sound = property(_kiki.KikiController_sound_get,_kiki.KikiController_sound_set) __swig_setmethods__["world"] = _kiki.KikiController_world_set __swig_getmethods__["world"] = _kiki.KikiController_world_get if _newclass:world = property(_kiki.KikiController_world_get,_kiki.KikiController_world_set) __swig_setmethods__["player"] = _kiki.KikiController_player_set __swig_getmethods__["player"] = _kiki.KikiController_player_get if _newclass:player = property(_kiki.KikiController_player_get,_kiki.KikiController_player_set) __swig_setmethods__["python"] = _kiki.KikiController_python_set __swig_getmethods__["python"] = _kiki.KikiController_python_get if _newclass:python = property(_kiki.KikiController_python_get,_kiki.KikiController_python_set) __swig_setmethods__["player_status"] = _kiki.KikiController_player_status_set __swig_getmethods__["player_status"] = _kiki.KikiController_player_status_get if _newclass:player_status = property(_kiki.KikiController_player_status_get,_kiki.KikiController_player_status_set) __swig_setmethods__["timer_event"] = _kiki.KikiController_timer_event_set __swig_getmethods__["timer_event"] = _kiki.KikiController_timer_event_get if _newclass:timer_event = property(_kiki.KikiController_timer_event_get,_kiki.KikiController_timer_event_set) def getPlayer(*args): return apply(_kiki.KikiController_getPlayer,args) def unmapMsTime(*args): return apply(_kiki.KikiController_unmapMsTime,args) def mapMsTime(*args): return apply(_kiki.KikiController_mapMsTime,args) def setSpeed(*args): return apply(_kiki.KikiController_setSpeed,args) def getSpeed(*args): return apply(_kiki.KikiController_getSpeed,args) def getKikiHome(*args): return apply(_kiki.KikiController_getKikiHome,args) def setGamma(*args): return apply(_kiki.KikiController_setGamma,args) def getGamma(*args): return apply(_kiki.KikiController_getGamma,args) def displayText(*args): return apply(_kiki.KikiController_displayText,args) def getLocalizedString(*args): return apply(_kiki.KikiController_getLocalizedString,args) def isDebugVersion(*args): return apply(_kiki.KikiController_isDebugVersion,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiControllerPtr(KikiController): def __init__(self,this): _swig_setattr(self, KikiController, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiController, 'thisown', 0) _swig_setattr(self, KikiController,self.__class__,KikiController) _kiki.KikiController_swigregister(KikiControllerPtr) replaceTabs = _kiki.replaceTabs class KWindow(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KWindow, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KWindow, name) def isVisible(*args): return apply(_kiki.KWindow_isVisible,args) def setVisibility(*args): return apply(_kiki.KWindow_setVisibility,args) def toggleVisibility(*args): return apply(_kiki.KWindow_toggleVisibility,args) def maximize(*args): return apply(_kiki.KWindow_maximize,args) def show(*args): return apply(_kiki.KWindow_show,args) def hide(*args): return apply(_kiki.KWindow_hide,args) def close(*args): return apply(_kiki.KWindow_close,args) def setSize(*args): return apply(_kiki.KWindow_setSize,args) def setPosition(*args): return apply(_kiki.KWindow_setPosition,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KWindowPtr(KWindow): def __init__(self,this): _swig_setattr(self, KWindow, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KWindow, 'thisown', 0) _swig_setattr(self, KWindow,self.__class__,KWindow) _kiki.KWindow_swigregister(KWindowPtr) kiki = _kiki.kiki class KikiText(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiText, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiText, name) base_color = _kiki.KikiText_base_color bright_color = _kiki.KikiText_bright_color dark_color = _kiki.KikiText_dark_color def __init__(self,*args): _swig_setattr(self, KikiText, 'this', apply(_kiki.new_KikiText,args)) _swig_setattr(self, KikiText, 'thisown', 1) def setText(*args): return apply(_kiki.KikiText_setText,args) def getText(*args): return apply(_kiki.KikiText_getText,args) def clear(*args): return apply(_kiki.KikiText_clear,args) def isEmpty(*args): return apply(_kiki.KikiText_isEmpty,args) def addText(*args): return apply(_kiki.KikiText_addText,args) def getColor(*args): return apply(_kiki.KikiText_getColor,args) def setColor(*args): return apply(_kiki.KikiText_setColor,args) def setAlpha(*args): return apply(_kiki.KikiText_setAlpha,args) def isAnimated(*args): return apply(_kiki.KikiText_isAnimated,args) def setAnimated(*args): return apply(_kiki.KikiText_setAnimated,args) def isCentered(*args): return apply(_kiki.KikiText_isCentered,args) def setCentered(*args): return apply(_kiki.KikiText_setCentered,args) def getWidth(*args): return apply(_kiki.KikiText_getWidth,args) def getHeight(*args): return apply(_kiki.KikiText_getHeight,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiText_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiText_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiTextPtr(KikiText): def __init__(self,this): _swig_setattr(self, KikiText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiText, 'thisown', 0) _swig_setattr(self, KikiText,self.__class__,KikiText) _kiki.KikiText_swigregister(KikiTextPtr) KikiText_setObjectColor = _kiki.KikiText_setObjectColor class KikiGUI(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGUI, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGUI, name) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiGUIPtr(KikiGUI): def __init__(self,this): _swig_setattr(self, KikiGUI, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGUI, 'thisown', 0) _swig_setattr(self, KikiGUI,self.__class__,KikiGUI) _kiki.KikiGUI_swigregister(KikiGUIPtr) class KikiScreenText(KikiText,KikiActionObject): __swig_setmethods__ = {} for _s in [KikiText,KikiActionObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiScreenText, name, value) __swig_getmethods__ = {} for _s in [KikiText,KikiActionObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiScreenText, name) def __init__(self,*args): _swig_setattr(self, KikiScreenText, 'this', apply(_kiki.new_KikiScreenText,args)) _swig_setattr(self, KikiScreenText, 'thisown', 1) def addText(*args): return apply(_kiki.KikiScreenText_addText,args) def setText(*args): return apply(_kiki.KikiScreenText_setText,args) def show(*args): return apply(_kiki.KikiScreenText_show,args) def getProjection(*args): return apply(_kiki.KikiScreenText_getProjection,args) def __repr__(self): return "" % (self.this,) class KikiScreenTextPtr(KikiScreenText): def __init__(self,this): _swig_setattr(self, KikiScreenText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiScreenText, 'thisown', 0) _swig_setattr(self, KikiScreenText,self.__class__,KikiScreenText) _kiki.KikiScreenText_swigregister(KikiScreenTextPtr) class KikiMenu(KikiScreenText): __swig_setmethods__ = {} for _s in [KikiScreenText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMenu, name, value) __swig_getmethods__ = {} for _s in [KikiScreenText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMenu, name) def __init__(self,*args): _swig_setattr(self, KikiMenu, 'this', apply(_kiki.new_KikiMenu,args)) _swig_setattr(self, KikiMenu, 'thisown', 1) def addItem(*args): return apply(_kiki.KikiMenu_addItem,args) def setEscapeActive(*args): return apply(_kiki.KikiMenu_setEscapeActive,args) def __repr__(self): return "" % (self.this,) class KikiMenuPtr(KikiMenu): def __init__(self,this): _swig_setattr(self, KikiMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMenu, 'thisown', 0) _swig_setattr(self, KikiMenu,self.__class__,KikiMenu) _kiki.KikiMenu_swigregister(KikiMenuPtr) class KikiScrollMenu(KikiMenu): __swig_setmethods__ = {} for _s in [KikiMenu]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiScrollMenu, name, value) __swig_getmethods__ = {} for _s in [KikiMenu]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiScrollMenu, name) def __init__(self,*args): _swig_setattr(self, KikiScrollMenu, 'this', apply(_kiki.new_KikiScrollMenu,args)) _swig_setattr(self, KikiScrollMenu, 'thisown', 1) def addItem(*args): return apply(_kiki.KikiScrollMenu_addItem,args) def __repr__(self): return "" % (self.this,) class KikiScrollMenuPtr(KikiScrollMenu): def __init__(self,this): _swig_setattr(self, KikiScrollMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiScrollMenu, 'thisown', 0) _swig_setattr(self, KikiScrollMenu,self.__class__,KikiScrollMenu) _kiki.KikiScrollMenu_swigregister(KikiScrollMenuPtr) class KikiColumnMenu(KikiMenu): __swig_setmethods__ = {} for _s in [KikiMenu]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiColumnMenu, name, value) __swig_getmethods__ = {} for _s in [KikiMenu]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiColumnMenu, name) def __init__(self,*args): _swig_setattr(self, KikiColumnMenu, 'this', apply(_kiki.new_KikiColumnMenu,args)) _swig_setattr(self, KikiColumnMenu, 'thisown', 1) def __repr__(self): return "" % (self.this,) class KikiColumnMenuPtr(KikiColumnMenu): def __init__(self,this): _swig_setattr(self, KikiColumnMenu, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiColumnMenu, 'thisown', 0) _swig_setattr(self, KikiColumnMenu,self.__class__,KikiColumnMenu) _kiki.KikiColumnMenu_swigregister(KikiColumnMenuPtr) class KikiPageText(KikiScreenText): __swig_setmethods__ = {} for _s in [KikiScreenText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPageText, name, value) __swig_getmethods__ = {} for _s in [KikiScreenText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPageText, name) def __init__(self,*args): _swig_setattr(self, KikiPageText, 'this', apply(_kiki.new_KikiPageText,args)) _swig_setattr(self, KikiPageText, 'thisown', 1) def __repr__(self): return "" % (self.this,) class KikiPageTextPtr(KikiPageText): def __init__(self,this): _swig_setattr(self, KikiPageText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPageText, 'thisown', 0) _swig_setattr(self, KikiPageText,self.__class__,KikiPageText) _kiki.KikiPageText_swigregister(KikiPageTextPtr) class KikiFace(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiFace, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiFace, name) PX = _kiki.KikiFace_PX X = _kiki.KikiFace_X PY = _kiki.KikiFace_PY Y = _kiki.KikiFace_Y PZ = _kiki.KikiFace_PZ Z = _kiki.KikiFace_Z NX = _kiki.KikiFace_NX NY = _kiki.KikiFace_NY NZ = _kiki.KikiFace_NZ def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiFacePtr(KikiFace): def __init__(self,this): _swig_setattr(self, KikiFace, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiFace, 'thisown', 0) _swig_setattr(self, KikiFace,self.__class__,KikiFace) _kiki.KikiFace_swigregister(KikiFacePtr) class KikiWire(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWire, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWire, name) UP = _kiki.KikiWire_UP RIGHT = _kiki.KikiWire_RIGHT DOWN = _kiki.KikiWire_DOWN VERTICAL = _kiki.KikiWire_VERTICAL LEFT = _kiki.KikiWire_LEFT HORIZONTAL = _kiki.KikiWire_HORIZONTAL ALL = _kiki.KikiWire_ALL def __init__(self,*args): _swig_setattr(self, KikiWire, 'this', apply(_kiki.new_KikiWire,args)) _swig_setattr(self, KikiWire, 'thisown', 1) def setActive(*args): return apply(_kiki.KikiWire_setActive,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWire_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWire_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiWirePtr(KikiWire): def __init__(self,this): _swig_setattr(self, KikiWire, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWire, 'thisown', 0) _swig_setattr(self, KikiWire,self.__class__,KikiWire) _kiki.KikiWire_swigregister(KikiWirePtr) KikiWire_setObjectColor = _kiki.KikiWire_setObjectColor kikiObjectToWire = _kiki.kikiObjectToWire class KikiGear(KikiObject,KikiFace): __swig_setmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGear, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGear, name) def __init__(self,*args): _swig_setattr(self, KikiGear, 'this', apply(_kiki.new_KikiGear,args)) _swig_setattr(self, KikiGear, 'thisown', 1) def setActive(*args): return apply(_kiki.KikiGear_setActive,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGear_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGear_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiGearPtr(KikiGear): def __init__(self,this): _swig_setattr(self, KikiGear, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGear, 'thisown', 0) _swig_setattr(self, KikiGear,self.__class__,KikiGear) _kiki.KikiGear_swigregister(KikiGearPtr) KikiGear_setObjectColor = _kiki.KikiGear_setObjectColor kikiObjectToGear = _kiki.kikiObjectToGear class KikiValve(KikiObject,KikiFace): __swig_setmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiValve, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiFace]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiValve, name) def __init__(self,*args): _swig_setattr(self, KikiValve, 'this', apply(_kiki.new_KikiValve,args)) _swig_setattr(self, KikiValve, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiValve_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiValve_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiValvePtr(KikiValve): def __init__(self,this): _swig_setattr(self, KikiValve, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiValve, 'thisown', 0) _swig_setattr(self, KikiValve,self.__class__,KikiValve) _kiki.KikiValve_swigregister(KikiValvePtr) KikiValve_setObjectColor = _kiki.KikiValve_setObjectColor kikiObjectToValve = _kiki.kikiObjectToValve class KikiMotorCylinder(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMotorCylinder, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMotorCylinder, name) def __init__(self,*args): _swig_setattr(self, KikiMotorCylinder, 'this', apply(_kiki.new_KikiMotorCylinder,args)) _swig_setattr(self, KikiMotorCylinder, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMotorCylinder_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMotorCylinder_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiMotorCylinderPtr(KikiMotorCylinder): def __init__(self,this): _swig_setattr(self, KikiMotorCylinder, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMotorCylinder, 'thisown', 0) _swig_setattr(self, KikiMotorCylinder,self.__class__,KikiMotorCylinder) _kiki.KikiMotorCylinder_swigregister(KikiMotorCylinderPtr) KikiMotorCylinder_setObjectColor = _kiki.KikiMotorCylinder_setObjectColor class KikiMotorGear(KikiGear): __swig_setmethods__ = {} for _s in [KikiGear]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMotorGear, name, value) __swig_getmethods__ = {} for _s in [KikiGear]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMotorGear, name) def __init__(self,*args): _swig_setattr(self, KikiMotorGear, 'this', apply(_kiki.new_KikiMotorGear,args)) _swig_setattr(self, KikiMotorGear, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMotorGear_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMotorGear_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiMotorGearPtr(KikiMotorGear): def __init__(self,this): _swig_setattr(self, KikiMotorGear, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMotorGear, 'thisown', 0) _swig_setattr(self, KikiMotorGear,self.__class__,KikiMotorGear) _kiki.KikiMotorGear_swigregister(KikiMotorGearPtr) KikiMotorGear_setObjectColor = _kiki.KikiMotorGear_setObjectColor class KikiGenerator(KikiGear): __swig_setmethods__ = {} for _s in [KikiGear]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGenerator, name, value) __swig_getmethods__ = {} for _s in [KikiGear]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGenerator, name) def __init__(self,*args): _swig_setattr(self, KikiGenerator, 'this', apply(_kiki.new_KikiGenerator,args)) _swig_setattr(self, KikiGenerator, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGenerator_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGenerator_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiGeneratorPtr(KikiGenerator): def __init__(self,this): _swig_setattr(self, KikiGenerator, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGenerator, 'thisown', 0) _swig_setattr(self, KikiGenerator,self.__class__,KikiGenerator) _kiki.KikiGenerator_swigregister(KikiGeneratorPtr) KikiGenerator_setObjectColor = _kiki.KikiGenerator_setObjectColor class KikiLight(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiLight, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiLight, name) def __init__(self,*args): _swig_setattr(self, KikiLight, 'this', apply(_kiki.new_KikiLight,args)) _swig_setattr(self, KikiLight, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiLight_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiLight_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiLightPtr(KikiLight): def __init__(self,this): _swig_setattr(self, KikiLight, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiLight, 'thisown', 0) _swig_setattr(self, KikiLight,self.__class__,KikiLight) _kiki.KikiLight_swigregister(KikiLightPtr) KikiLight_setObjectColor = _kiki.KikiLight_setObjectColor kikiObjectToLight = _kiki.kikiObjectToLight class KikiCellText(KikiObject,KikiText): __swig_setmethods__ = {} for _s in [KikiObject,KikiText]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiCellText, name, value) __swig_getmethods__ = {} for _s in [KikiObject,KikiText]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiCellText, name) def __init__(self,*args): _swig_setattr(self, KikiCellText, 'this', apply(_kiki.new_KikiCellText,args)) _swig_setattr(self, KikiCellText, 'thisown', 1) def setOffset(*args): return apply(_kiki.KikiCellText_setOffset,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiCellText_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiCellText_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiCellTextPtr(KikiCellText): def __init__(self,this): _swig_setattr(self, KikiCellText, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiCellText, 'thisown', 0) _swig_setattr(self, KikiCellText,self.__class__,KikiCellText) _kiki.KikiCellText_swigregister(KikiCellTextPtr) KikiCellText_setObjectColor = _kiki.KikiCellText_setObjectColor kikiObjectToCellText = _kiki.kikiObjectToCellText class KikiStone(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiStone, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiStone, name) def __init__(self,*args): _swig_setattr(self, KikiStone, 'this', apply(_kiki.new_KikiStone,args)) _swig_setattr(self, KikiStone, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiStone_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiStone_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiStonePtr(KikiStone): def __init__(self,this): _swig_setattr(self, KikiStone, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiStone, 'thisown', 0) _swig_setattr(self, KikiStone,self.__class__,KikiStone) _kiki.KikiStone_swigregister(KikiStonePtr) KikiStone_setObjectColor = _kiki.KikiStone_setObjectColor kikiObjectToStone = _kiki.kikiObjectToStone class KikiWireStone(KikiStone): __swig_setmethods__ = {} for _s in [KikiStone]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWireStone, name, value) __swig_getmethods__ = {} for _s in [KikiStone]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWireStone, name) def __init__(self,*args): _swig_setattr(self, KikiWireStone, 'this', apply(_kiki.new_KikiWireStone,args)) _swig_setattr(self, KikiWireStone, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWireStone_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWireStone_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiWireStonePtr(KikiWireStone): def __init__(self,this): _swig_setattr(self, KikiWireStone, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWireStone, 'thisown', 0) _swig_setattr(self, KikiWireStone,self.__class__,KikiWireStone) _kiki.KikiWireStone_swigregister(KikiWireStonePtr) KikiWireStone_setObjectColor = _kiki.KikiWireStone_setObjectColor kikiObjectToWireStone = _kiki.kikiObjectToWireStone class KikiWall(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiWall, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiWall, name) def __init__(self,*args): _swig_setattr(self, KikiWall, 'this', apply(_kiki.new_KikiWall,args)) _swig_setattr(self, KikiWall, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiWall_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiWall_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiWallPtr(KikiWall): def __init__(self,this): _swig_setattr(self, KikiWall, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiWall, 'thisown', 0) _swig_setattr(self, KikiWall,self.__class__,KikiWall) _kiki.KikiWall_swigregister(KikiWallPtr) KikiWall_setObjectColor = _kiki.KikiWall_setObjectColor kikiObjectToWall = _kiki.kikiObjectToWall class KikiBomb(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBomb, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBomb, name) def __init__(self,*args): _swig_setattr(self, KikiBomb, 'this', apply(_kiki.new_KikiBomb,args)) _swig_setattr(self, KikiBomb, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBomb_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBomb_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiBombPtr(KikiBomb): def __init__(self,this): _swig_setattr(self, KikiBomb, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBomb, 'thisown', 0) _swig_setattr(self, KikiBomb,self.__class__,KikiBomb) _kiki.KikiBomb_swigregister(KikiBombPtr) KikiBomb_setObjectColor = _kiki.KikiBomb_setObjectColor kikiObjectToBomb = _kiki.kikiObjectToBomb class KikiSwitch(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSwitch, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiSwitch, name) def __init__(self,*args): _swig_setattr(self, KikiSwitch, 'this', apply(_kiki.new_KikiSwitch,args)) _swig_setattr(self, KikiSwitch, 'thisown', 1) def toggle(*args): return apply(_kiki.KikiSwitch_toggle,args) def setActive(*args): return apply(_kiki.KikiSwitch_setActive,args) def isActive(*args): return apply(_kiki.KikiSwitch_isActive,args) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiSwitch_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiSwitch_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiSwitchPtr(KikiSwitch): def __init__(self,this): _swig_setattr(self, KikiSwitch, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSwitch, 'thisown', 0) _swig_setattr(self, KikiSwitch,self.__class__,KikiSwitch) _kiki.KikiSwitch_swigregister(KikiSwitchPtr) KikiSwitch_setObjectColor = _kiki.KikiSwitch_setObjectColor kikiObjectToSwitch = _kiki.kikiObjectToSwitch class KikiGate(KikiSwitch): __swig_setmethods__ = {} for _s in [KikiSwitch]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiGate, name, value) __swig_getmethods__ = {} for _s in [KikiSwitch]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiGate, name) def __init__(self,*args): _swig_setattr(self, KikiGate, 'this', apply(_kiki.new_KikiGate,args)) _swig_setattr(self, KikiGate, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiGate_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiGate_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiGatePtr(KikiGate): def __init__(self,this): _swig_setattr(self, KikiGate, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiGate, 'thisown', 0) _swig_setattr(self, KikiGate,self.__class__,KikiGate) _kiki.KikiGate_swigregister(KikiGatePtr) KikiGate_setObjectColor = _kiki.KikiGate_setObjectColor kikiObjectToGate = _kiki.kikiObjectToGate class KikiAtom(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiAtom, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiAtom, name) def setValue(*args): return apply(_kiki.KikiAtom_setValue,args) def getValue(*args): return apply(_kiki.KikiAtom_getValue,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiAtomPtr(KikiAtom): def __init__(self,this): _swig_setattr(self, KikiAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiAtom, 'thisown', 0) _swig_setattr(self, KikiAtom,self.__class__,KikiAtom) _kiki.KikiAtom_swigregister(KikiAtomPtr) class KikiMovesAtom(KikiAtom): __swig_setmethods__ = {} for _s in [KikiAtom]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiMovesAtom, name, value) __swig_getmethods__ = {} for _s in [KikiAtom]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiMovesAtom, name) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiMovesAtom_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiMovesAtom_setObjectColor) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiMovesAtomPtr(KikiMovesAtom): def __init__(self,this): _swig_setattr(self, KikiMovesAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiMovesAtom, 'thisown', 0) _swig_setattr(self, KikiMovesAtom,self.__class__,KikiMovesAtom) _kiki.KikiMovesAtom_swigregister(KikiMovesAtomPtr) KikiMovesAtom_setObjectColor = _kiki.KikiMovesAtom_setObjectColor class KikiValueAtom(KikiAtom): __swig_setmethods__ = {} for _s in [KikiAtom]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiValueAtom, name, value) __swig_getmethods__ = {} for _s in [KikiAtom]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiValueAtom, name) def __init__(self,*args): _swig_setattr(self, KikiValueAtom, 'this', apply(_kiki.new_KikiValueAtom,args)) _swig_setattr(self, KikiValueAtom, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiValueAtom_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiValueAtom_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiValueAtomPtr(KikiValueAtom): def __init__(self,this): _swig_setattr(self, KikiValueAtom, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiValueAtom, 'thisown', 0) _swig_setattr(self, KikiValueAtom,self.__class__,KikiValueAtom) _kiki.KikiValueAtom_swigregister(KikiValueAtomPtr) KikiValueAtom_setObjectColor = _kiki.KikiValueAtom_setObjectColor class KikiSpikes(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiSpikes, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiSpikes, name) def __init__(self,*args): _swig_setattr(self, KikiSpikes, 'this', apply(_kiki.new_KikiSpikes,args)) _swig_setattr(self, KikiSpikes, 'thisown', 1) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiSpikes_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiSpikes_setObjectColor) def __repr__(self): return "" % (self.this,) class KikiSpikesPtr(KikiSpikes): def __init__(self,this): _swig_setattr(self, KikiSpikes, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiSpikes, 'thisown', 0) _swig_setattr(self, KikiSpikes,self.__class__,KikiSpikes) _kiki.KikiSpikes_swigregister(KikiSpikesPtr) KikiSpikes_setObjectColor = _kiki.KikiSpikes_setObjectColor kikiObjectToSpikes = _kiki.kikiObjectToSpikes class KikiBullet(KikiObject): __swig_setmethods__ = {} for _s in [KikiObject]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiBullet, name, value) __swig_getmethods__ = {} for _s in [KikiObject]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiBullet, name) __swig_getmethods__["setObjectColor"] = lambda x: _kiki.KikiBullet_setObjectColor if _newclass:setObjectColor = staticmethod(_kiki.KikiBullet_setObjectColor) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiBulletPtr(KikiBullet): def __init__(self,this): _swig_setattr(self, KikiBullet, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiBullet, 'thisown', 0) _swig_setattr(self, KikiBullet,self.__class__,KikiBullet) _kiki.KikiBullet_swigregister(KikiBulletPtr) KikiBullet_setObjectColor = _kiki.KikiBullet_setObjectColor class KConsole(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KConsole, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KConsole, name) __swig_getmethods__["_print"] = lambda x: _kiki.KConsole__print if _newclass:_print = staticmethod(_kiki.KConsole__print) __swig_getmethods__["write"] = lambda x: _kiki.KConsole_write if _newclass:write = staticmethod(_kiki.KConsole_write) __swig_getmethods__["printError"] = lambda x: _kiki.KConsole_printError if _newclass:printError = staticmethod(_kiki.KConsole_printError) __swig_getmethods__["getConsole"] = lambda x: _kiki.KConsole_getConsole if _newclass:getConsole = staticmethod(_kiki.KConsole_getConsole) def clear(*args): return apply(_kiki.KConsole_clear,args) def out (self, *args): _kiki.KConsole__print(" ".join(map(str, args))) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KConsolePtr(KConsole): def __init__(self,this): _swig_setattr(self, KConsole, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KConsole, 'thisown', 0) _swig_setattr(self, KConsole,self.__class__,KConsole) _kiki.KConsole_swigregister(KConsolePtr) KConsole__print = _kiki.KConsole__print KConsole_write = _kiki.KConsole_write KConsole_printError = _kiki.KConsole_printError KConsole_getConsole = _kiki.KConsole_getConsole class KikiPythonWidget(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPythonWidget, name, value) __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, KikiPythonWidget, name) __swig_setmethods__["cursorPos"] = _kiki.KikiPythonWidget_cursorPos_set __swig_getmethods__["cursorPos"] = _kiki.KikiPythonWidget_cursorPos_get if _newclass:cursorPos = property(_kiki.KikiPythonWidget_cursorPos_get,_kiki.KikiPythonWidget_cursorPos_set) __swig_setmethods__["selectionPos"] = _kiki.KikiPythonWidget_selectionPos_set __swig_getmethods__["selectionPos"] = _kiki.KikiPythonWidget_selectionPos_get if _newclass:selectionPos = property(_kiki.KikiPythonWidget_selectionPos_get,_kiki.KikiPythonWidget_selectionPos_set) def getTextRows(*args): return apply(_kiki.KikiPythonWidget_getTextRows,args) def getTextCols(*args): return apply(_kiki.KikiPythonWidget_getTextCols,args) def getTextSize(*args): return apply(_kiki.KikiPythonWidget_getTextSize,args) def getColumnWidth(*args): return apply(_kiki.KikiPythonWidget_getColumnWidth,args) def getRowHeight(*args): return apply(_kiki.KikiPythonWidget_getRowHeight,args) def getPythonWindow(*args): return apply(_kiki.KikiPythonWidget_getPythonWindow,args) def displayStringAtPos(*args): return apply(_kiki.KikiPythonWidget_displayStringAtPos,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiPythonWidgetPtr(KikiPythonWidget): def __init__(self,this): _swig_setattr(self, KikiPythonWidget, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPythonWidget, 'thisown', 0) _swig_setattr(self, KikiPythonWidget,self.__class__,KikiPythonWidget) _kiki.KikiPythonWidget_swigregister(KikiPythonWidgetPtr) class KikiPython(KWindow): __swig_setmethods__ = {} for _s in [KWindow]: __swig_setmethods__.update(_s.__swig_setmethods__) __setattr__ = lambda self, name, value: _swig_setattr(self, KikiPython, name, value) __swig_getmethods__ = {} for _s in [KWindow]: __swig_getmethods__.update(_s.__swig_getmethods__) __getattr__ = lambda self, name: _swig_getattr(self, KikiPython, name) def getPythonWidget(*args): return apply(_kiki.KikiPython_getPythonWidget,args) def setScrollBarUnits(*args): return apply(_kiki.KikiPython_setScrollBarUnits,args) def requestUserInput(*args): return apply(_kiki.KikiPython_requestUserInput,args) def setTitle(*args): return apply(_kiki.KikiPython_setTitle,args) def setStatus(*args): return apply(_kiki.KikiPython_setStatus,args) def setInput(*args): return apply(_kiki.KikiPython_setInput,args) def executeFile(*args): return apply(_kiki.KikiPython_executeFile,args) def __init__(self): raise RuntimeError, "No constructor defined" def __repr__(self): return "" % (self.this,) class KikiPythonPtr(KikiPython): def __init__(self,this): _swig_setattr(self, KikiPython, 'this', this) if not hasattr(self,"thisown"): _swig_setattr(self, KikiPython, 'thisown', 0) _swig_setattr(self, KikiPython,self.__class__,KikiPython) _kiki.KikiPython_swigregister(KikiPythonPtr) kiki/win32-vc/kiki.rc0000666000000000000000000000326610070562137013344 0ustar rootroot//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Deutsch (Deutschland) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON1 ICON DISCARDABLE "kiki.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Deutsch (Deutschland) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED kiki/win32-vc/kiki.res0000666000000000000000000001026410326453063013526 0ustar rootroot h 0( %02#)18IE-=-0XW <  78+:J5$foI +W+ FPEST: h%%\& A)S%df%c \+ ;b00u;M={*d66B\ X#2c00yAV\:tKEEo$$MK(-j((a$+~tB$;DD}11:1>mqG9l [J8_ <ue44UULLp&&3#CQKD4%AZ }((}##fO-Fx} l-,Rh77QQ;;W!@F;/%2D^ }~##qZ A fok `QD4Ol99FFo**9144'=Fa xseN2 #DULGB5k$GPp8888S**+ +?Id nhYA!6m@<@FMTM @"",7@DC?4226<AB>3&)*( $'$ p??" e0h  kiki/win32-vc/kiki.sln0000666000000000000000000000273310320462535013531 0ustar rootrootMicrosoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kiki", "kiki.vcproj", "{A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}" ProjectSection(ProjectDependencies) = postProject {E4BD4AF1-A023-4000-8034-18B23D6005B5} = {E4BD4AF1-A023-4000-8034-18B23D6005B5} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kodilib", "..\kodilib\win32-vc\kodilib.vcproj", "{E4BD4AF1-A023-4000-8034-18B23D6005B5}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}.Debug.ActiveCfg = Debug|Win32 {A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}.Debug.Build.0 = Debug|Win32 {A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}.Release.ActiveCfg = Release|Win32 {A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}.Release.Build.0 = Release|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Debug.ActiveCfg = Debug|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Debug.Build.0 = Debug|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Release.ActiveCfg = Release|Win32 {E4BD4AF1-A023-4000-8034-18B23D6005B5}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal kiki/win32-vc/kiki.suo0000666000000000000000000003200010335300271013523 0ustar rootrootࡱ>   Root Entry0_KProjInfoExTaskListUserTasks$IToolboxService  #. !/$%&'()*+,-E123456789:<=>?@ABCDFGHIJKLMNO_QRSTUVWXYZ[\]^`a6urACDDC ComponentsCrystal ReportsData XML Schema Device ControlsData XML Schema Dialog EditorMobile Web Forms Web Forms Components Windows FormsHTMLClipboard RingGeneralrojects\kiki\win32-vc\C:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\IVSMDPropertyBrowser*DebuggerWatches DebuggerBreakpoints(DebuggerExceptions& kiki\win32-vc\rce~xC:\Programme\Microsoft Visual Studio .NET 2003\Vc7\crt\src\C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc\C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\atDebuggerFindSource& DebuggerFindSymbol&DebuggerMemoryWindows,TExternalFilesProjectContents: lmfc\src\atl\i\Python-2.3a2+ &<;<iStartupProj=;4{A\Programme\Microsoft Visual St|ͫ4ᆳͫ4ᆳMultiStartupProj=;4{A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}DocumentWindowPositions0PDocumentWindowUserData. <SolutionConfiguration,ObjMgrContentsg.dwStartupOpt=;StartupProject=&{A48B4E31-BF32-4DA2-BCE4-9B01C09C8731};?{A48B4E31-BF32-NSܾ M%s%ү##G}'bm4l #O¤EQ C:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\win32-vc\kiki.vcprojC:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\win32-vc\kiki.vcprojQuelldateieX in32.fBatchBld=;?{E4BD44DA2-BCE4-9B01C09C8731}.Release|Win32.fBatchBld=;={A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}.Debug|Win32.fBatchBld=;4{E4BD4AF1-A023-4000-8034-18B23D6005B5}.dwStartupOpt=;={E4BD4AF1-A023-4000-8034-18B23D6005B5}.Debug|Win32.fBatchBld=;?{E4BD4AF1-A023-4000-8034-18B23D6005B5}.Release|Win32.fBatchBld=; ActiveCfg=Release;ld=; kodilib kikie;1A-00A0C90n&Quelldateien\items$QuellDebug|Win32DebugSettings...\kiki.exe...\. ....... .,GeneralConfigSettingsVCBscMakeTool(EndConfigPropertiesRelease|Win32DebugSettings...\kiki.exe...\. ....... .,GeneralConfigSettingsVCBscMakeTool(EndConfigPropertiesVCBscMakeTRelease|Win32DebugSettings... ....... .,GeneralConfigSettingsVCBscMakeTool(EndConfigPropertiesDebug|Win32DebugSettings... ....... .,GeneralConfigSettingsVCBscMakeTool(EndConfigPropertiesVCBscMakdateien\base$Quelldateien\bots$Quelldateien\mainHeaderdateien&Headerdateien\mainClassViewContents$ProjExplorerState$UnloadedProjects"kiki 0pyC:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\kodilib\win32-vc\kodilib.vcprojC:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\kodilib\win32-vc\kodilib.vcproj"Quellcodedateien2Quellcodedateien\windows2d# 'KL{E4BD4AF1-A023-4000-8034-18B23D6005B5}|..\kodilib\win32-vc\kodilib.vcproj|c:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\kodilib\src\windows\KConsole.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}123456zv (KLh{A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}|kiki.vcproj|c:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\src\items\KikiLight.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234564AF1-A023-4000-8034-18B23D6005BQuellcodedateien\handler.Quelkodilib;lTaskListShortcuts$"IVSMDDesignerService* lcodedateien\typesHeader-Dateien\Eigene Dateien\projects\kiki\kodilib\src\handler\KEventHandler.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}#v &KL{E4BD4AF1-A023-4000-8034-18B23D6005B5}|..\kodilib\win32-vc\kodilib.vcproj|c:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\kodilib\src\handler\KEventHandler.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234# 'KL{E4BD4AF1-A023-4000-8034-18B23D6005B5}|..\kodilib\win32-vc\kodilib.vcproj|c:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\kodilib\src\types\KProjection.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234# (KLh{A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}|kiki.vcproj|c:\Dokumente und Einstellungen\kodi\Eigene Dateien\projects\kiki\src\bots\KikiPlayer.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}123456odi\Eigene Dateien\projects\kik]|Tͫ4ᆳmͫ4ᆳ5Aͫ4ᆳCOͫ4ᆳ365922C2A2.Header-Dateien\handler{A48B4E31-BF32-4DA2-BCE4-9B01C09C8731}|kiki.vcproj|c:\Dokumente und kiki/win32-vc/kiki.vcproj0000666000000000000000000004575310326004436014247 0ustar rootroot kiki/win32-vc/Release/0000777000000000000000000000000010336064550013441 5ustar rootrootkiki/win32-vc/resource.h0000666000000000000000000000070510070562137014062 0ustar rootroot//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by kiki.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif