bool RenDevBackend::Init(const HWND hWnd) { IDXGIAdapter1* const pSelectedAdapter = nullptr; const D3D_DRIVER_TYPE DriverType = D3D_DRIVER_TYPE::D3D_DRIVER_TYPE_HARDWARE; UINT iFlags = D3D11_CREATE_DEVICE_SINGLETHREADED; #ifdef _DEBUG iFlags |= D3D11_CREATE_DEVICE_FLAG::D3D11_CREATE_DEVICE_DEBUG; #endif const D3D_FEATURE_LEVEL FeatureLevels[] = {D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0}; D3D_FEATURE_LEVEL FeatureLevel; m_SwapChainDesc.BufferCount = 1; m_SwapChainDesc.BufferDesc.Format = DXGI_FORMAT::DXGI_FORMAT_R8G8B8A8_UNORM; m_SwapChainDesc.BufferDesc.RefreshRate.Numerator = 0; m_SwapChainDesc.BufferDesc.RefreshRate.Denominator = 1; m_SwapChainDesc.BufferDesc.Height = 0; m_SwapChainDesc.BufferDesc.Width = 0; m_SwapChainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER::DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; m_SwapChainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING::DXGI_MODE_SCALING_UNSPECIFIED; m_SwapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; m_SwapChainDesc.Flags = 0; m_SwapChainDesc.OutputWindow = hWnd; m_SwapChainDesc.Windowed = TRUE; m_SwapChainDesc.SampleDesc.Count = 1; m_SwapChainDesc.SampleDesc.Quality = 0; m_SwapChainDesc.SwapEffect = DXGI_SWAP_EFFECT::DXGI_SWAP_EFFECT_DISCARD; //Todo: Win8 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL //Todo: waitable swap chain IDXGISwapChain2::GetFrameLatencyWaitableObject ThrowIfFail(D3D11CreateDeviceAndSwapChain(pSelectedAdapter, DriverType, NULL, iFlags, FeatureLevels, _countof(FeatureLevels), D3D11_SDK_VERSION, &m_SwapChainDesc, &m_pSwapChain, &m_pDevice, &FeatureLevel, &m_pDeviceContext), L"Failed to create device and / or swap chain."); SetResourceName(m_pDeviceContext, "MainDeviceContext"); SetResourceName(m_pSwapChain, "MainSwapChain"); LOGMESSAGEF(L"Device created with Feature Level %x.", FeatureLevel); ThrowIfFail(m_pDevice.As(&m_pDXGIDevice), L"Failed to get DXGI device."); SetResourceName(m_pDevice, "MainDevice"); ComPtr<IDXGIAdapter> pAdapter; ThrowIfFail(m_pDXGIDevice->GetAdapter(&pAdapter), L"Failed to get DXGI adapter."); ThrowIfFail(pAdapter.As(&m_pAdapter), L"Failed to cast DXGI adapter."); DXGI_ADAPTER_DESC1 AdapterDesc; ThrowIfFail(m_pAdapter->GetDesc1(&AdapterDesc), L"Failed to get adapter descriptor."); LOGMESSAGEF(L"Adapter: %s.", AdapterDesc.Description); return true; }
bool CRegionResourceDef::r_LoadVal( CScript & s ) { ADDTOCALLSTACK("CRegionResourceDef::r_LoadVal"); EXC_TRY("LoadVal"); // RES_REGIONRESOURCE switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case RMC_AMOUNT: // AMOUNT m_Amount.Load( s.GetArgRaw() ); break; case RMC_DEFNAME: // "DEFNAME", return SetResourceName( s.GetArgStr()); case RMC_REAP: // "REAP", m_ReapItem = static_cast<ITEMID_TYPE>(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, s.GetArgStr())); break; case RMC_REAPAMOUNT: m_ReapAmount.Load( s.GetArgRaw() ); break; case RMC_REGEN: // TICK_PER_SEC once found how long to regen this type. m_iRegenerateTime.Load( s.GetArgRaw() ); break; case RMC_SKILL: m_Skill.Load( s.GetArgRaw() ); break; default: return( CResourceDef::r_LoadVal( s )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
wxsItemRes::wxsItemRes(const wxString& FileName,const TiXmlElement* XrcElem,const wxString& Type): wxWidgetsRes(0,Type), m_WxsFileName(wxEmptyString), m_SrcFileName(wxEmptyString), m_HdrFileName(wxEmptyString), m_XrcFileName(FileName), m_UseForwardDeclarations(false), m_UseI18n(true) { SetResourceName(cbC2U(XrcElem->Attribute("name"))); }
void RenDevBackend::CreateRenderTargetViews() { assert(m_pSwapChain); assert(m_pDevice); //Backbuffer ComPtr<ID3D11Texture2D> pBackBufferTex; ThrowIfFail(m_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(pBackBufferTex.GetAddressOf())), L"Failed to get back buffer texture."); SetResourceName(pBackBufferTex, "BackBuffer"); ThrowIfFail(m_pDevice->CreateRenderTargetView(pBackBufferTex.Get(), nullptr, &m_pBackBufferRTV), L"Failed to create RTV for back buffer texture."); SetResourceName(m_pBackBufferRTV, "BackBufferRTV"); //Depth stencil D3D11_TEXTURE2D_DESC DepthTextureDesc; DepthTextureDesc.Width = m_SwapChainDesc.BufferDesc.Width; DepthTextureDesc.Height = m_SwapChainDesc.BufferDesc.Height; DepthTextureDesc.MipLevels = 1; DepthTextureDesc.ArraySize = 1; DepthTextureDesc.Format = DXGI_FORMAT::DXGI_FORMAT_D32_FLOAT; DepthTextureDesc.SampleDesc.Count = 1; DepthTextureDesc.SampleDesc.Quality = 0; DepthTextureDesc.Usage = D3D11_USAGE::D3D11_USAGE_DEFAULT; DepthTextureDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_DEPTH_STENCIL; DepthTextureDesc.CPUAccessFlags = 0; DepthTextureDesc.MiscFlags = 0; ComPtr<ID3D11Texture2D> pDepthTexture; ThrowIfFail(m_pDevice->CreateTexture2D(&DepthTextureDesc, nullptr, pDepthTexture.GetAddressOf()), L"Failed to create depth-stencil texture."); SetResourceName(pDepthTexture, "DepthStencil"); m_pDevice->CreateDepthStencilView(pDepthTexture.Get(), nullptr, m_pDepthStencilView.GetAddressOf()); SetResourceName(m_pDepthStencilView, "DepthStencilView"); //Set m_pDeviceContext->OMSetRenderTargets(1, m_pBackBufferRTV.GetAddressOf(), m_pDepthStencilView.Get()); }
bool CSkillClassDef::r_LoadVal( CScript &s ) { ADDTOCALLSTACK("CSkillClassDef::r_LoadVal"); EXC_TRY("LoadVal"); switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SCC_DEFNAME: return SetResourceName( s.GetArgStr()); case SCC_NAME: m_sName = s.GetArgStr(); break; case SCC_SKILLSUM: m_SkillSumMax = s.GetArgVal(); break; case SCC_STATSUM: m_StatSumMax = static_cast<WORD>(s.GetArgVal()); break; default: { int i = g_Cfg.FindSkillKey( s.GetKey()); if ( i != SKILL_NONE ) { ASSERT( i >= 0 && static_cast<size_t>(i) < COUNTOF(m_SkillLevelMax)); m_SkillLevelMax[i] = static_cast<WORD>(s.GetArgVal()); break; } i = g_Cfg.FindStatKey( s.GetKey()); if ( i >= 0 ) { ASSERT( static_cast<size_t>(i) < COUNTOF(m_StatMax)); m_StatMax[i] = static_cast<WORD>(s.GetArgVal()); break; } } return( CResourceDef::r_LoadVal( s )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
bool CRegionWorld::r_LoadVal( CScript &s ) { ADDTOCALLSTACK("CRegionWorld::r_LoadVal"); EXC_TRY("LoadVal"); // Load the values for the region from script. switch ( FindTableHeadSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case RWC_DEFNAME: // "DEFNAME" = for the speech system. return SetResourceName( s.GetArgStr()); case RWC_RESOURCES: SetModified( REGMOD_EVENTS ); return( m_Events.r_LoadVal( s, RES_REGIONTYPE )); default: break; } return(CRegionBase::r_LoadVal(s)); EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
void CResourceLink::ScanSection( RES_TYPE restype ) { ADDTOCALLSTACK("CResourceLink::ScanSection"); // Scan the section we are linking to for useful stuff. ASSERT(m_pScript); lpctstr const * ppTable = nullptr; int iQty = 0; switch (restype) { case RES_TYPEDEF: case RES_ITEMDEF: ppTable = CItem::sm_szTrigName; iQty = ITRIG_QTY; break; case RES_CHARDEF: case RES_EVENTS: case RES_SKILLCLASS: ppTable = CChar::sm_szTrigName; iQty = CTRIG_QTY; break; case RES_SKILL: ppTable = CSkillDef::sm_szTrigName; iQty = SKTRIG_QTY; break; case RES_SPELL: ppTable = CSpellDef::sm_szTrigName; iQty = SPTRIG_QTY; break; case RES_AREA: case RES_ROOM: case RES_REGIONTYPE: ppTable = CRegionWorld::sm_szTrigName; iQty = RTRIG_QTY; break; case RES_WEBPAGE: ppTable = CWebPageDef::sm_szTrigName; iQty = WTRIG_QTY; break; case RES_REGIONRESOURCE: ppTable = CRegionResourceDef::sm_szTrigName; iQty = RRTRIG_QTY; break; default: break; } ClearTriggers(); while ( m_pScript->ReadKey(false) ) { if ( m_pScript->IsKeyHead( "DEFNAME", 7 ) ) { m_pScript->ParseKeyLate(); SetResourceName( m_pScript->GetArgRaw() ); } else if ( m_pScript->IsKeyHead( "ON", 2 ) ) { int iTrigger; if ( iQty ) { m_pScript->ParseKeyLate(); iTrigger = FindTableSorted( m_pScript->GetArgRaw(), ppTable, iQty ); if ( iTrigger < 0 ) // unknown triggers ? iTrigger = XTRIG_UNKNOWN; else { TriglistAdd(m_pScript->GetArgRaw()); if ( HasTrigger(iTrigger) ) { DEBUG_ERR(( "Duplicate trigger '%s' in '%s'\n", ppTable[iTrigger], GetResourceName() )); continue; } } } else iTrigger = XTRIG_UNKNOWN; SetTrigger(iTrigger); } } }
bool CRegionBase::MakeRegionName() { ADDTOCALLSTACK("CRegionBase::MakeRegionName"); if ( m_pDefName ) return true; TCHAR ch; LPCTSTR pszKey = NULL; // auxiliary, the key of a similar CVarDef, if any found TCHAR * pbuf = Str_GetTemp(); TCHAR * pszDef = pbuf + 2; strcpy(pbuf, "a_"); LPCTSTR pszName = GetName(); GETNONWHITESPACE( pszName ); if ( !strnicmp( "the ", pszName, 4 ) ) pszName += 4; else if ( !strnicmp( "a ", pszName, 2 ) ) pszName += 2; else if ( !strnicmp( "an ", pszName, 3 ) ) pszName += 3; else if ( !strnicmp( "ye ", pszName, 3 ) ) pszName += 3; for ( ; *pszName; pszName++ ) { if ( !strnicmp( " of ", pszName, 4 ) || !strnicmp( " in ", pszName, 4 ) ) { pszName += 4; continue; } if ( !strnicmp( " the ", pszName, 5 ) ) { pszName += 5; continue; } ch = *pszName; if ( ch == ' ' || ch == '\t' || ch == '-' ) ch = '_'; else if ( !isalnum( ch ) ) continue; // collapse multiple spaces together if ( ch == '_' && *(pszDef-1) == '_' ) continue; *pszDef = static_cast<TCHAR>(tolower(ch)); pszDef++; } *pszDef = '_'; *(++pszDef) = '\0'; size_t iMax = g_Cfg.m_RegionDefs.GetCount(); int iVar = 1; size_t iLen = strlen( pbuf ); for ( size_t i = 0; i < iMax; i++ ) { CRegionBase * pRegion = dynamic_cast <CRegionBase*> (g_Cfg.m_RegionDefs.GetAt(i)); if ( !pRegion ) continue; pszKey = pRegion->GetResourceName(); if ( !pszKey ) continue; // Is this a similar key? if ( strnicmp( pbuf, pszKey, iLen ) != 0 ) continue; // skip underscores pszKey = pszKey + iLen; while ( *pszKey == '_' ) pszKey++; // Is this is subsequent key with a number? Get the highest (plus one) if ( IsStrNumericDec( pszKey ) ) { int iVarThis = ATOI( pszKey ); if ( iVarThis >= iVar ) iVar = iVarThis + 1; } else iVar++; } // Only one, no need for the extra "_" sprintf( pszDef, "%i", iVar ); SetResourceName( pbuf ); // Assign name return true; }
bool CResourceDef::MakeResourceName() { ADDTOCALLSTACK("CResourceDef::MakeResourceName"); if ( m_pDefName ) return true; LPCTSTR pszName = GetName(); GETNONWHITESPACE( pszName ); TCHAR * pbuf = Str_GetTemp(); TCHAR ch; TCHAR * pszDef; strcpy(pbuf, "a_"); LPCTSTR pszKey = NULL; // auxiliary, the key of a similar CVarDef, if any found pszDef = pbuf + 2; for ( ; *pszName; pszName++ ) { ch = *pszName; if ( ch == ' ' || ch == '\t' || ch == '-' ) ch = '_'; else if ( !isalnum( ch ) ) continue; // collapse multiple spaces together if ( ch == '_' && *(pszDef-1) == '_' ) continue; *pszDef = ch; pszDef++; } *pszDef = '_'; *(++pszDef) = '\0'; size_t iMax = g_Exp.m_VarDefs.GetCount(); int iVar = 1; size_t iLen = strlen( pbuf ); for ( size_t i = 0; i < iMax; i++ ) { // Is this a similar key? pszKey = g_Exp.m_VarDefs.GetAt(i)->GetKey(); if ( strnicmp( pbuf, pszKey, iLen ) != 0 ) continue; // skip underscores pszKey = pszKey + iLen; while ( *pszKey == '_' ) pszKey++; // Is this is subsequent key with a number? Get the highest (plus one) if ( IsStrNumericDec( pszKey ) ) { int iVarThis = ATOI( pszKey ); if ( iVarThis >= iVar ) iVar = iVarThis + 1; } else iVar++; } // add an extra _, hopefully won't conflict with named areas sprintf( pszDef, "_%i", iVar ); SetResourceName( pbuf ); // Assign name return true; }
bool CBaseBaseDef::r_LoadVal( CScript & s ) { ADDTOCALLSTACK("CBaseBaseDef::r_LoadVal"); EXC_TRY("LoadVal"); if ( s.IsKeyHead( "TAG.", 4 )) { bool fQuoted = false; m_TagDefs.SetStr( s.GetKey()+4, fQuoted, s.GetArgStr( &fQuoted ), false ); return( true ); } if ( s.IsKeyHead( "TAG0.", 5 )) { bool fQuoted = false; m_TagDefs.SetStr( s.GetKey()+5, fQuoted, s.GetArgStr( &fQuoted ), true ); return( true ); } switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { //Set as Strings case OBC_HITSPELL: case OBC_SLAYER: case OBC_SLAYERLESSER: case OBC_SLAYERMISC: case OBC_SLAYERSUPER: case OBC_ABILITYPRIMARY: case OBC_ABILITYSECONDARY: case OBC_MANABURST: { bool fQuoted = false; SetDefStr(s.GetKey(), s.GetArgStr( &fQuoted ), fQuoted); } break; //Set as number only case OBC_BALANCED: case OBC_BANE: case OBC_BATTLELUST: case OBC_BLOODDRINKER: case OBC_CASTINGFOCUS: case OBC_DAMCHAOS: case OBC_DAMCOLD: case OBC_DAMDIRECT: case OBC_DAMENERGY: case OBC_DAMFIRE: case OBC_DAMMODIFIER: case OBC_DAMPHYSICAL: case OBC_DECREASEHITCHANCE: case OBC_DAMPOISON: case OBC_EATERCOLD: case OBC_EATERDAM: case OBC_EATERENERGY: case OBC_EATERFIRE: case OBC_EATERKINETIC: case OBC_EATERPOISON: case OBC_ENHANCEPOTIONS: case OBC_EXPANSION: case OBC_FASTERCASTING: case OBC_FASTERCASTRECOVERY: case OBC_HITAREACOLD: case OBC_HITAREAENERGY: case OBC_HITAREAFIRE: case OBC_HITAREAPHYSICAL: case OBC_HITAREAPOISON: case OBC_HITCURSE: case OBC_HITDISPEL: case OBC_HITFATIGUE: case OBC_HITFIREBALL: case OBC_HITHARM: case OBC_HITLEECHLIFE: case OBC_HITLEECHMANA: case OBC_HITLEECHSTAM: case OBC_HITLIGHTNING: case OBC_HITLOWERATK: case OBC_HITLOWERDEF: case OBC_HITMAGICARROW: case OBC_HITMANADRAIN: case OBC_INCREASEDAM: case OBC_INCREASEDEFCHANCE: case OBC_INCREASEDEFCHANCEMAX: case OBC_INCREASEHITCHANCE: case OBC_INCREASEGOLD: case OBC_INCREASEKARMALOSS: case OBC_INCREASESPELLDAM: case OBC_INCREASESWINGSPEED: case OBC_LOWERAMMOCOST: case OBC_LOWERMANACOST: case OBC_LOWERREAGENTCOST: case OBC_LOWERREQ: case OBC_LUCK: case OBC_MANABURSTFREQUENCY: case OBC_MANABURSTKARMA: case OBC_NIGHTSIGHT: case OBC_RAGEFOCUS: case OBC_REACTIVEPARALYZE: case OBC_REFLECTPHYSICALDAM: case OBC_REGENFOOD: case OBC_REGENHITS: case OBC_REGENMANA: case OBC_REGENSTAM: case OBC_REGENVALFOOD: case OBC_REGENVALHITS: case OBC_REGENVALMANA: case OBC_REGENVALSTAM: case OBC_RESCOLD: case OBC_RESFIRE: case OBC_RESENERGY: case OBC_RESPHYSICAL: case OBC_RESPOISON: case OBC_RESCOLDMAX: case OBC_RESFIREMAX: case OBC_RESENERGYMAX: case OBC_RESPHYSICALMAX: case OBC_RESPOISONMAX: case OBC_RESONANCECOLD: case OBC_RESONANCEENERGY: case OBC_RESONANCEFIRE: case OBC_RESONANCEKINETIC: case OBC_RESONANCEPOISON: case OBC_SOULCHARGE: case OBC_SOULCHARGECOLD: case OBC_SOULCHARGEENERGY: case OBC_SOULCHARGEFIRE: case OBC_SOULCHARGEKINETIC: case OBC_SOULCHARGEPOISON: case OBC_SPELLCONSUMPTION: case OBC_SPELLFOCUSING: case OBC_SPLINTERINGWEAPON: case OBC_VELOCITY: case OBC_SPELLCHANNELING: case OBC_NAMELOC: case OBC_HITSPELLSTR: case OBC_WEIGHTREDUCTION: case OBC_COMBATBONUSSTAT: case OBC_COMBATBONUSPERCENT: { SetDefNum(s.GetKey(),s.GetArgVal()); return true; } case OBC_CATEGORY://* case OBC_SUBSECTION://* case OBC_DESCRIPTION://* { bool fQuoted = false; SetDefStr(s.GetKey(), s.GetArgStr( &fQuoted ), fQuoted); if ( !strcmpi(GetDefStr(sm_szLoadKeys[OBC_DESCRIPTION]), "@") ) SetDefStr(sm_szLoadKeys[OBC_DESCRIPTION], GetDefStr(sm_szLoadKeys[OBC_SUBSECTION])); } return true; case OBC_ARMOR: { INT64 piVal[2]; size_t iQty = Str_ParseCmds( s.GetArgStr(), piVal, COUNTOF(piVal)); m_defenseBase = static_cast<unsigned char>(piVal[0]); if ( iQty > 1 ) { m_defenseRange = static_cast<unsigned char>(piVal[1]) - m_defenseBase; } else { m_defenseRange = 0; } } return( true ); case OBC_DAM: { INT64 piVal[2]; size_t iQty = Str_ParseCmds( s.GetArgStr(), piVal, COUNTOF(piVal)); m_attackBase = static_cast<unsigned char>(piVal[0]); if ( iQty > 1 ) { m_attackRange = static_cast<unsigned char>(piVal[1]) - m_attackBase; } else { m_attackRange = 0; } } return( true ); case OBC_BASEID: return( false ); case OBC_CAN: m_Can = s.GetArgVal();// | ( m_Can & ( CAN_C_INDOORS|CAN_C_EQUIP|CAN_C_USEHANDS|CAN_C_NONHUMANOID )); //Fixed #2326 ? return( true ); case OBC_DEFNAME: case OBC_DEFNAME2: return SetResourceName( s.GetArgStr()); case OBC_HEIGHT: m_Height = static_cast<height_t>(s.GetArgVal()); return( true ); case OBC_INSTANCES: return( false ); case OBC_NAME: SetTypeName( s.GetArgStr()); return( true ); case OBC_RANGE: { INT64 piVal[2]; size_t iQty = Str_ParseCmds( s.GetArgStr(), piVal, COUNTOF(piVal)); if ( iQty > 1 ) { INT64 iRange = ((piVal[0] & 0xff) << 8) & 0xff00; iRange |= (piVal[1] & 0xff); SetDefNum(s.GetKey(),iRange, false); //m_range = ((piVal[0] & 0xff) << 8) & 0xff00; //m_range |= (piVal[1] & 0xff); } else { SetDefNum(s.GetKey(),piVal[0], false); //m_range = static_cast<WORD>(piVal[0]); } } return( true ); case OBC_RESOURCES: m_BaseResources.Load( s.GetArgStr()); return( true ); case OBC_RESLEVEL: return( SetResLevel(static_cast<unsigned char>(s.GetArgVal())) ); case OBC_RESDISPDNHUE: SetResDispDnHue(static_cast<HUE_TYPE>(s.GetArgVal())); return( true ); case OBC_TEVENTS: return( m_TEvents.r_LoadVal( s, RES_EVENTS )); } return( CScriptObj::r_LoadVal(s)); EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
bool CSpellDef::r_LoadVal( CScript &s ) { ADDTOCALLSTACK("CSpellDef::r_LoadVal"); EXC_TRY("LoadVal"); // RES_SPELL switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 )) { case SPC_CAST_TIME: m_CastTime.Load( s.GetArgRaw()); break; case SPC_DEFNAME: return SetResourceName( s.GetArgStr()); case SPC_DURATION: m_Duration.Load( s.GetArgRaw()); break; case SPC_EFFECT: m_Effect.Load( s.GetArgRaw()); break; case SPC_EFFECT_ID: m_idEffect = (ITEMID_TYPE)(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, s.GetArgStr())); break; case SPC_FLAGS: m_dwFlags = s.GetArgVal(); break; case SPC_GROUP: m_dwGroup = s.GetArgVal(); break; case SPC_INTERRUPT: m_Interrupt.Load( s.GetArgRaw()); break; case SPC_LAYER: m_idLayer = (LAYER_TYPE)(s.GetArgVal()); break; case SPC_MANAUSE: m_wManaUse = (word)(s.GetArgVal()); break; case SPC_NAME: m_sName = s.GetArgStr(); break; case SPC_PROMPT_MSG: m_sTargetPrompt = s.GetArgStr(); break; case SPC_RESOURCES: m_Reags.Load( s.GetArgStr()); break; case SPC_RUNE_ITEM: m_idSpell = (ITEMID_TYPE)(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, s.GetArgStr())); break; case SPC_RUNES: // This may only be basic chars ! m_sRunes = s.GetArgStr(); break; case SPC_SCROLL_ITEM: m_idScroll = (ITEMID_TYPE)(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, s.GetArgStr())); break; case SPC_SKILLREQ: m_SkillReq.Load( s.GetArgStr()); break; case SPC_SOUND: m_sound = (SOUND_TYPE)(s.GetArgVal()); break; case SPC_TITHINGUSE: m_wTithingUse = (word)(s.GetArgVal()); break; default: return( CResourceDef::r_LoadVal( s ) ); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
bool CBaseBaseDef::r_LoadVal(CScript &s) { ADDTOCALLSTACK("CBaseBaseDef::r_LoadVal"); EXC_TRY("LoadVal"); if ( s.IsKeyHead("TAG.", 4) ) { bool fQuoted = false; m_TagDefs.SetStr(s.GetKey() + 4, fQuoted, s.GetArgStr(&fQuoted), false); return true; } if ( s.IsKeyHead("TAG0.", 5) ) { bool fQuoted = false; m_TagDefs.SetStr(s.GetKey() + 5, fQuoted, s.GetArgStr(&fQuoted), true); return true; } switch ( FindTableSorted(s.GetKey(), sm_szLoadKeys, COUNTOF(sm_szLoadKeys) - 1) ) { // Set as numeric case OBC_COMBATBONUSPERCENT: case OBC_COMBATBONUSSTAT: case OBC_DAMCHAOS: case OBC_DAMDIRECT: case OBC_EXPANSION: case OBC_NAMELOC: case OBC_REGENFOOD: case OBC_REGENHITS: case OBC_REGENMANA: case OBC_REGENSTAM: case OBC_REGENVALFOOD: case OBC_REGENVALHITS: case OBC_REGENVALMANA: case OBC_REGENVALSTAM: { SetDefNum(s.GetKey(), s.GetArgVal()); return true; } case OBC_CATEGORY: case OBC_SUBSECTION: case OBC_DESCRIPTION: { bool fQuoted = false; SetDefStr(s.GetKey(), s.GetArgStr(&fQuoted), fQuoted); if ( !strcmpi(GetDefStr(sm_szLoadKeys[OBC_DESCRIPTION]), "@") ) SetDefStr(sm_szLoadKeys[OBC_DESCRIPTION], GetDefStr(sm_szLoadKeys[OBC_SUBSECTION])); return true; } case OBC_ARMOR: { INT64 piVal[2]; size_t iQty = Str_ParseCmds(s.GetArgStr(), piVal, COUNTOF(piVal)); m_defenseBase = static_cast<WORD>(piVal[0]); if ( iQty > 1 ) m_defenseRange = static_cast<WORD>(piVal[1]) - m_defenseBase; else m_defenseRange = 0; return true; } case OBC_BASEID: return false; case OBC_CAN: m_Can = s.GetArgVal(); //| (m_Can & (CAN_C_INDOORS|CAN_C_EQUIP|CAN_C_USEHANDS|CAN_C_NONHUMANOID)); //fixed #2326? return true; case OBC_DAM: { INT64 piVal[2]; size_t iQty = Str_ParseCmds(s.GetArgStr(), piVal, COUNTOF(piVal)); m_attackBase = static_cast<WORD>(piVal[0]); if ( iQty > 1 ) m_attackRange = static_cast<WORD>(piVal[1]) - m_attackBase; else m_attackRange = 0; return true; } case OBC_DAMCOLD: m_DamCold = static_cast<int>(s.GetArgVal()); return true; case OBC_DAMENERGY: m_DamEnergy = static_cast<int>(s.GetArgVal()); return true; case OBC_DAMFIRE: m_DamFire = static_cast<int>(s.GetArgVal()); return true; case OBC_DAMPHYSICAL: m_DamPhysical = static_cast<int>(s.GetArgVal()); return true; case OBC_DAMPOISON: m_DamPoison = static_cast<int>(s.GetArgVal()); return true; case OBC_DEFNAME: case OBC_DEFNAME2: return SetResourceName(s.GetArgStr()); case OBC_ENHANCEPOTIONS: m_EnhancePotions = static_cast<int>(s.GetArgVal()); return true; case OBC_FASTERCASTING: m_FasterCasting = static_cast<int>(s.GetArgVal()); return true; case OBC_FASTERCASTRECOVERY: m_FasterCastRecovery = static_cast<int>(s.GetArgVal()); return true; case OBC_HEIGHT: m_Height = static_cast<height_t>(s.GetArgVal()); return true; case OBC_HITLEECHLIFE: m_HitLifeLeech = static_cast<int>(s.GetArgVal()); break; case OBC_HITLEECHMANA: m_HitManaLeech = static_cast<int>(s.GetArgVal()); break; case OBC_HITLEECHSTAM: m_HitStaminaLeech = static_cast<int>(s.GetArgVal()); break; case OBC_HITMANADRAIN: m_HitManaDrain = static_cast<int>(s.GetArgVal()); break; case OBC_INCREASEDAM: m_DamIncrease = static_cast<int>(s.GetArgVal()); return true; case OBC_INCREASEDEFCHANCE: m_DefChanceIncrease = static_cast<int>(s.GetArgVal()); return true; case OBC_INCREASEDEFCHANCEMAX: m_DefChanceIncreaseMax = static_cast<int>(s.GetArgVal()); return true; case OBC_INCREASEHITCHANCE: m_HitChanceIncrease = static_cast<int>(s.GetArgVal()); return true; case OBC_INCREASESPELLDAM: m_SpellDamIncrease = static_cast<int>(s.GetArgVal()); return true; case OBC_INCREASESWINGSPEED: m_SwingSpeedIncrease = static_cast<int>(s.GetArgVal()); return true; case OBC_INSTANCES: return false; case OBC_LOWERMANACOST: m_LowerManaCost = static_cast<int>(s.GetArgVal()); return true; case OBC_LOWERREAGENTCOST: m_LowerReagentCost = static_cast<int>(s.GetArgVal()); return true; case OBC_LUCK: m_Luck = static_cast<int>(s.GetArgVal()); return true; case OBC_NAME: SetTypeName(s.GetArgStr()); return true; case OBC_NIGHTSIGHT: m_NightSight = static_cast<int>(s.GetArgVal()); return true; case OBC_REFLECTPHYSICALDAM: m_ReflectPhysicalDamage = static_cast<int>(s.GetArgVal()); return true; case OBC_RANGE: { INT64 piVal[2]; size_t iQty = Str_ParseCmds(s.GetArgStr(), piVal, COUNTOF(piVal)); if ( iQty > 1 ) { INT64 iRange = ((piVal[0] & 0xFF) << 8) & 0xFF00; iRange |= (piVal[1] & 0xFF); SetDefNum(s.GetKey(), iRange, false); //m_range = ((piVal[0] & 0xFF) << 8) & 0xFF00; //m_range |= (piVal[1] & 0xFF); } else { SetDefNum(s.GetKey(), piVal[0], false); //m_range = static_cast<WORD>(piVal[0]); } return true; } case OBC_RESCOLD: m_ResCold = static_cast<int>(s.GetArgVal()); return true; case OBC_RESCOLDMAX: m_ResColdMax = static_cast<int>(s.GetArgVal()); return true; case OBC_RESDISPDNHUE: SetResDispDnHue(static_cast<HUE_TYPE>(s.GetArgVal())); return true; case OBC_RESENERGY: m_ResEnergy = static_cast<int>(s.GetArgVal()); return true; case OBC_RESENERGYMAX: m_ResEnergyMax = static_cast<int>(s.GetArgVal()); return true; case OBC_RESFIRE: m_ResFire = static_cast<int>(s.GetArgVal()); return true; case OBC_RESFIREMAX: m_ResFireMax = static_cast<int>(s.GetArgVal()); return true; case OBC_RESLEVEL: return SetResLevel(minimum(maximum(s.GetArgVal(), RDS_NONE), RDS_QTY - 1)); case OBC_RESOURCES: m_BaseResources.Load(s.GetArgStr()); return true; case OBC_RESPHYSICAL: m_ResPhysical = static_cast<int>(s.GetArgVal()); return true; case OBC_RESPHYSICALMAX: m_ResPhysicalMax = static_cast<int>(s.GetArgVal()); return true; case OBC_RESPOISON: m_ResPoison = static_cast<int>(s.GetArgVal()); return true; case OBC_RESPOISONMAX: m_ResPoisonMax = static_cast<int>(s.GetArgVal()); return true; case OBC_TEVENTS: return m_TEvents.r_LoadVal(s, RES_EVENTS); } return CScriptObj::r_LoadVal(s); EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
bool wxsItemRes::CreateNewResource(NewResourceParams& Params) { wxFileName HFN(GetProjectPath()+Params.Hdr); SetLanguage(wxsCodeMarks::IdFromExt(HFN.GetExt())); switch ( GetLanguage() ) { case wxsCPP: { SetResourceName(Params.Class); // Building arguments for constructor wxString CallArgs; wxString CtorArgs; wxString CtorArgsD; if ( Params.CtorParent ) { CallArgs << _T("parent"); CtorArgs << _T("wxWindow* parent"); CtorArgsD << _T("wxWindow* parent"); if ( Params.CtorParentDef ) { CtorArgsD << _T("=0"); } } if ( Params.CtorId ) { if ( !CtorArgs.IsEmpty() ) { CallArgs << _T(","); CtorArgs << _T(","); CtorArgsD << _T(","); } CallArgs << _T("id"); CtorArgs << _T("wxWindowID id"); CtorArgsD << _T("wxWindowID id"); if ( Params.CtorIdDef ) { CtorArgsD << _T("=wxID_ANY"); } } if ( Params.CtorPos ) { if ( !CtorArgs.IsEmpty() ) { CallArgs << _T(","); CtorArgs << _T(","); CtorArgsD << _T(","); } CallArgs << _T("pos"); CtorArgs << _T("const wxPoint& pos"); CtorArgsD << _T("const wxPoint& pos"); if ( Params.CtorPosDef ) { CtorArgsD << _T("=wxDefaultPosition"); } } if ( Params.CtorSize ) { if ( !CtorArgs.IsEmpty() ) { CallArgs << _T(","); CtorArgs << _T(","); CtorArgsD << _T(","); } CallArgs << _T("size"); CtorArgs << _T("const wxSize& size"); CtorArgsD << _T("const wxSize& size"); if ( Params.CtorSizeDef ) { CtorArgsD << _T("=wxDefaultSize"); } } wxString CtorArgsF = CtorArgs; if ( !Params.CustomCtorArgs.IsEmpty() ) { if ( !CtorArgs.IsEmpty() ) { CtorArgs << _T(","); CtorArgsD << _T(","); } CtorArgs << Params.CustomCtorArgs; CtorArgsD << Params.CustomCtorArgs; } // Generating code m_HdrFileName = Params.Hdr; if ( Params.GenHdr ) { wxString Name = GetProjectPath()+Params.Hdr; wxFileName::Mkdir(wxFileName(Name).GetPath(),0777,wxPATH_MKDIR_FULL); wxFile File(Name,wxFile::write); wxString Guard = HFN.GetName().Upper() + _T("_H"); wxString Header = CppEmptyHeader; wxString InitFuncDecl; wxString HeadersPch; if ( Params.UseInitFunc ) { InitFuncDecl << _T("\tprotected:\n\n") _T("\t\tvoid ") << Params.InitFunc << _T("(") << CtorArgsF << _T(");\n\n"); } if ( Params.UsePch && !Params.PchGuard.IsEmpty() ) { HeadersPch << _T("#ifndef ") + Params.PchGuard + _T("\n") _T("\t") + wxsCodeMarks::Beg(wxsCPP,_T("HeadersPCH"),Params.Class) + _T("\n") _T("\t") + wxsCodeMarks::End(wxsCPP) + _T("\n") _T("#endif\n"); } Header.Replace(_T("$(CtorArgs)"),CtorArgsD); Header.Replace(_T("$(Guard)"),Guard); Header.Replace(_T("$(ClassName)"),Params.Class); Header.Replace(_T("$(BaseClassName)"),Params.BaseClass); Header.Replace(_T("$(InitFuncDecl)"),InitFuncDecl); Header.Replace(_T("$(HeadersPch)"),HeadersPch); wxString Scope = _T(""); switch ( Params.ScopeMembers ) { case NewResourceParams::Private: Scope = _T("\tprivate:\n\n"); break; case NewResourceParams::Protected: Scope = _T("\tprotected:\n\n"); break; default:; } Header.Replace(_T("$(MembersScope)"),Scope); Scope = _T(""); if ( Params.ScopeIds != Params.ScopeMembers ) { switch ( Params.ScopeIds ) { case NewResourceParams::Public: Scope = _T("\tpublic:\n\n"); break; case NewResourceParams::Private: Scope = _T("\tprivate:\n\n"); break; case NewResourceParams::Protected: Scope = _T("\tprotected:\n\n"); break; } } Header.Replace(_T("$(IdsScope)"),Scope); Scope = _T(""); if ( Params.ScopeHandlers != Params.ScopeIds ) { switch ( Params.ScopeHandlers ) { case NewResourceParams::Public: Scope = _T("\tpublic:\n\n"); break; case NewResourceParams::Private: Scope = _T("\tprivate:\n\n"); break; case NewResourceParams::Protected: Scope = _T("\tprotected:\n\n"); break; } } Header.Replace(_T("$(HandlersScope)"),Scope); // TODO: Use wxsCoder to save file's content, so it will // have proper encoding and EOL stuff if ( !File.Write(Header) ) return false; } m_SrcFileName = Params.Src; if ( Params.GenSrc ) { wxString Name = GetProjectPath()+Params.Src; wxFileName::Mkdir(wxFileName(Name).GetPath(),0777,wxPATH_MKDIR_FULL); wxFile File(Name,wxFile::write); HFN.MakeRelativeTo(wxFileName(Name).GetPath()); wxString Include = HFN.GetFullPath(wxPATH_UNIX); wxString PchCode; if ( Params.UsePch ) { wxFileName PCH(GetProjectPath()+Params.Pch); PCH.MakeRelativeTo(wxFileName(Name).GetPath()); PchCode << _T("#include \"") << PCH.GetFullPath(wxPATH_UNIX) << _T("\"\n"); } wxString CtorInitCode; if ( Params.UseInitFunc ) { CtorInitCode << _T("\t") << Params.InitFunc << _T("(") << CallArgs << _T(");\n"); CtorInitCode << _T("}\n\n"); CtorInitCode << _T("void ") << Params.Class << _T("::") << Params.InitFunc << _T("(") << CtorArgsF << _T(")\n"); CtorInitCode << _T("{\n"); } wxString IntHeadersPch; if ( Params.UsePch && !Params.PchGuard.IsEmpty() ) { IntHeadersPch << _T("#ifndef ") + Params.PchGuard + _T("\n") _T("\t") + wxsCodeMarks::Beg(wxsCPP,_T("InternalHeadersPCH"),Params.Class) + _T("\n") _T("\t") + wxsCodeMarks::End(wxsCPP) + _T("\n") _T("#endif\n"); } wxString Source = CppEmptySource; Source.Replace(_T("$(PchCode)"),PchCode); Source.Replace(_T("$(CtorArgs)"),CtorArgs); Source.Replace(_T("$(Include)"),Include); Source.Replace(_T("$(ClassName)"),Params.Class); Source.Replace(_T("$(BaseClassName)"),Params.BaseClass); Source.Replace(_T("$(CtorInit)"),CtorInitCode); Source.Replace(_T("$(InternalHeadersPch)"),IntHeadersPch); // TODO: Use wxsCoder to save file's content, so it will // have proper encoding and EOL stuff if ( !File.Write(Source) ) return false; } m_XrcFileName = Params.Xrc; if ( !Params.Xrc.IsEmpty() && Params.GenXrc ) { wxString Name = GetProjectPath()+Params.Xrc; wxFileName::Mkdir(wxFileName(Name).GetPath(),0777,wxPATH_MKDIR_FULL); wxFile File(Name,wxFile::write); if ( !File.Write(EmptyXrc) ) return false; } if ( Params.Wxs.IsEmpty() ) { // Searching for new wxs file name // TODO: Do not use constant folder name wxString WxsNameBase = _T("wxsmith"); wxString WxsName; if ( !wxFileName::DirExists(GetProjectPath()+WxsNameBase) ) { if ( !wxFileName::Mkdir(GetProjectPath()+WxsNameBase,0777,wxPATH_MKDIR_FULL) ) { return false; } } WxsNameBase += _T("/") + Params.Class; WxsName = WxsNameBase + _T(".wxs"); int Cnt = 0; for(;;) { if ( !wxFileName::FileExists(GetProjectPath()+WxsName) && !wxFileName::DirExists(GetProjectPath()+WxsName) ) { break; } Cnt++; WxsName = wxString::Format(_T("%s%d.wxs"),WxsNameBase.wx_str(),Cnt); } m_WxsFileName = WxsName; Params.Wxs = WxsName; { wxString Name = GetProjectPath()+m_WxsFileName; wxFile File(Name,wxFile::write); wxString Content = EmptyWxs; Content.Replace(_T("$(ClassName)"),Params.Class); Content.Replace(_T("$(BaseClassName)"),GetResourceType()); if ( !File.Write(Content) ) { return false; } } } else { m_WxsFileName = Params.Wxs; } m_UseForwardDeclarations = Params.UseFwdDecl; m_UseI18n = Params.UseI18n; return true; } default:; } SetLanguage(wxsUnknownLanguage); return false; }
bool CRandGroupDef::r_LoadVal( CScript &s ) { ADDTOCALLSTACK("CRandGroupDef::r_LoadVal"); EXC_TRY("LoadVal"); // RES_SPAWN or RES_REGIONTYPE switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case RGC_CATEGORY: m_sCategory = s.GetArgStr(); break; case RGC_SUBSECTION: m_sSubsection = s.GetArgStr(); break; case RGC_DESCRIPTION: { m_sDescription = s.GetArgStr(); if ( !strcmpi(m_sDescription, "@") ) m_sDescription = m_sSubsection; } break; case RGC_DEFNAME: // "DEFNAME" return SetResourceName( s.GetArgStr()); case RGC_ID: // "ID" case RGC_CONTAINER: { TCHAR *ppCmd[2]; size_t iArgs = Str_ParseCmds(s.GetArgStr(), ppCmd, COUNTOF(ppCmd)); CResourceQty rec; rec.SetResourceID( g_Cfg.ResourceGetID(RES_CHARDEF, const_cast<LPCTSTR &>(reinterpret_cast<LPTSTR &>(ppCmd[0]))), ( iArgs > 1 && ppCmd[1][0] ) ? Exp_GetVal(ppCmd[1]) : 1 ); m_iTotalWeight += static_cast<int>(rec.GetResQty()); m_Members.Add(rec); } break; case RGC_RESOURCES: m_Members.Load(s.GetArgStr()); CalcTotalWeight(); break; case RGC_WEIGHT: // Modify the weight of the last item. if ( m_Members.GetCount() > 0 ) { int iWeight = s.GetArgVal(); m_Members[m_Members.GetCount() - 1].SetResQty(iWeight); CalcTotalWeight(); } break; //default: //Ignore the rest //return( CResourceDef::r_LoadVal( s )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
bool CSkillDef::r_LoadVal( CScript &s ) { ADDTOCALLSTACK("CSkillDef::r_LoadVal"); EXC_TRY("LoadVal"); switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SKC_ADV_RATE: // ADV_RATE=Chance at 100, Chance at 50, chance at 0 m_AdvRate.Load( s.GetArgStr()); break; case SKC_BONUS_DEX: // "BONUS_DEX" m_StatBonus[STAT_DEX] = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_BONUS_INT: // "BONUS_INT" m_StatBonus[STAT_INT] = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_BONUS_STR: // "BONUS_STR" m_StatBonus[STAT_STR] = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_DEFNAME: // "DEFNAME" return SetResourceName( s.GetArgStr()); case SKC_DELAY: m_Delay.Load( s.GetArgStr()); break; case SKC_FLAGS: m_dwFlags = s.GetArgVal(); break; case SKC_GROUP: m_dwGroup = s.GetArgVal(); break; case SKC_EFFECT: m_Effect.Load( s.GetArgStr()); break; case SKC_KEY: // "KEY" m_sKey = s.GetArgStr(); return SetResourceName( m_sKey ); case SKC_NAME: // "KEY" m_sName = s.GetArgStr(); break; case SKC_PROMPT_MSG: // "PROMPT_MSG" m_sTargetPrompt = s.GetArgStr(); break; case SKC_RANGE: m_Range = s.GetArgVal(); break; case SKC_BONUS_STATS: // "BONUS_STATS" m_StatPercent = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_STAT_DEX: // "STAT_DEX" m_Stat[STAT_DEX] = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_STAT_INT: // "STAT_INT" m_Stat[STAT_INT] = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_STAT_STR: // "STAT_STR" m_Stat[STAT_STR] = static_cast<unsigned char>(s.GetArgVal()); break; case SKC_TITLE: // "TITLE" m_sTitle = s.GetArgStr(); break; case SKC_VALUES: // VALUES = 100,50,0 price levels. m_Values.Load( s.GetArgStr() ); break; case SKC_GAINRADIUS: // "GAINRADIUS" m_GainRadius = s.GetArgVal(); break; default: return( CResourceDef::r_LoadVal( s )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }