/*************************************************************************** Backend.cpp - description ------------------- begin : Mon Dec 9 2002 copyright : (C) 2002 by upi email : upi@apocalypse.rulez.org ***************************************************************************/ #include "common.h" #include "Backend.h" #include "Audio.h" #include "State.h" #include #include #include "MszPerl.h" /*************************************************************************** PUBLIC EXPORTED VARIABLES ***************************************************************************/ PerlInterpreter* my_perl; Backend g_oBackend; /*************************************************************************** PRIVATE VARIABLES (perl variable space) ***************************************************************************/ SV *perl_bgx, *perl_bgy, *perl_px[MAXPLAYERS], *perl_py[MAXPLAYERS], *perl_pf[MAXPLAYERS], *perl_ph[MAXPLAYERS], *perl_phreal[MAXPLAYERS], *perl_gametick, *perl_over, *perl_ko; SV *perl_doodad_x, *perl_doodad_y, *perl_doodad_t, *perl_doodad_f, *perl_doodad_dir, *perl_doodad_gfxowner, *perl_doodad_text; SV *perl_sound, *perl_Translated; /*************************************************************************** TRANSLATION SERVICES ***************************************************************************/ const char* Translate( const char* a_pcText ) { dSP ; ENTER ; SAVETMPS ; PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSVpv(a_pcText, 0))); PUTBACK ; call_pv("Translate", G_DISCARD); FREETMPS ; LEAVE ; if ( NULL == perl_Translated ) { perl_Translated = get_sv("Translated", TRUE); } return SvPV_nolen( perl_Translated ); } const char* TranslateUTF8( const char* a_pcText ) { dSP ; ENTER ; SAVETMPS ; PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSVpv(a_pcText, 0))); PUTBACK ; call_pv("Translate", G_DISCARD); FREETMPS ; LEAVE ; if ( NULL == perl_Translated ) { perl_Translated = get_sv("Translated", TRUE); } return SvPVutf8_nolen( perl_Translated ); } /*************************************************************************** BACKEND CLASS IMPLEMENTATION ***************************************************************************/ #define PERLEVAL(A) eval_pv(A, TRUE); #define PERLCALL(PROC,A,B) { \ dSP; \ ENTER; \ SAVETMPS; \ PUSHMARK(SP); \ XPUSHs(sv_2mortal(newSViv(A))); \ XPUSHs(sv_2mortal(newSViv(B))); \ PUTBACK ; \ \ call_pv( (PROC), G_DISCARD ); \ \ FREETMPS; \ LEAVE; \ } Backend::Backend() { m_iBgX = m_iBgY = 0; m_iNumDoodads = m_iNumSounds = 0; for ( int i=0; iPlaySample( pcSound ); } } bool Backend::IsDead( int a_iPlayer ) { return m_aoPlayers[ a_iPlayer ].m_iRealHitPoints <= 0; } void Backend::PlaySounds() { for ( int i=0; iPlaySample( m_asSounds[i].c_str() ); } } /*************************************************************************** PLAYBACK STRING CONVERSION ROUTINES ***************************************************************************/ void Backend::WriteToString( std::string& a_rsOutString ) { char acBuffer[2048]; int iNumChars = sprintf( acBuffer, "%d %d %d %d %d %d %d %d %d %d %d ", m_iBgX, m_iBgY, m_aoPlayers[0].m_iX, m_aoPlayers[0].m_iY, m_aoPlayers[0].m_iFrame, m_aoPlayers[0].m_iHitPoints, m_aoPlayers[1].m_iX, m_aoPlayers[1].m_iY, m_aoPlayers[1].m_iFrame, m_aoPlayers[1].m_iHitPoints, m_iNumDoodads ); int i; for ( i = 0; i MAXDOODADS ) { m_iNumDoodads = m_iNumSounds = 0; return; } int i, j; for ( i=0; i MAXSOUNDS ) { m_iNumSounds = 0; return; } iTotal += iOffset; for ( i=0; i