From 31804fd0989992f62f2434573d00d41302f50552 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 3 Dec 2022 22:56:40 +0800 Subject: [PATCH 01/24] Updated a couple of JS methods, fixed issue with HirelingCombatTraining setting,minor cleanup Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax: int ResourceCount( realId, colour ) int ResourceCount( realId, colour, moreVal ) int ResourceCount( realId, colour, moreVal, sectionId ) int UseResource( amount, realItemId ) int UseResource( amount, realItemId, colour ) int UseResource( amount, realItemId, colour, moreVal ) int UseResource( amount, realItemId, colour, moreVal, sectionId ) Fixed an issue where the bit flag for the HirelingCombatTraining setting was not set properly Fixed an issue in SpiderMonkey VS project that prevented compiling a x64 debug build (thanks, punt!) Some minor cleanup --- source/CPacketSend.cpp | 13 ++- source/Changelog.txt | 23 +++++ source/UOXJSMethods.cpp | 54 ++++++---- source/UOXJSPropertySpecs.h | 110 ++++++++++---------- source/cBaseObject.h | 200 ++++++++++++++++++------------------ source/cChar.h | 76 +++++++------- source/cItem.h | 50 ++++----- source/cMultiObj.h | 2 +- source/cRaces.h | 14 +-- source/cServerData.cpp | 4 +- source/cSocket.h | 14 +-- source/funcdecl.h | 6 +- source/magic.cpp | 2 + source/quantityfuncs.cpp | 26 +++-- spidermonkey/js32.vcxproj | 5 + 15 files changed, 328 insertions(+), 271 deletions(-) diff --git a/source/CPacketSend.cpp b/source/CPacketSend.cpp index 3efb77e3c..2fad42aef 100644 --- a/source/CPacketSend.cpp +++ b/source/CPacketSend.cpp @@ -2986,15 +2986,20 @@ CPDyeVat &CPDyeVat::operator = ( CBaseObject &target ) //| Purpose - Handles outgoing packet to bring up house/boat placement preview //o------------------------------------------------------------------------------------------------o //| Notes - Packet: 0x99 (Bring Up House/Boat Placement View) -//| Size: 26 bytes +//| Size: 26/30 bytes //| //| Packet Build //| BYTE cmd //| BYTE request (0x01 from server, 0x00 from client) -//| BYTE[4] ID of deed -//| BYTE[12] unknown (all 0) +//| BYTE[4] SERIAL of deed +//| BYTE cursorFlags (0?) +//| BYTE[11] unknown (all 0) //| BYTE[2] multi model (item model - 0x4000) -//| BYTE[6] unknown (all 0) +//| BYTE[2] xOffset +//| BYTE[2] yOffset +//| BYTE[2] zOffset +//| clientVer > 7.0.9.0, 30 byte size packet +//| BYTE[4] Hue //o------------------------------------------------------------------------------------------------o void CPMultiPlacementView::InternalReset( void ) { diff --git a/source/Changelog.txt b/source/Changelog.txt index 167d0b153..e428b5606 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,26 @@ +03/12/2022 - Xuri + Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax: + int ResourceCount( realId, colour ) + int ResourceCount( realId, colour, moreVal ) + int ResourceCount( realId, colour, moreVal, sectionId ) + int UseResource( amount, realItemId ) + int UseResource( amount, realItemId, colour ) + int UseResource( amount, realItemId, colour, moreVal ) + int UseResource( amount, realItemId, colour, moreVal, sectionId ) + Fixed an issue where the bit flag for the HirelingCombatTraining setting was not set properly + Fixed an issue in SpiderMonkey VS project that prevented compiling a x64 debug build (thanks, punt!) + Some minor cleanup + +03/12/2022 - Dragon Slayer + GM and Counselors can now go though the wind teleporter + +03/12/2022 - ldilley + Comment line in jsconfig.mk that attempts to cat a non-existent Version file. This causes an error otherwise during the SpiderMonkey build. + Initialize totalPlayerGold in vendor.cpp. + Flag unused variable in gumps.cpp. + Update README.md to include references to FreeBSD and also alter the command (libtool instead of ar) used to generate the JavaScript library on macOS. + Improve automake.sh. + 29/11/2022 - Xuri Added some validation checks for attacker object in onDamage JS event in several scripts Enabled onSellToVendor, onSoldToVendor, onBuyFromVendor and onBoughtFromVendor JS events to also run if attached to NPCs diff --git a/source/UOXJSMethods.cpp b/source/UOXJSMethods.cpp index 84392e727..cd63b7224 100644 --- a/source/UOXJSMethods.cpp +++ b/source/UOXJSMethods.cpp @@ -3580,8 +3580,9 @@ JSBool CGuild_AcceptRecruit( JSContext *cx, JSObject *obj, uintN argc, jsval *ar //o------------------------------------------------------------------------------------------------o //| Function - CChar_ResourceCount() -//| Prototype - int ResourceCount( realitemid, colour ) -//| int ResourceCount( realitemid, colour, moreVal ) +//| Prototype - int ResourceCount( realId, colour ) +//| int ResourceCount( realId, colour, moreVal ) +//| int ResourceCount( realId, colour, moreVal, sectionId ) //o------------------------------------------------------------------------------------------------o //| Purpose - Returns the amount of the items of given ID, colour and moreVal character has in packs //o------------------------------------------------------------------------------------------------o @@ -3597,11 +3598,12 @@ JSBool CChar_ResourceCount( JSContext *cx, JSObject *obj, uintN argc, jsval *arg UI16 realId = static_cast( JSVAL_TO_INT( argv[0] )); SI32 itemColour = 0; - UI32 moreVal = 0; + SI64 moreVal = -1; + std::string sectionId = ""; - if(( argc < 1 ) || ( argc > 3 )) + if(( argc < 1 ) || ( argc > 4 )) { - MethodError( "(ResourceCount) Invalid count of parameters: %d, either needs 1, 2 or 3", argc ); + MethodError( "(ResourceCount) Invalid count of parameters: %d, needs from 1 to 4 parameters", argc ); return JS_FALSE; } @@ -3611,20 +3613,26 @@ JSBool CChar_ResourceCount( JSContext *cx, JSObject *obj, uintN argc, jsval *arg } if( argc >= 3 ) { - moreVal = static_cast( JSVAL_TO_INT( argv[2] )); + moreVal = static_cast( JSVAL_TO_INT( argv[2] )); + } + if( argc >= 4 ) + { + sectionId = JS_GetStringBytes( JS_ValueToString( cx, argv[3] )); } bool colorCheck = ( itemColour != -1 ? true : false ); + bool moreCheck = ( moreVal != -1 ? true : false ); - *rval = INT_TO_JSVAL( GetItemAmount( myChar, realId, static_cast( itemColour ), moreVal, colorCheck )); + *rval = INT_TO_JSVAL( GetItemAmount( myChar, realId, static_cast( itemColour ), static_cast( moreVal ), colorCheck, moreCheck, sectionId )); return JS_TRUE; } //o------------------------------------------------------------------------------------------------o //| Function - CBase_UseResource() -//| Prototype - int UseResource( amount, realitemid ) -//| int UseResource( amount, realitemid, colour ) -//| int UseResource( amount, realitemid, colour, moreVal ) +//| Prototype - int UseResource( amount, realItemId ) +//| int UseResource( amount, realItemId, colour ) +//| int UseResource( amount, realItemId, colour, moreVal ) +//| int UseResource( amount, realItemId, colour, moreVal, sectionId ) //o------------------------------------------------------------------------------------------------o //| Purpose - Removes specified amount of items of given ID, colour and MORE value from //| char's packs, and returns amount deleted @@ -3642,36 +3650,44 @@ JSBool CBase_UseResource( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, UI32 amount = static_cast( JSVAL_TO_INT( argv[0] )); UI16 realId = static_cast( JSVAL_TO_INT( argv[1] )); - UI16 itemColour = 0; - UI32 moreVal = 0; + SI32 itemColour = 0; + SI64 moreVal = -1; + std::string sectionId = ""; - // Min. 2 Arguments (amount + id) or max 4 (amount + id + color + moreVal) - if(( argc < 2 ) || ( argc > 4 )) + // Min. 2 Arguments (amount + id) or max 5 (amount + id + color + moreVal + sectionId) + if(( argc < 2 ) || ( argc > 5 )) { - MethodError( "(UseResource) Invalid count of parameters: %d, either needs 2, 3 or 4", argc ); + MethodError( "(UseResource) Invalid count of parameters: %d, needs from 2 to 5 parameters", argc ); return JS_FALSE; } if( argc >= 3 ) { - itemColour = static_cast( JSVAL_TO_INT( argv[2] )); + itemColour = static_cast( JSVAL_TO_INT( argv[2] )); } if( argc >= 4 ) { - moreVal = static_cast( JSVAL_TO_INT( argv[3] )); + moreVal = static_cast( JSVAL_TO_INT( argv[3] )); } + if( argc >= 5 ) + { + sectionId = JS_GetStringBytes( JS_ValueToString( cx, argv[4] )); + } + + bool colorCheck = ( itemColour != -1 ? true : false ); + bool moreCheck = ( moreVal != -1 ? true : false ); UI32 retVal = 0; if( myClass.ClassName() == "UOXChar" ) { CChar *myChar = static_cast( myObj ); - retVal = DeleteItemAmount( myChar, amount, realId, itemColour, moreVal ); + retVal = DeleteItemAmount( myChar, amount, realId, static_cast( itemColour ), static_cast( moreVal ), colorCheck, moreCheck, sectionId ); } else { CItem *myItem = static_cast( myObj ); - retVal = DeleteSubItemAmount( myItem, amount, realId, itemColour, moreVal ); + retVal = DeleteSubItemAmount( myItem, amount, realId, static_cast( itemColour ), static_cast( moreVal ), colorCheck, moreCheck, sectionId ); } *rval = INT_TO_JSVAL( retVal ); return JS_TRUE; diff --git a/source/UOXJSPropertySpecs.h b/source/UOXJSPropertySpecs.h index 8021cbf5b..79f8bdd91 100644 --- a/source/UOXJSPropertySpecs.h +++ b/source/UOXJSPropertySpecs.h @@ -51,7 +51,7 @@ inline JSPropertySpec CSpellProperties[] = { "soundEffect", CSP_SOUNDEFFECT, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "enabled", CSP_ENABLED, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "baseDmg", CSP_BASEDMG, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CGlobalSkillProperties[] = @@ -63,7 +63,7 @@ inline JSPropertySpec CGlobalSkillProperties[] = { "intelligence", CGSKILL_INTELLIGENCE, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "skillDelay", CGSKILL_SKILLDELAY, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "scriptID", CGSKILL_SCRIPTID, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CCreateEntryProperties[] = @@ -81,7 +81,7 @@ inline JSPropertySpec CCreateEntryProperties[] = { "skills", CMAKE_SKILLS, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "avgMinSkill", CMAKE_AVGMINSKILL, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "avgMaxSkill", CMAKE_AVGMAXSKILL, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CTimerProperties[] = @@ -121,7 +121,7 @@ inline JSPropertySpec CTimerProperties[] = { "SOCK_MUTETIME", TIMER_SOCK_MUTETIME, JSPROP_ENUMPERMRO, nullptr, nullptr }, { "SOCK_TRACKINGDISPLAY", TIMER_SOCK_TRACKINGDISPLAY, JSPROP_ENUMPERMRO, nullptr, nullptr }, { "SOCK_TRAFFICWARDEN", TIMER_SOCK_TRAFFICWARDEN, JSPROP_ENUMPERMRO, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CRaceProperties[] = @@ -140,7 +140,7 @@ inline JSPropertySpec CRaceProperties[] = { "magicResistance", CRP_MAGICRESISTANCE, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "visibleDistance", CRP_VISIBLEDISTANCE, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "nightVision", CRP_NIGHTVISION, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; @@ -177,7 +177,7 @@ inline JSPropertySpec CRegionProperties[] = { "music", CREGP_MUSIC, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "weather", CREGP_WEATHER, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "owner", CREGP_OWNER, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CSpawnRegionProperties[] = @@ -205,7 +205,7 @@ inline JSPropertySpec CSpawnRegionProperties[] = { "minTime", CSPAWNREGP_MINTIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "maxTime", CSPAWNREGP_MAXTIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "call", CSPAWNREGP_CALL, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CGuildProperties[] = @@ -221,7 +221,7 @@ inline JSPropertySpec CGuildProperties[] = { "charter", CGP_CHARTER, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "abbreviation", CGP_ABBREVIATION, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "webPage", CGP_WEBPAGE, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CCharacterProps[] = @@ -403,7 +403,7 @@ inline JSPropertySpec CCharacterProps[] = { "createdOn", CCP_CREATEDON, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "housesOwned", CCP_HOUSESOWNED, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "housesCoOwned", CCP_HOUSESCOOWNED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CItemProps[] = @@ -554,7 +554,7 @@ inline JSPropertySpec CItemProps[] = { "tradeTimestamp", CIP_TRADETIMESTAMP, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "banX", CIP_BANX, JSPROP_ENUMANDPERM, nullptr, nullptr}, { "banY", CIP_BANY, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CSocketProps[] = @@ -595,7 +595,7 @@ inline JSPropertySpec CSocketProps[] = { "target", CSOCKP_TARGET, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "tempObj", CSOCKP_TEMPOBJ, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "tempObj2", CSOCKP_TEMPOBJ2, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CSkillsProps[] = @@ -664,9 +664,9 @@ inline JSPropertySpec CSkillsProps[] = inline JSPropertySpec CGumpDataProperties[] = { - { "buttons", CGumpData_Button, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "IDs", CGumpData_ID , JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { "buttons", CGumpData_Button, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "IDs", CGumpData_ID , JSPROP_ENUMANDPERM, nullptr, nullptr }, + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CAccountProperties[] = @@ -678,61 +678,61 @@ inline JSPropertySpec CAccountProperties[] = { "path", CACCOUNT_PATH, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "comment", CACCOUNT_COMMENT, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "timeban", CACCOUNT_TIMEBAN, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "firstLogin", CACCOUNT_FIRSTLOGIN, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character1", CACCOUNT_CHARACTER1, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character2", CACCOUNT_CHARACTER2, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character3", CACCOUNT_CHARACTER3, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character4", CACCOUNT_CHARACTER4, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character5", CACCOUNT_CHARACTER5, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character6", CACCOUNT_CHARACTER6, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "character7", CACCOUNT_CHARACTER7, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "firstLogin", CACCOUNT_FIRSTLOGIN, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character1", CACCOUNT_CHARACTER1, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character2", CACCOUNT_CHARACTER2, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character3", CACCOUNT_CHARACTER3, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character4", CACCOUNT_CHARACTER4, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character5", CACCOUNT_CHARACTER5, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character6", CACCOUNT_CHARACTER6, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "character7", CACCOUNT_CHARACTER7, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "currentChar", CACCOUNT_CURRENTCHAR, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "lastIP", CACCOUNT_LASTIP, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "lastIP", CACCOUNT_LASTIP, JSPROP_ENUMANDPERM, nullptr, nullptr }, // Flags - { "isBanned", CACCOUNT_BANNED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSuspended", CACCOUNT_SUSPENDED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isPublic", CACCOUNT_PUBLIC, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isOnline", CACCOUNT_ONLINE, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot1Blocked", CACCOUNT_CHARSLOT1BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot2Blocked", CACCOUNT_CHARSLOT2BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot3Blocked", CACCOUNT_CHARSLOT3BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot4Blocked", CACCOUNT_CHARSLOT4BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot5Blocked", CACCOUNT_CHARSLOT5BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot6Blocked", CACCOUNT_CHARSLOT6BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSlot7Blocked", CACCOUNT_CHARSLOT7BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "unused9", CACCOUNT_UNUSED9, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "unused10", CACCOUNT_UNUSED10, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isSeer", CACCOUNT_SEER, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isCounselor", CACCOUNT_COUNSELOR, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "isGM", CACCOUNT_GM, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { "isBanned", CACCOUNT_BANNED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSuspended", CACCOUNT_SUSPENDED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isPublic", CACCOUNT_PUBLIC, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isOnline", CACCOUNT_ONLINE, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot1Blocked", CACCOUNT_CHARSLOT1BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot2Blocked", CACCOUNT_CHARSLOT2BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot3Blocked", CACCOUNT_CHARSLOT3BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot4Blocked", CACCOUNT_CHARSLOT4BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot5Blocked", CACCOUNT_CHARSLOT5BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot6Blocked", CACCOUNT_CHARSLOT6BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSlot7Blocked", CACCOUNT_CHARSLOT7BLOCKED, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "unused9", CACCOUNT_UNUSED9, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "unused10", CACCOUNT_UNUSED10, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isSeer", CACCOUNT_SEER, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isCounselor", CACCOUNT_COUNSELOR, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "isGM", CACCOUNT_GM, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CConsoleProperties[] = { - { "mode", CCONSOLE_MODE, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "logEcho", CCONSOLE_LOGECHO, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { "mode", CCONSOLE_MODE, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "logEcho", CCONSOLE_LOGECHO, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CScriptSectionProperties[] = { - { "numTags", CSS_NUMTAGS, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "atEnd", CSS_ATEND, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "atEndTags", CSS_ATENDTAGS, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { "numTags", CSS_NUMTAGS, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "atEnd", CSS_ATEND, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "atEndTags", CSS_ATENDTAGS, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CResourceProperties[] = { - { "logAmount", CRESP_LOGAMT, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "logTime", CRESP_LOGTIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "oreAmount", CRESP_OREAMT, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "oreTime", CRESP_ORETIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "fishAmount", CRESP_FISHAMT, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { "fishTime", CRESP_FISHTIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { "logAmount", CRESP_LOGAMT, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "logTime", CRESP_LOGTIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "oreAmount", CRESP_OREAMT, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "oreTime", CRESP_ORETIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "fishAmount", CRESP_FISHAMT, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "fishTime", CRESP_FISHTIME, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; inline JSPropertySpec CPartyProperties[] = @@ -740,7 +740,7 @@ inline JSPropertySpec CPartyProperties[] = { "leader", CPARTYP_LEADER, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "memberCount", CPARTYP_MEMBERCOUNT, JSPROP_ENUMPERMRO, nullptr, nullptr }, { "isNPC", CPARTYP_ISNPC, JSPROP_ENUMANDPERM, nullptr, nullptr }, - { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } + { nullptr, static_cast(0), static_cast(0), nullptr, nullptr } }; #endif diff --git a/source/cBaseObject.h b/source/cBaseObject.h index 48f2ce1a0..7063251b2 100644 --- a/source/cBaseObject.h +++ b/source/cBaseObject.h @@ -48,53 +48,53 @@ enum UpdateTypes class CBaseObject { protected: - TAGMAP2 tags; - TAGMAP2 tempTags; - std::string title; - ObjectType objType; - RACEID race; - SI16 x; - SI16 y; - SI08 z; - UI16 id; - UI16 colour; - UI08 dir; - SERIAL serial; - CMultiObj *multis; - SERIAL spawnSerial; - SERIAL owner; - UI08 worldNumber; - UI16 instanceId; - SI16 strength; - SI16 dexterity; - SI16 intelligence; - SI16 hitpoints; - VisibleTypes visible; - SI16 hiDamage; - SI16 loDamage; - SI32 weight; - SI16 mana; - SI16 stamina; - UI16 scriptTrig; - SI16 st2; - SI16 dx2; - SI16 in2; - mutable SI32 FilePosition; - SERIAL tempMulti; - std::string name; - std::string sectionId; + TAGMAP2 tags; + TAGMAP2 tempTags; + std::string title; + ObjectType objType; + RACEID race; + SI16 x; + SI16 y; + SI08 z; + UI16 id; + UI16 colour; + UI08 dir; + SERIAL serial; + CMultiObj *multis; + SERIAL spawnSerial; + SERIAL owner; + UI08 worldNumber; + UI16 instanceId; + SI16 strength; + SI16 dexterity; + SI16 intelligence; + SI16 hitpoints; + VisibleTypes visible; + SI16 hiDamage; + SI16 loDamage; + SI32 weight; + SI16 mana; + SI16 stamina; + UI16 scriptTrig; + SI16 st2; + SI16 dx2; + SI16 in2; + mutable SI32 FilePosition; + SERIAL tempMulti; + std::string name; + std::string sectionId; std::vector scriptTriggers; - UI08 poisoned; - SI16 carve; // Carve.dfn entry - SI16 oldLocX; - SI16 oldLocY; - SI08 oldLocZ; - SI16 oldTargLocX; - SI16 oldTargLocY; - SI16 fame; - SI16 karma; - SI16 kills; - UI16 subRegion; + UI08 poisoned; + SI16 carve; // Carve.dfn entry + SI16 oldLocX; + SI16 oldLocY; + SI08 oldLocZ; + SI16 oldTargLocX; + SI16 oldTargLocY; + SI16 fame; + SI16 karma; + SI16 kills; + UI16 subRegion; void RemoveFromMulti( bool fireTrigger = true ); void AddToMulti( bool fireTrigger = true ); @@ -103,7 +103,7 @@ class CBaseObject UI16 resistances[WEATHNUM]; - SERIAL tempContainerSerial; + SERIAL tempContainerSerial; bool nameRequestActive; @@ -111,29 +111,29 @@ class CBaseObject public: - Point3_st GetOldLocation( void ); + Point3_st GetOldLocation( void ); - size_t GetNumTags( void ) const; + size_t GetNumTags( void ) const; - TAGMAPOBJECT GetTag( std::string tagname ) const; + TAGMAPOBJECT GetTag( std::string tagname ) const; void SetTag( std::string tagname, TAGMAPOBJECT tagval ); - TAGMAPOBJECT GetTempTag( std::string tempTagName ) const; + TAGMAPOBJECT GetTempTag( std::string tempTagName ) const; void SetTempTag( std::string tempTagName, TAGMAPOBJECT tagVal ); void SetResist( UI16 newValue, WeatherType damage ); UI16 GetResist( WeatherType damage ) const; void SetTitle( std::string newtitle ); - std::string GetTitle( void ) const; - virtual void SetMana( SI16 mn ); + std::string GetTitle( void ) const; + virtual void SetMana( SI16 mn ); SI16 GetMana( void ) const; - virtual void SetStamina( SI16 stam ); + virtual void SetStamina( SI16 stam ); SI16 GetStamina( void ) const; SI32 GetFilePosition( void ) const; SI32 SetFilePosition( SI32 filepos ); - virtual ~CBaseObject(); + virtual ~CBaseObject(); CBaseObject( void ); SI16 GetOldTargLocX( void ) const; @@ -141,7 +141,7 @@ class CBaseObject SI16 GetX( void ) const; SI16 GetY( void ) const; SI08 GetZ( void ) const; - Point3_st GetLocation( void ) const; + Point3_st GetLocation( void ) const; void SetOldTargLocX( SI16 newvalue ); void SetOldTargLocY( SI16 newvalue ); @@ -149,10 +149,10 @@ class CBaseObject void SetY( SI16 newValue ); void SetZ( SI08 newValue ); void WalkXY( SI16 newX, SI16 newY ); - virtual void SetOldLocation( SI16 newX, SI16 newY, SI08 newZ ) = 0; - virtual void SetLocation( SI16 newX, SI16 newY, SI08 newZ, UI08 world, UI16 instanceId ) = 0; - virtual void SetLocation( SI16 newX, SI16 newY, SI08 newZ ) = 0; - virtual void SetLocation( const CBaseObject *toSet ) = 0; + virtual void SetOldLocation( SI16 newX, SI16 newY, SI08 newZ ) = 0; + virtual void SetLocation( SI16 newX, SI16 newY, SI08 newZ, UI08 world, UI16 instanceId ) = 0; + virtual void SetLocation( SI16 newX, SI16 newY, SI08 newZ ) = 0; + virtual void SetLocation( const CBaseObject *toSet ) = 0; UI16 GetId( void ) const; UI16 GetColour( void ) const; @@ -164,15 +164,15 @@ class CBaseObject void SetId( UI08 newValue, UI08 part ); SI32 GetWeight( void ) const; - virtual void SetWeight( SI32 newVal, bool doWeightUpdate = true ) = 0; + virtual void SetWeight( SI32 newVal, bool doWeightUpdate = true ) = 0; - SERIAL GetSerial( void ) const; - SERIAL GetSpawn( void ) const; - SERIAL GetOwner( void ) const; - SERIAL GetMulti( void ) const; - CMultiObj * GetMultiObj( void ) const; - CSpawnItem * GetSpawnObj( void ) const; - CChar * GetOwnerObj( void ) const; + SERIAL GetSerial( void ) const; + SERIAL GetSpawn( void ) const; + SERIAL GetOwner( void ) const; + SERIAL GetMulti( void ) const; + CMultiObj * GetMultiObj( void ) const; + CSpawnItem * GetSpawnObj( void ) const; + CChar * GetOwnerObj( void ) const; UI08 GetSerial( UI08 part ) const; UI08 GetSpawn( UI08 part ) const; @@ -181,45 +181,45 @@ class CBaseObject void SetMulti( CMultiObj *newMulti, bool fireTrigger = true ); void SetSerial( SERIAL newSerial ); void SetSpawn( SERIAL newSpawn ); - virtual void SetOwner( CChar *newOwner ); + virtual void SetOwner( CChar *newOwner ); - virtual bool Save( std::ofstream &outStream ) = 0; - virtual bool DumpHeader( std::ofstream &outStream ) const = 0; - virtual bool DumpBody( std::ofstream &outStream ) const; + virtual bool Save( std::ofstream &outStream ) = 0; + virtual bool DumpHeader( std::ofstream &outStream ) const = 0; + virtual bool DumpBody( std::ofstream &outStream ) const; bool DumpFooter( std::ofstream &outStream ) const; bool Load( std::ifstream &inStream ); - virtual bool HandleLine( std::string &UTag, std::string &data ); + virtual bool HandleLine( std::string &UTag, std::string &data ); - RACEID GetRace( void ) const; + RACEID GetRace( void ) const; void SetRace( RACEID newValue ); - std::string GetNameRequest( CChar *nameRequester ); - std::string GetName( void ) const; + std::string GetNameRequest( CChar *nameRequester ); + std::string GetName( void ) const; void SetName( std::string newName ); - std::string GetSectionId( void ) const; + std::string GetSectionId( void ) const; void SetSectionId( std::string newSectionID ); - virtual SI16 GetStrength( void ) const; - virtual SI16 GetDexterity( void ) const; - virtual SI16 GetIntelligence( void ) const; + virtual SI16 GetStrength( void ) const; + virtual SI16 GetDexterity( void ) const; + virtual SI16 GetIntelligence( void ) const; SI16 GetHP( void ) const; - virtual void SetStrength( SI16 newValue ); - virtual void SetDexterity( SI16 newValue ); - virtual void SetIntelligence( SI16 newValue ); - virtual void SetHP( SI16 newValue ); + virtual void SetStrength( SI16 newValue ); + virtual void SetDexterity( SI16 newValue ); + virtual void SetIntelligence( SI16 newValue ); + virtual void SetHP( SI16 newValue ); void IncHP( SI16 amtToChange ); void SetDir( UI08 newDir, bool sendUpdate = true ); UI08 GetDir( void ) const; void SetVisible( VisibleTypes newValue ); - VisibleTypes GetVisible( void ) const; + VisibleTypes GetVisible( void ) const; - ObjectType GetObjType( void ) const; - virtual bool CanBeObjType( ObjectType toCompare ) const; + ObjectType GetObjType( void ) const; + virtual bool CanBeObjType( ObjectType toCompare ) const; SI16 GetHiDamage( void ) const; SI16 GetLoDamage( void ) const; @@ -237,16 +237,16 @@ class CBaseObject SI16 GetDexterity2( void ) const; SI16 GetIntelligence2( void ) const; - virtual void SetStrength2( SI16 nVal ); - virtual void SetDexterity2( SI16 nVal ); - virtual void SetIntelligence2( SI16 nVal ); + virtual void SetStrength2( SI16 nVal ); + virtual void SetDexterity2( SI16 nVal ); + virtual void SetIntelligence2( SI16 nVal ); void IncStrength( SI16 toInc = 1 ); void IncDexterity( SI16 toInc = 1 ); void IncIntelligence( SI16 toInc = 1 ); - virtual void PostLoadProcessing( void ); - virtual bool LoadRemnants( void ) = 0; + virtual void PostLoadProcessing( void ); + virtual bool LoadRemnants( void ) = 0; UI08 WorldNumber( void ) const; void WorldNumber( UI08 value ); @@ -258,21 +258,21 @@ class CBaseObject void SetSubRegion( UI16 value ); UI08 GetPoisoned( void ) const; - virtual void SetPoisoned( UI08 newValue ); + virtual void SetPoisoned( UI08 newValue ); SI16 GetCarve( void ) const; void SetCarve( SI16 newValue ); - virtual void Update( CSocket *mSock = nullptr, bool drawGamePlayer = false, bool sendToSelf = true ) = 0; - virtual void SendToSocket( CSocket *mSock, bool drawGamePlayer = false ) = 0; - virtual void Dirty( UpdateTypes updateType ); + virtual void Update( CSocket *mSock = nullptr, bool drawGamePlayer = false, bool sendToSelf = true ) = 0; + virtual void SendToSocket( CSocket *mSock, bool drawGamePlayer = false ) = 0; + virtual void Dirty( UpdateTypes updateType ); void RemoveFromRefreshQueue( void ); - virtual void Delete( void ) = 0; - virtual void Cleanup( void ); + virtual void Delete( void ) = 0; + virtual void Cleanup( void ); - virtual void RemoveSelfFromOwner( void ) = 0; - virtual void AddSelfToOwner( void ) = 0; + virtual void RemoveSelfFromOwner( void ) = 0; + virtual void AddSelfToOwner( void ) = 0; bool IsFree( void ) const; bool IsDeleted( void ) const; diff --git a/source/cChar.h b/source/cChar.h index 532f251ac..525b0ef5f 100644 --- a/source/cChar.h +++ b/source/cChar.h @@ -67,7 +67,7 @@ class CChar : public CBaseObject SI08 wanderMode; // NPC Wander Mode SI08 oldWanderMode; // Used for fleeing npcs - SERIAL fTarg; // NPC Follow Target + SERIAL fTarg; // NPC Follow Target SI16 fx[2]; //NPC Wander Point x SI16 fy[2]; //NPC Wander Point y SI08 fz; //NPC Wander Point z @@ -85,8 +85,8 @@ class CChar : public CBaseObject UI08 questDestRegion; UI08 questOrigRegion; CBaseObject * petGuarding; - cNPC_FLAG npcFlag; - std::bitset<8> boolFlags; + cNPC_FLAG npcFlag; + std::bitset<8> boolFlags; SI16 peaceing; SI16 provoing; @@ -126,23 +126,23 @@ class CChar : public CBaseObject SERIAL callNum; // Callnum GM or Counsellor is on SERIAL playerCallNum; // Players call number in GM or Counsellor requestQueue SERIAL trackingTarget; // Tracking target ID - UI08 squelched; // Squelching - UI08 commandLevel; // 0 = player, 1 = counselor, 2 = GM - UI08 postType; - UI16 hairStyle; - UI16 beardStyle; + UI08 squelched; // Squelching + UI08 commandLevel; // 0 = player, 1 = counselor, 2 = GM + UI08 postType; + UI16 hairStyle; + UI16 beardStyle; COLOUR hairColour; COLOUR beardColour; CItem * speechItem; - UI08 speechMode; - UI08 speechId; + UI08 speechMode; + UI08 speechId; cScript * speechCallback; SERIAL robe; - UI16 accountNum; - UI16 origSkin; - UI16 origId; // Backup of body type for polymorph - UI08 fixedLight; // Fixed lighting level (For chars in dungeons, where they dont see the night) - UI16 deaths; + UI16 accountNum; + UI16 origSkin; + UI16 origId; // Backup of body type for polymorph + UI08 fixedLight; // Fixed lighting level (For chars in dungeons, where they dont see the night) + UI16 deaths; CSocket * socket; std::vector trackingTargets; @@ -181,34 +181,34 @@ class CChar : public CBaseObject SI08 fontType; // Speech font to use UI16 maxHP; UI16 maxHP_oldstr; - RACEID oldRace; + RACEID oldRace; SI16 maxMana; UI16 maxMana_oldint; SI16 maxStam; UI16 maxStam_olddex; - COLOUR sayColor; - COLOUR emoteColor; - SI08 cell; // Reserved for jailing players - CItem * packItem; // Characters backpack - SERIAL targ; // Current combat target - SERIAL attacker; // Character who attacked this character + COLOUR sayColor; + COLOUR emoteColor; + SI08 cell; // Reserved for jailing players + CItem * packItem; // Characters backpack + SERIAL targ; // Current combat target + SERIAL attacker; // Character who attacked this character SI08 hunger; // Level of hungerness, 6 = full, 0 = "empty" SI08 thirst; // Level of thirstiness, 6 = full, 0 = "empty" UI16 regionNum; - UI16 town; // Matches Region number in regions.dfn + UI16 town; // Matches Region number in regions.dfn UI08 brkPeaceChanceGain; UI08 brkPeaceChance; - UI16 advObj; //Has used advance gate? - SERIAL guildFealty; // Serial of player you are loyal to (default=yourself) (DasRaetsel) - SI16 guildNumber; // Number of guild player is in (0=no guild) (DasRaetsel) - UI08 flag; //1=red 2=grey 4=Blue 8=green 10=Orange // should it not be 0x10??? sounds like we're trying to do - SI08 spellCast; - UI08 nextAct; //time to next spell action.. - SI08 stealth; // stealth ( steps already done, -1=not using ) - UI08 running; // Stamina Loose while running - RACEID raceGate; // Race gate that has been used - UI08 step; // 1 if step 1 0 if step 2 3 if step 1 skip 2 if step 2 skip + UI16 advObj; // Has used advance gate? + SERIAL guildFealty; // Serial of player you are loyal to (default=yourself) (DasRaetsel) + SI16 guildNumber; // Number of guild player is in (0=no guild) (DasRaetsel) + UI08 flag; // 1=red 2=grey 4=Blue 8=green 10=Orange // should it not be 0x10??? sounds like we're trying to do + SI08 spellCast; + UI08 nextAct; // time to next spell action.. + SI08 stealth; // stealth ( steps already done, -1=not using ) + UI08 running; // Stamina Loose while running + RACEID raceGate; // Race gate that has been used + UI08 step; // 1 if step 1 0 if step 2 3 if step 1 skip 2 if step 2 skip std::bitset<16> priv; @@ -217,14 +217,14 @@ class CChar : public CBaseObject TIMERVAL charTimers[tCHAR_COUNT]; TIMERVAL regen[3]; - TIMERVAL weathDamage[WEATHNUM]; // Light Damage timer + TIMERVAL weathDamage[WEATHNUM]; // Light Damage timer - UI08 PoisonStrength; + UI08 PoisonStrength; BodyType bodyType; - UI32 lastMoveTime; // Timestamp for when character moved last + UI32 lastMoveTime; // Timestamp for when character moved last - SKILLVAL baseskill[ALLSKILLS]; // Base skills without stat modifiers - SKILLVAL skill[INTELLECT+1]; // List of skills (with stat modifiers) + SKILLVAL baseskill[ALLSKILLS]; // Base skills without stat modifiers + SKILLVAL skill[INTELLECT+1]; // List of skills (with stat modifiers) LAYERLIST itemLayers; LAYERLIST_ITERATOR layerCtr; diff --git a/source/cItem.h b/source/cItem.h index ef5bfb74f..894427b57 100644 --- a/source/cItem.h +++ b/source/cItem.h @@ -16,55 +16,55 @@ class CItem : public CBaseObject protected: GenericList Contains; - CBaseObject * contObj; + CBaseObject * contObj; UI08 glowEffect; - SERIAL glow; // identifies glowing objects - COLOUR glowColour; - SI08 madeWith; // Store the skills used to make this item + SERIAL glow; // identifies glowing objects + COLOUR glowColour; + SI08 madeWith; // Store the skills used to make this item SI32 rndValueRate; // Store the value calculated base on RANDOMVALUE in region.dfn - SI16 good; // Store type of GOODs to trade system! (Plz not set as UNSIGNED) + SI16 good; // Store type of GOODs to trade system! (Plz not set as UNSIGNED) // for example: RANK 5 --> 5*10 = 50% of malus // this item has same values decreased by 50%.. // RANK 1 --> 1*10=10% this item has 90% of malus! // RANK 10 --> 10*10 = 100% this item has no malus! RANK 10 is automatically setted if you select RANKSYSTEM 0. // Vars: LODAMAGE, HIDAMAGE, ATT, DEF, HP, MAXHP - SI08 rank; // for rank system, this value is the LEVEL of the item from 1 to 10. Simply multiply t he rank*10 and calculate the MALUS this item has from the original. - ARMORCLASS armorClass; - UI16 restock; // Number up to which shopkeeper should restock this item - SI08 movable; // 0=Default as stored in client, 1=Always movable, 2=Never movable, 3=Owner movable. + SI08 rank; // for rank system, this value is the LEVEL of the item from 1 to 10. Simply multiply t he rank*10 and calculate the MALUS this item has from the original. + ARMORCLASS armorClass; + UI16 restock; // Number up to which shopkeeper should restock this item + SI08 movable; // 0=Default as stored in client, 1=Always movable, 2=Never movable, 3=Owner movable. TIMERVAL tempTimer; TIMERVAL decayTime; - UI08 spd; //The speed of the weapon - UI16 maxHp; // Max number of hit points an item can have. - UI16 amount; // Amount of items in pile - ItemLayers layer; // Layer if equipped on paperdoll - ItemTypes type; // For things that do special things on doubleclicking - SI08 offspell; - UI16 entryMadeFrom; - SERIAL creator; // Store the serial of the player made this item - SI08 gridLoc; + UI08 spd; // The speed of the weapon + UI16 maxHp; // Max number of hit points an item can have. + UI16 amount; // Amount of items in pile + ItemLayers layer; // Layer if equipped on paperdoll + ItemTypes type; // For things that do special things on doubleclicking + SI08 offspell; + UI16 entryMadeFrom; + SERIAL creator; // Store the serial of the player made this item + SI08 gridLoc; std::bitset<8> bools; - std::bitset<8> priv; // Bit 0, decay off/on. Bit 1, newbie item off/on. Bit 2 Dispellable + std::bitset<8> priv; // Bit 0, decay off/on. Bit 1, newbie item off/on. Bit 2 Dispellable std::string name2; std::string desc; - std::string eventName; // Name of custom event item belongs to + std::string eventName; // Name of custom event item belongs to UI32 tempVars[CITV_COUNT]; - SI32 weightMax; //Maximum weight a container can hold - SI32 baseWeight; //Base weight of item. Applied when item is created for the first time, based on weight. Primarily used to determine base weight of containers + SI32 weightMax; // Maximum weight a container can hold + SI32 baseWeight; // Base weight of item. Applied when item is created for the first time, based on weight. Primarily used to determine base weight of containers UI16 maxItems; // Maximum amount of items a container can hold UI08 maxRange; // Max range of ranged weapon - UI08 baseRange; // Base range of thrown weapon + UI08 baseRange; // Base range of thrown weapon UI16 maxUses; // Max number of uses an item can have UI16 usesLeft; // Current number of uses left on an item - UI08 dir; //direction an item can have + UI08 dir; // direction an item can have UI32 value[3]; // Price a shopkeep buys and sells items for, with price on player vendor as optional third value UI16 ammo[2]; // Ammo ID and Hue - UI16 ammoFX[3]; // Ammo-effect ID, Hue and rendermode + UI16 ammoFX[3]; // Ammo-effect ID, Hue and rendermode UI16 regionNum; diff --git a/source/cMultiObj.h b/source/cMultiObj.h index 0db47e427..40a9dd141 100644 --- a/source/cMultiObj.h +++ b/source/cMultiObj.h @@ -23,7 +23,7 @@ class CMultiObj : public CItem UI16 maxVendors; std::vector trashContainerList; - UI16 maxTrashContainers; + UI16 maxTrashContainers; std::vector vendorList; diff --git a/source/cRaces.h b/source/cRaces.h index df9f80b14..211f42afa 100644 --- a/source/cRaces.h +++ b/source/cRaces.h @@ -30,20 +30,20 @@ class CRace //SKILLVAL iSkills[SKILLS]; std::string raceName; - std::bitset<8> bools; - RANGE visDistance; + std::bitset<8> bools; + RANGE visDistance; LIGHTLEVEL nightVision; ARMORCLASS armourRestrict; LIGHTLEVEL lightLevel; - GENDER restrictGender; - SKILLVAL languageMin; - R32 poisonResistance; // % of poison to cancel - R32 magicResistance; // % of magic to cancel + GENDER restrictGender; + SKILLVAL languageMin; + R32 poisonResistance; // % of poison to cancel + R32 magicResistance; // % of magic to cancel COLOURLIST beardColours; COLOURLIST hairColours; COLOURLIST skinColours; - COLOUR bloodColour; + COLOUR bloodColour; RACEIDLIST racialEnemies; diff --git a/source/cServerData.cpp b/source/cServerData.cpp index 5c5802bc2..4f6f719c3 100644 --- a/source/cServerData.cpp +++ b/source/cServerData.cpp @@ -2808,9 +2808,9 @@ auto CServerData::HirelingCombatTraining() const -> bool { return boolVals.test( BIT_HIRELINGCOMBATTRAINING ); } -auto CServerData::HirelingCombatTraining( [[maybe_unused]] bool newVal ) -> void +auto CServerData::HirelingCombatTraining( bool newVal ) -> void { - boolVals.set( BIT_HIRELINGCOMBATTRAINING ); + boolVals.set( BIT_HIRELINGCOMBATTRAINING, newVal ); } //o------------------------------------------------------------------------------------------------o diff --git a/source/cSocket.h b/source/cSocket.h index 67b0ec982..f345de569 100644 --- a/source/cSocket.h +++ b/source/cSocket.h @@ -103,20 +103,20 @@ class CSocket bool logging; UI08 range; bool cryptclient; - size_t cliSocket; // client + size_t cliSocket; // client SI16 walkSequence; - size_t postAckCount; + size_t postAckCount; PickupLocations pSpot; - SERIAL pFrom; + SERIAL pFrom; SI16 pX; SI16 pY; SI08 pZ; - UnicodeTypes lang; - ClientTypes cliType; + UnicodeTypes lang; + ClientTypes cliType; ClientVersions cliVerShort; - UI32 clientVersion; + UI32 clientVersion; UI32 bytesReceived; UI32 bytesSent; @@ -137,7 +137,7 @@ class CSocket UI08 clientip[4]; bool loginComplete; - CItem * cursorItem; //pointer to item held on mouse cursor + CItem * cursorItem; //pointer to item held on mouse cursor UI16 bytesRecvWarningCount; UI16 bytesSentWarningCount; diff --git a/source/funcdecl.h b/source/funcdecl.h index d43623551..be05670e2 100644 --- a/source/funcdecl.h +++ b/source/funcdecl.h @@ -97,10 +97,10 @@ TIMERVAL GetPoisonTickTime( UI08 poisonStrength ); //o------------------------------------------------------------------------------------------------o // Amount related //o------------------------------------------------------------------------------------------------o -UI32 GetItemAmount( CChar *s, UI16 realId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0, bool colorCheck = false ); +UI32 GetItemAmount( CChar *s, UI16 realId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0, bool colorCheck = false, bool moreCheck = false, std::string sectionId = "" ); UI32 GetTotalItemCount( CItem *objCont ); -UI32 DeleteItemAmount( CChar *s, UI32 amount, UI16 realId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0 ); -UI32 DeleteSubItemAmount( CItem *p, UI32 amount, UI16 realId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0 ); +UI32 DeleteItemAmount( CChar *s, UI32 amount, UI16 realId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0, bool colorCheck = false, bool moreCheck = false, std::string sectionId = "" ); +UI32 DeleteSubItemAmount( CItem *p, UI32 amount, UI16 realId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0, bool colorCheck = false, bool moreCheck = false, std::string sectionId = "" ); UI32 GetBankCount( CChar *p, UI16 itemId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0 ); UI32 DeleteBankItem( CChar *p, UI32 amt, UI16 itemId, UI16 realColour = 0x0000, UI32 realMoreVal = 0x0 ); diff --git a/source/magic.cpp b/source/magic.cpp index 3545c444e..20176dde0 100644 --- a/source/magic.cpp +++ b/source/magic.cpp @@ -4968,6 +4968,7 @@ void CMagic::LoadScript( void ) auto ssecs = oldstrutil::sections( data, " " ); if( ssecs.size() > 1 ) { + // This is used to load flags from old-style spells.dfn, where flags are written as FLAGS=## ## instead of FLAGS=0x#### spells[i].Flags((( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( ssecs[0], "//" )), nullptr, 16 ))) << 8 ) | static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( ssecs[1], "//" )), nullptr, 16 ))); } @@ -5055,6 +5056,7 @@ void CMagic::LoadScript( void ) auto ssecs = oldstrutil::sections( data, " " ); if( ssecs.size() > 1 ) { + // This is used to load sounds from old-style spells.dfn, where soundfx are written as SOUNDFX=## ## instead of SOUNDFX=0x#### spells[i].Effect(((static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( ssecs[0], "//" )), nullptr, 16 )) << 8 ) | static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( ssecs[1], "//" )), nullptr, 16 )))); } diff --git a/source/quantityfuncs.cpp b/source/quantityfuncs.cpp index 418cf3c2d..3dd1131ea 100644 --- a/source/quantityfuncs.cpp +++ b/source/quantityfuncs.cpp @@ -49,7 +49,7 @@ UI32 GetTotalItemCount( CItem *objCont ) //o------------------------------------------------------------------------------------------------o //| Purpose - Get the total amount of an item in a pack //o------------------------------------------------------------------------------------------------o -auto GetSubItemAmount( CItem *p, UI16 realId, UI16 realColour, UI32 realMoreVal, bool colorCheck = false ) -> UI32 +auto GetSubItemAmount( CItem *p, UI16 realId, UI16 realColour, UI32 realMoreVal, bool colorCheck = false, bool moreCheck = false, std::string sectionId = "" ) -> UI32 { UI32 total = 0; auto pCont = p->GetContainsList(); @@ -59,9 +59,12 @@ auto GetSubItemAmount( CItem *p, UI16 realId, UI16 realColour, UI32 realMoreVal, { if( i->GetId() != realId && ( i->GetType() == IT_CONTAINER || i->GetType() == IT_LOCKEDCONTAINER )) { - total += GetSubItemAmount( i, realId, realColour, realMoreVal ); + total += GetSubItemAmount( i, realId, realColour, realMoreVal, colorCheck, moreCheck, sectionId ); } - else if( i->GetId() == realId && ( !colorCheck || ( colorCheck && i->GetColour() == realColour ))) + else if( i->GetId() == realId + && ( !colorCheck || ( colorCheck && i->GetColour() == realColour )) + && ( !moreCheck || ( moreCheck && i->GetTempVar( CITV_MORE ) == realMoreVal )) + && ( sectionId == "" || sectionId == i->GetSectionId() )) { if( i->GetUsesLeft() > 0 ) { @@ -82,13 +85,13 @@ auto GetSubItemAmount( CItem *p, UI16 realId, UI16 realColour, UI32 realMoreVal, //o------------------------------------------------------------------------------------------------o //| Purpose - Get the total amount of an item on a character //o------------------------------------------------------------------------------------------------o -UI32 GetItemAmount( CChar *s, UI16 realId, UI16 realColour, UI32 realMoreVal, bool colorCheck ) +UI32 GetItemAmount( CChar *s, UI16 realId, UI16 realColour, UI32 realMoreVal, bool colorCheck, bool moreCheck, std::string sectionId ) { CItem *p = s->GetPackItem(); if( !ValidateObject( p )) return 0; - return GetSubItemAmount( p, realId, realColour, realMoreVal, colorCheck ); + return GetSubItemAmount( p, realId, realColour, realMoreVal, colorCheck, moreCheck, sectionId ); } //o------------------------------------------------------------------------------------------------o @@ -96,7 +99,7 @@ UI32 GetItemAmount( CChar *s, UI16 realId, UI16 realColour, UI32 realMoreVal, bo //o------------------------------------------------------------------------------------------------o //| Purpose - Remove a certain amount of an item of specified color in a pack //o------------------------------------------------------------------------------------------------o -auto DeleteSubItemAmount( CItem *p, UI32 amount, UI16 realId, UI16 realColour, UI32 realMoreVal ) -> UI32 +auto DeleteSubItemAmount( CItem *p, UI32 amount, UI16 realId, UI16 realColour, UI32 realMoreVal, bool colorCheck, bool moreCheck, std::string sectionId ) -> UI32 { if( !ValidateObject( p )) return 0; @@ -113,9 +116,12 @@ auto DeleteSubItemAmount( CItem *p, UI32 amount, UI16 realId, UI16 realColour, U if( i->GetId() != realId && ( i->GetType() == IT_CONTAINER || i->GetType() == IT_LOCKEDCONTAINER )) { // Is item an pack or container? - amtDeleted += DeleteSubItemAmount( i, total, realId, realColour ); + amtDeleted += DeleteSubItemAmount( i, total, realId, realColour, realMoreVal, colorCheck, moreCheck, sectionId ); } - else if( i->GetId() == realId && i->GetColour() == realColour && i->GetTempVar( CITV_MORE ) == realMoreVal ) + else if( i->GetId() == realId + && ( !colorCheck || ( colorCheck && i->GetColour() == realColour )) + && ( !moreCheck || ( moreCheck && i->GetTempVar( CITV_MORE ) == realMoreVal )) + && ( sectionId == "" || sectionId == i->GetSectionId() )) { UI16 usesLeft = i->GetUsesLeft(); if( usesLeft > 0 ) @@ -171,7 +177,7 @@ auto DeleteSubItemAmount( CItem *p, UI32 amount, UI16 realId, UI16 realColour, U //| //| Changes - 09/25/2002 - Weight Fixes //o------------------------------------------------------------------------------------------------o -UI32 DeleteItemAmount( CChar *s, UI32 amount, UI16 realId, UI16 realColour, UI32 realMoreVal ) +UI32 DeleteItemAmount( CChar *s, UI32 amount, UI16 realId, UI16 realColour, UI32 realMoreVal, bool colorCheck, bool moreCheck, std::string sectionId ) { if( !ValidateObject( s )) return 0; @@ -180,7 +186,7 @@ UI32 DeleteItemAmount( CChar *s, UI32 amount, UI16 realId, UI16 realColour, UI32 if( !ValidateObject( p )) return 0; - return DeleteSubItemAmount( p, amount, realId, realColour, realMoreVal ); + return DeleteSubItemAmount( p, amount, realId, realColour, realMoreVal, colorCheck, moreCheck, sectionId ); } //o------------------------------------------------------------------------------------------------o diff --git a/spidermonkey/js32.vcxproj b/spidermonkey/js32.vcxproj index 9ad0cf4f5..46ab2cdd5 100644 --- a/spidermonkey/js32.vcxproj +++ b/spidermonkey/js32.vcxproj @@ -119,6 +119,11 @@ false + + + _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_WINDOWS;_X86_=1;DEBUG;EXPORT_JS_API;JSFILE;WIN32;XP_WIN;%(PreprocessorDefinitions) + + From 780341dfd0b18e55c094c1690b8640c2c0e6c30c Mon Sep 17 00:00:00 2001 From: Lloyd Dilley Date: Sat, 3 Dec 2022 17:47:50 -0500 Subject: [PATCH 02/24] Fix size_t -> int issues with casts --- source/UOXJSPropertyFuncs.cpp | 12 ++++++------ source/items.cpp | 4 ++-- source/mapstuff.cpp | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/UOXJSPropertyFuncs.cpp b/source/UOXJSPropertyFuncs.cpp index 73da5e4af..830574d5d 100644 --- a/source/UOXJSPropertyFuncs.cpp +++ b/source/UOXJSPropertyFuncs.cpp @@ -359,14 +359,14 @@ JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsval id, js for( size_t j = 0; j < resEntry.idList.size(); j++ ) { jsval targId = INT_TO_JSVAL( resEntry.idList[j] ); - JS_SetElement( cx, idList, j, &targId ); + JS_SetElement( cx, idList, static_cast( j ), &targId ); } jsval idListVal = OBJECT_TO_JSVAL( idList ); JS_SetElement( cx, resource, 2, &idListVal ); // Now stuff the resource object into the parent object jsval resourceVal = OBJECT_TO_JSVAL( resource ); - JS_SetElement( cx, resources, i, &resourceVal ); + JS_SetElement( cx, resources, static_cast( i ), &resourceVal ); } *vp = OBJECT_TO_JSVAL( resources ); @@ -397,7 +397,7 @@ JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsval id, js // Now stuff the skill object into the parent object jsval skillVal = OBJECT_TO_JSVAL( skill ); - JS_SetElement( cx, skills, i, &skillVal ); + JS_SetElement( cx, skills, static_cast( i ), &skillVal ); } *vp = OBJECT_TO_JSVAL( skills ); @@ -511,7 +511,7 @@ JSBool CItemProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp for( size_t i = 0; i < scriptTriggers.size(); i++ ) { scriptId = INT_TO_JSVAL( scriptTriggers[i] ); - JS_SetElement( cx, scriptTriggersJS, i, &scriptId ); + JS_SetElement( cx, scriptTriggersJS, static_cast( i ), &scriptId ); } *vp = OBJECT_TO_JSVAL( scriptTriggersJS ); @@ -1522,7 +1522,7 @@ JSBool CCharacterProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsva for( size_t i = 0; i < scriptTriggers.size(); i++ ) { scriptId = INT_TO_JSVAL( scriptTriggers[i] ); - JS_SetElement( cx, scriptTriggersJS, i, &scriptId ); + JS_SetElement( cx, scriptTriggersJS, static_cast( i ), &scriptId ); } *vp = OBJECT_TO_JSVAL( scriptTriggersJS ); @@ -2485,7 +2485,7 @@ JSBool CRegionProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval * for( size_t i = 0; i < scriptTriggers.size(); i++ ) { scriptId = INT_TO_JSVAL( scriptTriggers[i] ); - JS_SetElement( cx, scriptTriggersJS, i, &scriptId ); + JS_SetElement( cx, scriptTriggersJS, static_cast( i ), &scriptId ); } *vp = OBJECT_TO_JSVAL( scriptTriggersJS ); diff --git a/source/items.cpp b/source/items.cpp index 27f3a25e5..27eff4b28 100644 --- a/source/items.cpp +++ b/source/items.cpp @@ -958,11 +958,11 @@ auto cItem::CreateRandomItem( CItem *mCont, const std::string& sItemList, const // If we find another entry with same weight as the first one found, or if none have been found yet, add to list if( weightOfChosenItem == 0 || weightOfChosenItem == itemWeight ) { - itemEntryToSpawn = j; + itemEntryToSpawn = static_cast( j ); weightOfChosenItem = itemWeight; // Add the entry index to a temporary vector of all entries with same weight, then continue looking for more! - matchingEntries.push_back( j ); + matchingEntries.push_back( static_cast( j ) ); continue; } } diff --git a/source/mapstuff.cpp b/source/mapstuff.cpp index ee2cdfe6f..b47ea03ea 100644 --- a/source/mapstuff.cpp +++ b/source/mapstuff.cpp @@ -111,7 +111,7 @@ auto CMulHandler::LoadMapsDFN( const std::string &uodir ) -> std::map( i ), entry ); } } return results; @@ -1970,7 +1970,7 @@ auto UltimaMap::ProcessEntry( [[maybe_unused]] std::size_t entry, std::size_t in auto ptr = data.data() + ( i * 196 ); if( block < _terrain.size() ) { - LoadTerrainBlock( block, ptr ); + LoadTerrainBlock( static_cast( block ), ptr ); } ++block; } From 57a626559fa8b6c75f28686756a96112458326a4 Mon Sep 17 00:00:00 2001 From: Lloyd Dilley Date: Sun, 4 Dec 2022 02:03:43 -0500 Subject: [PATCH 03/24] Change approach after some testing with Xuri --- source/UOXJSPropertyFuncs.cpp | 24 ++++++++++++------------ source/items.cpp | 6 +++--- source/mapstuff.cpp | 8 ++++---- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/source/UOXJSPropertyFuncs.cpp b/source/UOXJSPropertyFuncs.cpp index 830574d5d..c8c19f34f 100644 --- a/source/UOXJSPropertyFuncs.cpp +++ b/source/UOXJSPropertyFuncs.cpp @@ -343,7 +343,7 @@ JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsval id, js jsval amountNeeded = 0; jsval targColour = 0; JSObject *resources = JS_NewArrayObject( cx, 0, nullptr ); - for( size_t i = 0; i < resourcesNeeded.size(); i++ ) + for( auto i = 0; i < static_cast( resourcesNeeded.size() ); i++ ) { resEntry = resourcesNeeded[i]; amountNeeded = INT_TO_JSVAL( resEntry.amountNeeded ); @@ -356,17 +356,17 @@ JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsval id, js // Make a child object with all the supported resource IDs JSObject *idList = JS_NewArrayObject( cx, 0, nullptr ); - for( size_t j = 0; j < resEntry.idList.size(); j++ ) + for( auto j = 0; j < static_cast( resEntry.idList.size() ); j++ ) { jsval targId = INT_TO_JSVAL( resEntry.idList[j] ); - JS_SetElement( cx, idList, static_cast( j ), &targId ); + JS_SetElement( cx, idList, j, &targId ); } jsval idListVal = OBJECT_TO_JSVAL( idList ); JS_SetElement( cx, resource, 2, &idListVal ); // Now stuff the resource object into the parent object jsval resourceVal = OBJECT_TO_JSVAL( resource ); - JS_SetElement( cx, resources, static_cast( i ), &resourceVal ); + JS_SetElement( cx, resources, i, &resourceVal ); } *vp = OBJECT_TO_JSVAL( resources ); @@ -382,7 +382,7 @@ JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsval id, js jsval minSkill = 0; jsval maxSkill = 0; JSObject *skills = JS_NewArrayObject( cx, 0, nullptr ); - for( size_t i = 0; i < skillReqs.size(); i++ ) + for( auto i = 0; i < static_cast( skillReqs.size() ); i++ ) { resEntry = skillReqs[i]; skillNumber = INT_TO_JSVAL( resEntry.skillNumber ); @@ -397,7 +397,7 @@ JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsval id, js // Now stuff the skill object into the parent object jsval skillVal = OBJECT_TO_JSVAL( skill ); - JS_SetElement( cx, skills, static_cast( i ), &skillVal ); + JS_SetElement( cx, skills, i, &skillVal ); } *vp = OBJECT_TO_JSVAL( skills ); @@ -508,10 +508,10 @@ JSBool CItemProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp JSObject *scriptTriggersJS = JS_NewArrayObject( cx, 0, nullptr ); std::vector scriptTriggers = gPriv->GetScriptTriggers(); - for( size_t i = 0; i < scriptTriggers.size(); i++ ) + for( auto i = 0; i < static_cast( scriptTriggers.size() ); i++ ) { scriptId = INT_TO_JSVAL( scriptTriggers[i] ); - JS_SetElement( cx, scriptTriggersJS, static_cast( i ), &scriptId ); + JS_SetElement( cx, scriptTriggersJS, i, &scriptId ); } *vp = OBJECT_TO_JSVAL( scriptTriggersJS ); @@ -1519,10 +1519,10 @@ JSBool CCharacterProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsva JSObject *scriptTriggersJS = JS_NewArrayObject( cx, 0, nullptr ); std::vector scriptTriggers = gPriv->GetScriptTriggers(); - for( size_t i = 0; i < scriptTriggers.size(); i++ ) + for( auto i = 0; i < static_cast( scriptTriggers.size() ); i++ ) { scriptId = INT_TO_JSVAL( scriptTriggers[i] ); - JS_SetElement( cx, scriptTriggersJS, static_cast( i ), &scriptId ); + JS_SetElement( cx, scriptTriggersJS, i, &scriptId ); } *vp = OBJECT_TO_JSVAL( scriptTriggersJS ); @@ -2482,10 +2482,10 @@ JSBool CRegionProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval * JSObject *scriptTriggersJS = JS_NewArrayObject( cx, 0, nullptr ); std::vector scriptTriggers = gPriv->GetScriptTriggers(); - for( size_t i = 0; i < scriptTriggers.size(); i++ ) + for( auto i = 0; i < static_cast( scriptTriggers.size() ); i++ ) { scriptId = INT_TO_JSVAL( scriptTriggers[i] ); - JS_SetElement( cx, scriptTriggersJS, static_cast( i ), &scriptId ); + JS_SetElement( cx, scriptTriggersJS, i, &scriptId ); } *vp = OBJECT_TO_JSVAL( scriptTriggersJS ); diff --git a/source/items.cpp b/source/items.cpp index 27eff4b28..57ace36bc 100644 --- a/source/items.cpp +++ b/source/items.cpp @@ -946,7 +946,7 @@ auto cItem::CreateRandomItem( CItem *mCont, const std::string& sItemList, const // Loop through the items in the itemlist/lootlist int weightOfChosenItem = 0; - for( size_t j = 0; j < itemListSize; j++ ) + for( auto j = 0; j < static_cast( itemListSize ); j++ ) { auto csecs = oldstrutil::sections( oldstrutil::trim( oldstrutil::removeTrailing( ItemList->MoveTo( j ), "//" )), "|" ); if( csecs.size() == 2 ) @@ -958,11 +958,11 @@ auto cItem::CreateRandomItem( CItem *mCont, const std::string& sItemList, const // If we find another entry with same weight as the first one found, or if none have been found yet, add to list if( weightOfChosenItem == 0 || weightOfChosenItem == itemWeight ) { - itemEntryToSpawn = static_cast( j ); + itemEntryToSpawn = j; weightOfChosenItem = itemWeight; // Add the entry index to a temporary vector of all entries with same weight, then continue looking for more! - matchingEntries.push_back( static_cast( j ) ); + matchingEntries.push_back( j ); continue; } } diff --git a/source/mapstuff.cpp b/source/mapstuff.cpp index b47ea03ea..ce27cb30e 100644 --- a/source/mapstuff.cpp +++ b/source/mapstuff.cpp @@ -39,7 +39,7 @@ auto CMulHandler::LoadMapsDFN( const std::string &uodir ) -> std::mapCountOfEntries( maps_def ); std::map results; auto uopath = std::filesystem::path( uodir ); - for( size_t i = 0; i < entrycount; i++ ) + for( auto i = 0; i < static_cast( entrycount ); i++ ) { auto toFind = FileLookup->FindEntry( "MAP "s + std::to_string( i ), maps_def ); if( toFind == nullptr ) @@ -111,7 +111,7 @@ auto CMulHandler::LoadMapsDFN( const std::string &uodir ) -> std::map( i ), entry ); + results.insert_or_assign( i, entry ); } } return results; @@ -1965,12 +1965,12 @@ auto UltimaMap::ProcessEntry( [[maybe_unused]] std::size_t entry, std::size_t in { auto count = data.size() / 196; size_t block = ( static_cast( index ) * 0xC4000 ) / 196; - for( size_t i = 0; i < count; ++i ) + for( auto i = 0; i < static_cast( count ); ++i ) { auto ptr = data.data() + ( i * 196 ); if( block < _terrain.size() ) { - LoadTerrainBlock( static_cast( block ), ptr ); + LoadTerrainBlock( block, ptr ); } ++block; } From a05a3126b2b00dc2e067371da435d271f6da431a Mon Sep 17 00:00:00 2001 From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com> Date: Tue, 6 Dec 2022 20:39:12 -0600 Subject: [PATCH 04/24] Replaced spawn Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR. --- .../npc/npclists/npclists_t2a_lands.dfn | 6 +++++ .../felucca/spawn_felucca_world_lostlands.dfn | 26 ++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/data/dfndata/npc/npclists/npclists_t2a_lands.dfn b/data/dfndata/npc/npclists/npclists_t2a_lands.dfn index 1c6f44e3c..495ed663f 100644 --- a/data/dfndata/npc/npclists/npclists_t2a_lands.dfn +++ b/data/dfndata/npc/npclists/npclists_t2a_lands.dfn @@ -45,6 +45,12 @@ orcmage orclord } +[NPCLIST Location_Orc_Fort_Savages] +{ +savageshaman +savagewarrior +} + [NPCLIST Location_Terathan_Keep] { allterathans diff --git a/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn b/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn index addd28ebb..82b3d6ad0 100644 --- a/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn +++ b/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn @@ -64,12 +64,13 @@ CALL=5 [REGIONSPAWN 6204] { NAME=Location_Orc_Fort -NPCLIST=Location_Orc_Fort -MAXNPCS=25 -X1=5201 -Y1=3609 +//NPCLIST=Location_Orc_Fort +NPCLIST=Location_Orc_Fort_Savages +MAXNPCS=15 +X1=5200 +Y1=3610 X2=5229 -Y2=3627 +Y2=3628 WORLD=0 MINTIME=18 MAXTIME=20 @@ -256,4 +257,17 @@ MAXTIME=40 CALL=2 } -EOF \ No newline at end of file +[REGIONSPAWN 6217] +{ +NAME=Location_Around_Orc_Fort +NPC=savagerider +MAXNPCS=15 +X1=5162 +Y1=3585 +X2=5273 +Y2=3637 +WORLD=0 +MINTIME=18 +MAXTIME=20 +CALL=5 +} \ No newline at end of file From 472a6b3e845634082c5d6a71e3d2aaa86ae93be1 Mon Sep 17 00:00:00 2001 From: Geir Ove Alnes Date: Wed, 7 Dec 2022 21:10:59 +0800 Subject: [PATCH 05/24] Update source/UOXJSMethods.cpp Co-authored-by: Daniel Stratton --- source/UOXJSMethods.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UOXJSMethods.cpp b/source/UOXJSMethods.cpp index cd63b7224..57d3f8d3b 100644 --- a/source/UOXJSMethods.cpp +++ b/source/UOXJSMethods.cpp @@ -3674,7 +3674,7 @@ JSBool CBase_UseResource( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, sectionId = JS_GetStringBytes( JS_ValueToString( cx, argv[4] )); } - bool colorCheck = ( itemColour != -1 ? true : false ); + bool colorCheck = ( itemColour != -1 ); bool moreCheck = ( moreVal != -1 ? true : false ); UI32 retVal = 0; From eeeae604cd49197e5ae8c3225552327768aa100d Mon Sep 17 00:00:00 2001 From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com> Date: Wed, 7 Dec 2022 19:41:49 -0600 Subject: [PATCH 06/24] update to remove comment marks --- data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn | 1 - 1 file changed, 1 deletion(-) diff --git a/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn b/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn index 82b3d6ad0..a41f02491 100644 --- a/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn +++ b/data/dfndata/spawn/felucca/spawn_felucca_world_lostlands.dfn @@ -64,7 +64,6 @@ CALL=5 [REGIONSPAWN 6204] { NAME=Location_Orc_Fort -//NPCLIST=Location_Orc_Fort NPCLIST=Location_Orc_Fort_Savages MAXNPCS=15 X1=5200 From f625e6b6ee926c992244058c60153e195102498c Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 10 Dec 2022 01:18:55 +0800 Subject: [PATCH 07/24] Restructuring of Folder and file restructuring for Visual Studio, XCode and CMake project files Moving uox3.ico and uox3.rc out of source folder and into a separate assets folder --- {source => assets}/uox3.ico | Bin {source => assets}/uox3.rc | 0 {source => make/VS2017}/UOX3_Official.sln | 0 {source => make/VS2017}/UOX3_Official.vcxproj | 0 .../VS2017}/UOX3_Official.vcxproj.filters | 0 {vs2022 => make/VS2022}/readme-vs2022.txt | 0 {vs2022 => make/VS2022}/uox3.sln | 0 {vs2022 => make/VS2022}/uox3.vcxproj | 0 {vs2022 => make/VS2022}/uox3.vcxproj.filters | 0 .../XCode/uox3.xcodeproj}/project.pbxproj | 0 .../xcshareddata/xcschemes/uox3.xcscheme | 0 {source => make/cmake}/CMakeLists.txt | 204 +++++++++--------- .../{ => make/VS2017}/SpiderMonkey.sln | 0 spidermonkey/{ => make/VS2017}/js32.vcxproj | 0 .../{ => make/VS2017}/js32.vcxproj.filters | 0 .../{ => make/VS2017}/jskwgen.vcxproj | 0 .../{ => make/VS2017}/jskwgen.vcxproj.filters | 0 .../{vs2022 => make/VS2022}/jsengine.sln | 0 .../{vs2022 => make/VS2022}/jsengine.vcxproj | 0 .../VS2022}/jsengine.vcxproj.filters | 0 .../VS2017}/zlib-static.vcxproj | 0 .../VS2017}/zlib-static.vcxproj.filters | 0 .../VS2017}/zlib-static.vcxproj.user | 0 zlib/{ => make/VS2017}/zlib.sln | 0 zlib/{ => make/VS2022}/vs2022/zlib.sln | 0 zlib/{ => make/VS2022}/vs2022/zlib.vcxproj | 0 .../VS2022}/vs2022/zlib.vcxproj.filters | 0 zlib/{ => make/cmake}/CMakeLists.txt | 0 28 files changed, 102 insertions(+), 102 deletions(-) rename {source => assets}/uox3.ico (100%) rename {source => assets}/uox3.rc (100%) rename {source => make/VS2017}/UOX3_Official.sln (100%) rename {source => make/VS2017}/UOX3_Official.vcxproj (100%) rename {source => make/VS2017}/UOX3_Official.vcxproj.filters (100%) rename {vs2022 => make/VS2022}/readme-vs2022.txt (100%) rename {vs2022 => make/VS2022}/uox3.sln (100%) rename {vs2022 => make/VS2022}/uox3.vcxproj (100%) rename {vs2022 => make/VS2022}/uox3.vcxproj.filters (100%) rename {uox3.xcodeproj => make/XCode/uox3.xcodeproj}/project.pbxproj (100%) rename {uox3.xcodeproj => make/XCode/uox3.xcodeproj}/xcshareddata/xcschemes/uox3.xcscheme (100%) rename {source => make/cmake}/CMakeLists.txt (94%) rename spidermonkey/{ => make/VS2017}/SpiderMonkey.sln (100%) rename spidermonkey/{ => make/VS2017}/js32.vcxproj (100%) rename spidermonkey/{ => make/VS2017}/js32.vcxproj.filters (100%) rename spidermonkey/{ => make/VS2017}/jskwgen.vcxproj (100%) rename spidermonkey/{ => make/VS2017}/jskwgen.vcxproj.filters (100%) rename spidermonkey/{vs2022 => make/VS2022}/jsengine.sln (100%) rename spidermonkey/{vs2022 => make/VS2022}/jsengine.vcxproj (100%) rename spidermonkey/{vs2022 => make/VS2022}/jsengine.vcxproj.filters (100%) rename zlib/{zlib-static => make/VS2017}/zlib-static.vcxproj (100%) rename zlib/{zlib-static => make/VS2017}/zlib-static.vcxproj.filters (100%) rename zlib/{zlib-static => make/VS2017}/zlib-static.vcxproj.user (100%) rename zlib/{ => make/VS2017}/zlib.sln (100%) rename zlib/{ => make/VS2022}/vs2022/zlib.sln (100%) rename zlib/{ => make/VS2022}/vs2022/zlib.vcxproj (100%) rename zlib/{ => make/VS2022}/vs2022/zlib.vcxproj.filters (100%) rename zlib/{ => make/cmake}/CMakeLists.txt (100%) diff --git a/source/uox3.ico b/assets/uox3.ico similarity index 100% rename from source/uox3.ico rename to assets/uox3.ico diff --git a/source/uox3.rc b/assets/uox3.rc similarity index 100% rename from source/uox3.rc rename to assets/uox3.rc diff --git a/source/UOX3_Official.sln b/make/VS2017/UOX3_Official.sln similarity index 100% rename from source/UOX3_Official.sln rename to make/VS2017/UOX3_Official.sln diff --git a/source/UOX3_Official.vcxproj b/make/VS2017/UOX3_Official.vcxproj similarity index 100% rename from source/UOX3_Official.vcxproj rename to make/VS2017/UOX3_Official.vcxproj diff --git a/source/UOX3_Official.vcxproj.filters b/make/VS2017/UOX3_Official.vcxproj.filters similarity index 100% rename from source/UOX3_Official.vcxproj.filters rename to make/VS2017/UOX3_Official.vcxproj.filters diff --git a/vs2022/readme-vs2022.txt b/make/VS2022/readme-vs2022.txt similarity index 100% rename from vs2022/readme-vs2022.txt rename to make/VS2022/readme-vs2022.txt diff --git a/vs2022/uox3.sln b/make/VS2022/uox3.sln similarity index 100% rename from vs2022/uox3.sln rename to make/VS2022/uox3.sln diff --git a/vs2022/uox3.vcxproj b/make/VS2022/uox3.vcxproj similarity index 100% rename from vs2022/uox3.vcxproj rename to make/VS2022/uox3.vcxproj diff --git a/vs2022/uox3.vcxproj.filters b/make/VS2022/uox3.vcxproj.filters similarity index 100% rename from vs2022/uox3.vcxproj.filters rename to make/VS2022/uox3.vcxproj.filters diff --git a/uox3.xcodeproj/project.pbxproj b/make/XCode/uox3.xcodeproj/project.pbxproj similarity index 100% rename from uox3.xcodeproj/project.pbxproj rename to make/XCode/uox3.xcodeproj/project.pbxproj diff --git a/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme b/make/XCode/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme similarity index 100% rename from uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme rename to make/XCode/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme diff --git a/source/CMakeLists.txt b/make/cmake/CMakeLists.txt similarity index 94% rename from source/CMakeLists.txt rename to make/cmake/CMakeLists.txt index 2451dfb66..38ba37fb7 100644 --- a/source/CMakeLists.txt +++ b/make/cmake/CMakeLists.txt @@ -1,102 +1,102 @@ -add_library(uox - STATIC - CGump.cpp - boats.cpp - cSocket.cpp - items.cpp - speech.cpp - CJSEngine.cpp - books.cpp - cSpawnRegion.cpp - jail.cpp - ssection.cpp - CJSMapping.cpp - cAccountClass.cpp - cThreadQueue.cpp - lineofsight.cpp - targeting.cpp - CPacketReceive.cpp - cBaseobject.cpp - cVersionClass.cpp - magic.cpp - CPacketSend.cpp - cChar.cpp - cWeather.cpp - mapstuff.cpp - townregion.cpp - CResponse.cpp - cConsole.cpp - calcfuncs.cpp - movement.cpp - trade.cpp - Dictionary.cpp - cDice.cpp - cmdtable.cpp - msgboard.cpp - uox3.cpp - JSEncapsulate.cpp - cGuild.cpp - combat.cpp - network.cpp - cHTMLSystem.cpp - commands.cpp - npcs.cpp - vendor.cpp - ObjectFactory.cpp - cItem.cpp - cPlayerAction.cpp - pcmanage.cpp - weight.cpp - PartySystem.cpp - cMultiObj.cpp - dist.cpp - quantityfuncs.cpp - wholist.cpp - SEFunctions.cpp - effect.cpp - queue.cpp - worldmain.cpp - UOXJSMethods.cpp - cRaces.cpp - fileio.cpp - regions.cpp - UOXJSPropertyFuncs.cpp - cScript.cpp - findfuncs.cpp - scriptc.cpp - ai.cpp - cServerData.cpp - gumps.cpp - skills.cpp - archive.cpp - cServerDefinitions.cpp - house.cpp - sound.cpp - StringUtility.cpp - UOPData.cpp - MultiMul.cpp - IP4Address.cpp - TimeUtility.cpp - EventTimer.cpp - osunique.cpp -) - -target_include_directories(uox - PUBLIC - ${PROJECT_SOURCE_DIR}/spidermonkey - ${PROJECT_SOURCE_DIR}/zlib -) - -target_compile_definitions(uox - PRIVATE - _CRT_NO_VA_START_VALIDATION - $<$:_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH> - $<$:EXPORT_JS_API> -) - -target_link_libraries(uox - PUBLIC - js32 - zlibstatic - $<$:ws2_32> -) +add_library(uox + STATIC + CGump.cpp + boats.cpp + cSocket.cpp + items.cpp + speech.cpp + CJSEngine.cpp + books.cpp + cSpawnRegion.cpp + jail.cpp + ssection.cpp + CJSMapping.cpp + cAccountClass.cpp + cThreadQueue.cpp + lineofsight.cpp + targeting.cpp + CPacketReceive.cpp + cBaseobject.cpp + cVersionClass.cpp + magic.cpp + CPacketSend.cpp + cChar.cpp + cWeather.cpp + mapstuff.cpp + townregion.cpp + CResponse.cpp + cConsole.cpp + calcfuncs.cpp + movement.cpp + trade.cpp + Dictionary.cpp + cDice.cpp + cmdtable.cpp + msgboard.cpp + uox3.cpp + JSEncapsulate.cpp + cGuild.cpp + combat.cpp + network.cpp + cHTMLSystem.cpp + commands.cpp + npcs.cpp + vendor.cpp + ObjectFactory.cpp + cItem.cpp + cPlayerAction.cpp + pcmanage.cpp + weight.cpp + PartySystem.cpp + cMultiObj.cpp + dist.cpp + quantityfuncs.cpp + wholist.cpp + SEFunctions.cpp + effect.cpp + queue.cpp + worldmain.cpp + UOXJSMethods.cpp + cRaces.cpp + fileio.cpp + regions.cpp + UOXJSPropertyFuncs.cpp + cScript.cpp + findfuncs.cpp + scriptc.cpp + ai.cpp + cServerData.cpp + gumps.cpp + skills.cpp + archive.cpp + cServerDefinitions.cpp + house.cpp + sound.cpp + StringUtility.cpp + UOPData.cpp + MultiMul.cpp + IP4Address.cpp + TimeUtility.cpp + EventTimer.cpp + osunique.cpp +) + +target_include_directories(uox + PUBLIC + ${PROJECT_SOURCE_DIR}/spidermonkey + ${PROJECT_SOURCE_DIR}/zlib +) + +target_compile_definitions(uox + PRIVATE + _CRT_NO_VA_START_VALIDATION + $<$:_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH> + $<$:EXPORT_JS_API> +) + +target_link_libraries(uox + PUBLIC + js32 + zlibstatic + $<$:ws2_32> +) diff --git a/spidermonkey/SpiderMonkey.sln b/spidermonkey/make/VS2017/SpiderMonkey.sln similarity index 100% rename from spidermonkey/SpiderMonkey.sln rename to spidermonkey/make/VS2017/SpiderMonkey.sln diff --git a/spidermonkey/js32.vcxproj b/spidermonkey/make/VS2017/js32.vcxproj similarity index 100% rename from spidermonkey/js32.vcxproj rename to spidermonkey/make/VS2017/js32.vcxproj diff --git a/spidermonkey/js32.vcxproj.filters b/spidermonkey/make/VS2017/js32.vcxproj.filters similarity index 100% rename from spidermonkey/js32.vcxproj.filters rename to spidermonkey/make/VS2017/js32.vcxproj.filters diff --git a/spidermonkey/jskwgen.vcxproj b/spidermonkey/make/VS2017/jskwgen.vcxproj similarity index 100% rename from spidermonkey/jskwgen.vcxproj rename to spidermonkey/make/VS2017/jskwgen.vcxproj diff --git a/spidermonkey/jskwgen.vcxproj.filters b/spidermonkey/make/VS2017/jskwgen.vcxproj.filters similarity index 100% rename from spidermonkey/jskwgen.vcxproj.filters rename to spidermonkey/make/VS2017/jskwgen.vcxproj.filters diff --git a/spidermonkey/vs2022/jsengine.sln b/spidermonkey/make/VS2022/jsengine.sln similarity index 100% rename from spidermonkey/vs2022/jsengine.sln rename to spidermonkey/make/VS2022/jsengine.sln diff --git a/spidermonkey/vs2022/jsengine.vcxproj b/spidermonkey/make/VS2022/jsengine.vcxproj similarity index 100% rename from spidermonkey/vs2022/jsengine.vcxproj rename to spidermonkey/make/VS2022/jsengine.vcxproj diff --git a/spidermonkey/vs2022/jsengine.vcxproj.filters b/spidermonkey/make/VS2022/jsengine.vcxproj.filters similarity index 100% rename from spidermonkey/vs2022/jsengine.vcxproj.filters rename to spidermonkey/make/VS2022/jsengine.vcxproj.filters diff --git a/zlib/zlib-static/zlib-static.vcxproj b/zlib/make/VS2017/zlib-static.vcxproj similarity index 100% rename from zlib/zlib-static/zlib-static.vcxproj rename to zlib/make/VS2017/zlib-static.vcxproj diff --git a/zlib/zlib-static/zlib-static.vcxproj.filters b/zlib/make/VS2017/zlib-static.vcxproj.filters similarity index 100% rename from zlib/zlib-static/zlib-static.vcxproj.filters rename to zlib/make/VS2017/zlib-static.vcxproj.filters diff --git a/zlib/zlib-static/zlib-static.vcxproj.user b/zlib/make/VS2017/zlib-static.vcxproj.user similarity index 100% rename from zlib/zlib-static/zlib-static.vcxproj.user rename to zlib/make/VS2017/zlib-static.vcxproj.user diff --git a/zlib/zlib.sln b/zlib/make/VS2017/zlib.sln similarity index 100% rename from zlib/zlib.sln rename to zlib/make/VS2017/zlib.sln diff --git a/zlib/vs2022/zlib.sln b/zlib/make/VS2022/vs2022/zlib.sln similarity index 100% rename from zlib/vs2022/zlib.sln rename to zlib/make/VS2022/vs2022/zlib.sln diff --git a/zlib/vs2022/zlib.vcxproj b/zlib/make/VS2022/vs2022/zlib.vcxproj similarity index 100% rename from zlib/vs2022/zlib.vcxproj rename to zlib/make/VS2022/vs2022/zlib.vcxproj diff --git a/zlib/vs2022/zlib.vcxproj.filters b/zlib/make/VS2022/vs2022/zlib.vcxproj.filters similarity index 100% rename from zlib/vs2022/zlib.vcxproj.filters rename to zlib/make/VS2022/vs2022/zlib.vcxproj.filters diff --git a/zlib/CMakeLists.txt b/zlib/make/cmake/CMakeLists.txt similarity index 100% rename from zlib/CMakeLists.txt rename to zlib/make/cmake/CMakeLists.txt From 435686614a170027f7c1fb03f16b1e22560eca9a Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 10 Dec 2022 01:39:24 +0800 Subject: [PATCH 08/24] More moved/renamed files --- make/VS2017/{UOX3_Official.sln => uox3.sln} | 0 .../VS2017/{UOX3_Official.vcxproj.filters => uox3.vcproj.filters} | 0 make/VS2017/{UOX3_Official.vcxproj => uox3.vcxproj} | 0 spidermonkey/{ => make/VS2017}/fdlibm/fdlibm.vcxproj | 0 spidermonkey/{ => make/VS2017}/fdlibm/fdlibm.vcxproj.filters | 0 .../make/VS2017/{SpiderMonkey.sln => jscript/jscript.sln} | 0 .../make/VS2017/{js32.vcxproj => jscript/jscript.vcxproj} | 0 .../{js32.vcxproj.filters => jscript/jscript.vcxproj.filters} | 0 spidermonkey/make/VS2017/{ => jskwgen}/jskwgen.vcxproj | 0 spidermonkey/make/VS2017/{ => jskwgen}/jskwgen.vcxproj.filters | 0 spidermonkey/make/VS2022/{jsengine.sln => jscript.sln} | 0 spidermonkey/make/VS2022/{jsengine.vcxproj => jscript.vcxproj} | 0 .../VS2022/{jsengine.vcxproj.filters => jscript.vcxproj.filters} | 0 zlib/make/VS2017/{zlib-static.vcxproj => zlib.vcxproj} | 0 .../VS2017/{zlib-static.vcxproj.filters => zlib.vcxproj.filters} | 0 zlib/make/VS2017/{zlib-static.vcxproj.user => zlib.vcxproj.user} | 0 zlib/make/VS2022/{vs2022 => }/zlib.sln | 0 zlib/make/VS2022/{vs2022 => }/zlib.vcxproj | 0 zlib/make/VS2022/{vs2022 => }/zlib.vcxproj.filters | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename make/VS2017/{UOX3_Official.sln => uox3.sln} (100%) rename make/VS2017/{UOX3_Official.vcxproj.filters => uox3.vcproj.filters} (100%) rename make/VS2017/{UOX3_Official.vcxproj => uox3.vcxproj} (100%) rename spidermonkey/{ => make/VS2017}/fdlibm/fdlibm.vcxproj (100%) rename spidermonkey/{ => make/VS2017}/fdlibm/fdlibm.vcxproj.filters (100%) rename spidermonkey/make/VS2017/{SpiderMonkey.sln => jscript/jscript.sln} (100%) rename spidermonkey/make/VS2017/{js32.vcxproj => jscript/jscript.vcxproj} (100%) rename spidermonkey/make/VS2017/{js32.vcxproj.filters => jscript/jscript.vcxproj.filters} (100%) rename spidermonkey/make/VS2017/{ => jskwgen}/jskwgen.vcxproj (100%) rename spidermonkey/make/VS2017/{ => jskwgen}/jskwgen.vcxproj.filters (100%) rename spidermonkey/make/VS2022/{jsengine.sln => jscript.sln} (100%) rename spidermonkey/make/VS2022/{jsengine.vcxproj => jscript.vcxproj} (100%) rename spidermonkey/make/VS2022/{jsengine.vcxproj.filters => jscript.vcxproj.filters} (100%) rename zlib/make/VS2017/{zlib-static.vcxproj => zlib.vcxproj} (100%) rename zlib/make/VS2017/{zlib-static.vcxproj.filters => zlib.vcxproj.filters} (100%) rename zlib/make/VS2017/{zlib-static.vcxproj.user => zlib.vcxproj.user} (100%) rename zlib/make/VS2022/{vs2022 => }/zlib.sln (100%) rename zlib/make/VS2022/{vs2022 => }/zlib.vcxproj (100%) rename zlib/make/VS2022/{vs2022 => }/zlib.vcxproj.filters (100%) diff --git a/make/VS2017/UOX3_Official.sln b/make/VS2017/uox3.sln similarity index 100% rename from make/VS2017/UOX3_Official.sln rename to make/VS2017/uox3.sln diff --git a/make/VS2017/UOX3_Official.vcxproj.filters b/make/VS2017/uox3.vcproj.filters similarity index 100% rename from make/VS2017/UOX3_Official.vcxproj.filters rename to make/VS2017/uox3.vcproj.filters diff --git a/make/VS2017/UOX3_Official.vcxproj b/make/VS2017/uox3.vcxproj similarity index 100% rename from make/VS2017/UOX3_Official.vcxproj rename to make/VS2017/uox3.vcxproj diff --git a/spidermonkey/fdlibm/fdlibm.vcxproj b/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj similarity index 100% rename from spidermonkey/fdlibm/fdlibm.vcxproj rename to spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj diff --git a/spidermonkey/fdlibm/fdlibm.vcxproj.filters b/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj.filters similarity index 100% rename from spidermonkey/fdlibm/fdlibm.vcxproj.filters rename to spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj.filters diff --git a/spidermonkey/make/VS2017/SpiderMonkey.sln b/spidermonkey/make/VS2017/jscript/jscript.sln similarity index 100% rename from spidermonkey/make/VS2017/SpiderMonkey.sln rename to spidermonkey/make/VS2017/jscript/jscript.sln diff --git a/spidermonkey/make/VS2017/js32.vcxproj b/spidermonkey/make/VS2017/jscript/jscript.vcxproj similarity index 100% rename from spidermonkey/make/VS2017/js32.vcxproj rename to spidermonkey/make/VS2017/jscript/jscript.vcxproj diff --git a/spidermonkey/make/VS2017/js32.vcxproj.filters b/spidermonkey/make/VS2017/jscript/jscript.vcxproj.filters similarity index 100% rename from spidermonkey/make/VS2017/js32.vcxproj.filters rename to spidermonkey/make/VS2017/jscript/jscript.vcxproj.filters diff --git a/spidermonkey/make/VS2017/jskwgen.vcxproj b/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj similarity index 100% rename from spidermonkey/make/VS2017/jskwgen.vcxproj rename to spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj diff --git a/spidermonkey/make/VS2017/jskwgen.vcxproj.filters b/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj.filters similarity index 100% rename from spidermonkey/make/VS2017/jskwgen.vcxproj.filters rename to spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj.filters diff --git a/spidermonkey/make/VS2022/jsengine.sln b/spidermonkey/make/VS2022/jscript.sln similarity index 100% rename from spidermonkey/make/VS2022/jsengine.sln rename to spidermonkey/make/VS2022/jscript.sln diff --git a/spidermonkey/make/VS2022/jsengine.vcxproj b/spidermonkey/make/VS2022/jscript.vcxproj similarity index 100% rename from spidermonkey/make/VS2022/jsengine.vcxproj rename to spidermonkey/make/VS2022/jscript.vcxproj diff --git a/spidermonkey/make/VS2022/jsengine.vcxproj.filters b/spidermonkey/make/VS2022/jscript.vcxproj.filters similarity index 100% rename from spidermonkey/make/VS2022/jsengine.vcxproj.filters rename to spidermonkey/make/VS2022/jscript.vcxproj.filters diff --git a/zlib/make/VS2017/zlib-static.vcxproj b/zlib/make/VS2017/zlib.vcxproj similarity index 100% rename from zlib/make/VS2017/zlib-static.vcxproj rename to zlib/make/VS2017/zlib.vcxproj diff --git a/zlib/make/VS2017/zlib-static.vcxproj.filters b/zlib/make/VS2017/zlib.vcxproj.filters similarity index 100% rename from zlib/make/VS2017/zlib-static.vcxproj.filters rename to zlib/make/VS2017/zlib.vcxproj.filters diff --git a/zlib/make/VS2017/zlib-static.vcxproj.user b/zlib/make/VS2017/zlib.vcxproj.user similarity index 100% rename from zlib/make/VS2017/zlib-static.vcxproj.user rename to zlib/make/VS2017/zlib.vcxproj.user diff --git a/zlib/make/VS2022/vs2022/zlib.sln b/zlib/make/VS2022/zlib.sln similarity index 100% rename from zlib/make/VS2022/vs2022/zlib.sln rename to zlib/make/VS2022/zlib.sln diff --git a/zlib/make/VS2022/vs2022/zlib.vcxproj b/zlib/make/VS2022/zlib.vcxproj similarity index 100% rename from zlib/make/VS2022/vs2022/zlib.vcxproj rename to zlib/make/VS2022/zlib.vcxproj diff --git a/zlib/make/VS2022/vs2022/zlib.vcxproj.filters b/zlib/make/VS2022/zlib.vcxproj.filters similarity index 100% rename from zlib/make/VS2022/vs2022/zlib.vcxproj.filters rename to zlib/make/VS2022/zlib.vcxproj.filters From 34b918a852f2e49ffe356350c9a51a61610d02f7 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 10 Dec 2022 01:43:33 +0800 Subject: [PATCH 09/24] Couple more --- spidermonkey/make/VS2022/{ => jscript}/jscript.sln | 0 spidermonkey/make/VS2022/{ => jscript}/jscript.vcxproj | 0 spidermonkey/make/VS2022/{ => jscript}/jscript.vcxproj.filters | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename spidermonkey/make/VS2022/{ => jscript}/jscript.sln (100%) rename spidermonkey/make/VS2022/{ => jscript}/jscript.vcxproj (100%) rename spidermonkey/make/VS2022/{ => jscript}/jscript.vcxproj.filters (100%) diff --git a/spidermonkey/make/VS2022/jscript.sln b/spidermonkey/make/VS2022/jscript/jscript.sln similarity index 100% rename from spidermonkey/make/VS2022/jscript.sln rename to spidermonkey/make/VS2022/jscript/jscript.sln diff --git a/spidermonkey/make/VS2022/jscript.vcxproj b/spidermonkey/make/VS2022/jscript/jscript.vcxproj similarity index 100% rename from spidermonkey/make/VS2022/jscript.vcxproj rename to spidermonkey/make/VS2022/jscript/jscript.vcxproj diff --git a/spidermonkey/make/VS2022/jscript.vcxproj.filters b/spidermonkey/make/VS2022/jscript/jscript.vcxproj.filters similarity index 100% rename from spidermonkey/make/VS2022/jscript.vcxproj.filters rename to spidermonkey/make/VS2022/jscript/jscript.vcxproj.filters From 4ec12750b9d7c8c257e0eee31d36a923868d7af1 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 07:35:54 +0800 Subject: [PATCH 10/24] Updated a bunch of build-related files and docs, added some new ones Co-Authored-By: Charles Kerr --- .github/workflows/windows_x64_build.yml | 8 +- .gitignore | 178 ++- README.md | 244 ++-- assets/uox3.rc | 9 +- automake.sh | 100 +- docs/index.html | 480 ++++--- docs/jsdocs.html | 32 +- docs/styleguide.html | 404 ++++++ make/VS2017/uox3.sln | 2 +- make/VS2017/uox3.vcxproj | 387 ++--- ...x3.vcproj.filters => uox3.vcxproj.filters} | 320 ++--- make/VS2022/uox3.sln | 34 +- make/VS2022/uox3.vcxproj | 402 +++--- make/VS2022/uox3.vcxproj.filters | 814 ++++++----- make/XCode/uox3.xcodeproj/project.pbxproj | 1246 ++++++++--------- .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/uox3.xcscheme | 17 +- .../uox3.xcworkspace/contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + make/cmake/CMakeLists.txt | 330 +++-- spidermonkey/jsautocfg.h | 52 + spidermonkey/make/Spidermonkey.txt | 5 + spidermonkey/make/VS2017/fdlibm/fdlibm.sln | 31 + .../make/VS2017/fdlibm/fdlibm.vcxproj | 192 +-- .../make/VS2017/fdlibm/fdlibm.vcxproj.filters | 38 +- spidermonkey/make/VS2017/jscript/jscript.sln | 57 +- .../make/VS2017/jscript/jscript.vcxproj | 314 +++-- .../VS2017/jscript/jscript.vcxproj.filters | 154 +- spidermonkey/make/VS2017/jskwgen/jskwgen.sln | 51 + .../make/VS2017/jskwgen/jskwgen.vcxproj | 146 +- .../VS2017/jskwgen/jskwgen.vcxproj.filters | 14 +- spidermonkey/make/VS2022/fdlibm/fdlibm.sln | 31 + .../make/VS2022/fdlibm/fdlibm.vcxproj | 184 +++ .../make/VS2022/fdlibm/fdlibm.vcxproj.filters | 69 + spidermonkey/make/VS2022/jscript/jscript.sln | 30 +- .../make/VS2022/jscript/jscript.vcxproj | 272 ++-- .../VS2022/jscript/jscript.vcxproj.filters | 290 ++-- spidermonkey/make/VS2022/jskwgen/jskwgen.sln | 51 + .../make/VS2022/jskwgen/jskwgen.vcxproj | 166 +++ .../VS2022/jskwgen/jskwgen.vcxproj.filters | 33 + spidermonkey/make/cmake/CMakeLists.txt | 152 ++ zlib/README.md | 49 +- zlib/make/VS2017/zlib.sln | 2 +- zlib/make/VS2017/zlib.vcxproj | 52 +- zlib/make/VS2017/zlib.vcxproj.filters | 52 +- zlib/make/VS2022/zlib.sln | 20 +- zlib/make/VS2022/zlib.vcxproj | 177 ++- zlib/make/VS2022/zlib.vcxproj.filters | 100 +- zlib/make/XCode/Why-No-Project.txt | 2 + zlib/make/cmake/CMakeLists.txt | 311 +--- 51 files changed, 4856 insertions(+), 3281 deletions(-) create mode 100644 docs/styleguide.html rename make/VS2017/{uox3.vcproj.filters => uox3.vcxproj.filters} (60%) create mode 100644 make/XCode/uox3.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 make/XCode/uox3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 make/XCode/uox3.xcworkspace/contents.xcworkspacedata create mode 100644 make/XCode/uox3.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 spidermonkey/jsautocfg.h create mode 100644 spidermonkey/make/Spidermonkey.txt create mode 100644 spidermonkey/make/VS2017/fdlibm/fdlibm.sln create mode 100644 spidermonkey/make/VS2017/jskwgen/jskwgen.sln create mode 100644 spidermonkey/make/VS2022/fdlibm/fdlibm.sln create mode 100644 spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj create mode 100644 spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj.filters create mode 100644 spidermonkey/make/VS2022/jskwgen/jskwgen.sln create mode 100644 spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj create mode 100644 spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj.filters create mode 100644 spidermonkey/make/cmake/CMakeLists.txt create mode 100644 zlib/make/XCode/Why-No-Project.txt diff --git a/.github/workflows/windows_x64_build.yml b/.github/workflows/windows_x64_build.yml index c0d456ee6..a59d27084 100644 --- a/.github/workflows/windows_x64_build.yml +++ b/.github/workflows/windows_x64_build.yml @@ -15,12 +15,12 @@ jobs: runs-on: windows-latest steps: - name: checkout - uses: actions/checkout@v2 - - name: setupt msvc console + uses: actions/checkout@v3 + - name: setup msvc console uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: cmake and build run: | - cmake -G "NMake Makefiles" . - nmake + cmake make/cmake -DCMAKE_BUILD_TYPE=Release -G"NMake Makefiles" + cmake --build . --config Release diff --git a/.gitignore b/.gitignore index 1c5db1f17..e72241a64 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,14 @@ +# Project unique Items + +[Bb]uild/ + + + + +# Created by https://www.toptal.com/developers/gitignore/api/c++ +# Edit at https://www.toptal.com/developers/gitignore?templates=c++ + +### C++ ### # Prerequisites *.d @@ -31,6 +42,27 @@ *.out *.app +# End of https://www.toptal.com/developers/gitignore/api/c++ + + +# Created by https://www.toptal.com/developers/gitignore/api/macos,windows,linux +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,linux + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + ### macOS ### # General .DS_Store @@ -60,59 +92,9 @@ Network Trash Folder Temporary Items .apdisk -### Xcode ### -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -## Gcc Patch -/*.gcno - -### Xcode Patch ### -*.xcodeproj/* -!*.xcodeproj/project.pbxproj -!*.xcodeproj/xcshareddata/ -!*.xcworkspace/contents.xcworkspacedata -**/xcshareddata/WorkspaceSettings.xcsettings - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history -.ionide - -# Support for Project snippet scope -!.vscode/*.code-snippets +### macOS Patch ### +# iCloud generated files +*.icloud ### Windows ### # Windows thumbnail cache files @@ -140,11 +122,73 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk +# End of https://www.toptal.com/developers/gitignore/api/macos,windows,linux + + + + + +# Created by https://www.toptal.com/developers/gitignore/api/cmake,xcode,visualstudio,visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=cmake,xcode,visualstudio,visualstudiocode + +### CMake ### +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps + +### CMake Patch ### +# External projects +*-prefix/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Xcode ### +## User settings +xcuserdata/ + +## Xcode 8 and earlier +*.xcscmblueprint +*.xccheckout + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings + ### VisualStudio ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore # User-specific files *.rsuser @@ -349,9 +393,6 @@ PublishScripts/ *.nuget.props *.nuget.targets -# Nuget personal access tokens and Credentials -# nuget.config - # Microsoft Azure Build Output csx/ *.build.csdef @@ -440,6 +481,15 @@ node_modules/ # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts @@ -496,6 +546,9 @@ ASALocalRun/ # Local History for Visual Studio .localhistory/ +# Visual Studio History (VSHistory) files +.vshistory/ + # BeatPulse healthcheck temp database healthchecksdb @@ -509,14 +562,23 @@ MigrationBackup/ FodyWeavers.xsd # VS Code files for those working on multiple tools +*.code-workspace # Local History for Visual Studio Code # Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp # JetBrains Rider -.idea/ *.sln.iml ### VisualStudio Patch ### # Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/cmake,xcode,visualstudio,visualstudiocode + + diff --git a/README.md b/README.md index 0b2673c2f..dccd1a532 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ **Ultima Offline eXperiment 3** - the original open source Ultima Online server emulator, allowing people to run their own, custom UO shards since 1997. Comes with cross-platform 64-bit support for **Windows**, **Linux**, **macOS**, and **FreeBSD**. News, releases, forums, additional documentation and more can be found at https://www.uox3.org -Supported UO Client versions: **~4.0.0p** to **~7.0.91.15** (with encryption removed by [ClassicUO](https://www.classicuo.eu), [Razor](https://github.com/msturgill/razor/releases) or similar tools). For additional details on UO client compatibility, check https://www.uox3.org/forums/viewtopic.php?f=1&t=2289 +Supported UO Client versions: **~4.0.0p** to at least **~7.0.97.25** (with encryption removed by [ClassicUO](https://www.classicuo.eu), [Razor](https://github.com/msturgill/razor/releases) or similar tools). For additional details on UO client compatibility, check https://www.uox3.org/forums/viewtopic.php?f=1&t=2289 UOX3 relies on **SpiderMonkey v1.7.0** for its JS-based scripting engine, and on **zlib-1.2.11** for data compression matters, and comes bundled with specific, compatible versions of these. @@ -16,192 +16,146 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c --- # How to compile UOX3... -# ...under Linux, macOS, or FreeBSD -## Step 1: Clone the UOX3 Git Repository +## Step 1: Set up a Build Environment +*First, set up a proper build environment with the various tools needed to clone and compile UOX3.*
- Using git and Terminal - -First step, open a new terminal and enter the commands below: - -1) Install prerequisites: - - * **Linux:** `sudo apt install git` - This will install git if not already installed (Ubuntu/Debian-based Linux variants). If you're using a non-Debian flavour of Linux, use the default package manager that comes with it to install git instead. - - * **macOS:** `xcode-select --install` - This will install git if not already installed, along with required make and gcc tools - - * **FreeBSD:** `pkg install git gmake` - This will install git and gmake if not already installed. Alternatively, build `git` and `gmake` via ports if desired. - -2) `git clone https://github.com/UOX3DevTeam/UOX3.git` - This will clone the stable master branch of the UOX3 git repository into a subdirectory of the current directory you're in, named UOX3. The latest verified compatible version of SpiderMonkey (v1.7.0) is also included, as well as a minimal set of files required to compile zlib-1.2.11. - -
- Checking out Other Branches - - If you'd rather grab another branch of the git repository, like the **develop** branch where most updates get pushed first before being merged into the master branch, you can use the following command *after* completing the previous step: - `git checkout develop` + Install build tools -
+ > * **Windows** - Download and install [Community Edition of Visual Studio 2017 or 2022](https://visualstudio.microsoft.com/downloads/). + > * * Be sure to also install **Desktop development with C++** via the Visual Studio Installer, along with the individual component titled **VC++ 2017 version 15.9 v14.16 latest v141 tools** (VS2017) or **MSVC v143 - VS 2022 C++ x64/x86 build tools** (VS2022). CMake is included for command-line builds. + > * **Linux (Debian-based)** - Run `sudo apt install build-essentials cmake` in a Terminal: (or use your Linux distro's package manager) + > * **FreeBSD** - Run `pkg install cmake` in a Terminal. Alternatively, build `cmake` via ports if desired. + > * **macOS** - Download [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) (for building with an IDE) via the App Store, and/or [CMake](https://cmake.org/download/) (for command-line builds)
- (macOS alternative) GitHub Desktop - - 1) Download and install the macOS version of [GitHub Desktop](https://desktop.github.com/). - 2) Run GitHub Desktop and click **File->Clone Repository** from the menu. - 3) Click the **URL** tab, enter **https://github.com/UOX3DevTeam/UOX3.git**, then provide a local path for where you want the UOX3 git repository cloned on your drive. - 4) Hit the **Clone** button! + Install Git + > * **Windows/macOS** - Grab [GitHub Desktop](https://desktop.github.com) or your preferred git tool + > * **Linux** - Run `sudo apt install git` in a Terminal. + > * **FreeBSD** - Run `pkg install git` in a Terminal. Alternatively, build `git` via ports if desired.
-## Step 2: Compile UOX3 -
- Compiling with GNU Make and GCC (v9.x and above) or Clang - -You'll need a couple tools before you can compile UOX3 on Linux, like **GNU Make** (*v4.2.1* or higher recommended) and **gcc** (*v9.x* or higher recommended). Install these through your favourite package manager or through your flavour of Linux' variant of the following terminal command (example specific to Debian/Ubuntu Linux flavours): - -1) (Linux only) `sudo apt install build-essential` +--- -Once these are in place, navigate to the **UOX3** project folder in your terminal and execute the following command from the project's root directory: +## Step 2: Clone the UOX3 Git Repository +*Next up, clone the UOX3 git repository, which also includes the latest verified compatible version of SpiderMonkey (v1.7.0) and a minimal set of files required to compile zlib-1.2.11.* +
+ Using GitHub Desktop (Windows/macOS) -`./automake.sh` - First compiles the SpiderMonkey JS library bundled with UOX3, then compiles the included zlib library, and finally compiles the actual UOX3 build, before copying the compiled binary to the **root** UOX3 project directory. + > 1. Run GitHub Desktop and click **File->Clone Repository** from the menu. + > 2. Enter **https://github.com/UOX3DevTeam/UOX3.git** in the URL tab, and provide a local path for storing the cloned repo on your drive. + > 3. Hit the **Clone** button to clone the stable master branch of UOX3 to the specified local path
- Special note for users of Debian/GCC versions below 9.x + Using Command Line git - If your version of gcc is below 9.x, you'll need to add *-lstdc++fs* in *Makefile* to include the experimental filesystem library from c++17. - - Change the following line (~34) from - - `$(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS)` - - to - - `$(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS) -lstdc++fs` + > 1. Run `git clone https://github.com/UOX3DevTeam/UOX3.git` in a Terminal to clone the stable master branch of UOX3 into a subdirectory of the current directory you're in.
- Manual Instructions - - If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does): + (Optional) Checking out Other Branches - - `cd spidermonkey` - ### Linux ### - - `make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc` - - `ar -r libjs32.a Linux_All_DBG.OBJ/*.o` - - `cp Linux_All_DBG.OBJ/jsautocfg.h ./` - ### macOS ### - - `make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc` - - `libtool -static -o libjs32.a -s Darwin_DBG.OBJ/*.o` - - `cp Darwin_DBG.OBJ/jsautocfg.h ./` - ### FreeBSD ### - - `gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang` - - `ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o` - - `cp FreeBSD_DBG.OBJ/jsautocfg.h ./` + > If you'd rather grab another branch of the git repository, like the **develop** branch where most updates get pushed first before being merged into the master branch, you can use the following command *after* completing the previous step: + `git checkout develop` - *Next up, compile a static library of the included zlib package:* - - - `cd ../zlib` - - `make distclean` - - `./configure` - - `make` - - *At this point, now cd to the root UOX3 project directory and build UOX3:* - - - `cd ../source` - - `make` (`gmake` under FreeBSD) + > GitHub Desktop users can change the active branch via the *Current Branch* dropdown menu in GitHub Desktop.
--- -Once done compiling, you will find the compiled uox3 binary in the root UOX3 directory. You can copy this binary to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data subdirectory. - -**It is recommended** to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future. +## Step 3: Compile UOX3 +*Finally, compile UOX3 using the build environment you set up above.* + * **Windows** - Open *UOX3\make\VS2022\uox3.sln* (VS2022), choose *Release/Debug* from dropdown menu, and hit *Build -> Build UOX3* + * **Linux/FreeBSD** - Run `./automake.sh` in a Terminal, from the root of the cloned UOX3 repository. + * **macOS** - Open *UOX3/make/XCode/uox3/uox3.xcworkspace*, select *Build*
- Copying Required Files to Dedicated UOX3 Directory - -This is an example of how to copy all required files to a directory called UOX3 in your user account's home directory -1) *navigate to root UOX3 project directory* -2) `mkdir ~/UOX3` -3) `cp uox3 ~/UOX3` -4) `cp -r data/* ~/UOX3` -5) `cd ~/UOX3` - + Manual command-line instructions for CMake + + > If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal: + > - Navigate to root of cloned UOX3 git repository + > - `cd make/cmake` + > - `mkdir -p build` + > - `cd build` + > - `cmake .. -DCMAKE_BUILD_TYPE=Release` (Linux/FreeBSD) + > - `cmake .. -DCMAKE_BUILD_TYPE=Release` -G"Unix Makefiles" (macOS) + > - `cmake --build . --config Release`
-Once you have all the required files in place, you can follow the regular steps listed under **Installation and Setup > Configuring Your UOX3 Shard** in the UOX3 documentation (see docs folder, or visit https://www.uox3.org/docs/index.html#configureUOX3) to finish your UOX3 setup. - ---- - -# ...under Windows -## Step 1: Clone the UOX3 Git Repository -1) Download and install [GitHub Desktop](https://desktop.githubc.om). If you already have another tool for git installed, you can use that instead. -2) Run GitHub Desktop (or your preferred git tool) and click **File->Clone Repository** from the menu. -3) Click the **URL** tab, enter `https://github.com/UOX3DevTeam/UOX3.git`, then provide a local path for where you want the UOX3 git repository cloned on your drive. -4) Hit the **Clone** button to clone the stable master branch of the UOX3 git repository to the specified local path, along with the latest verified compatible version of SpiderMonkey (v1.7.0). - -## Step 2: Compile UOX3 -### Option A) Visual Studio 2017/2019 ([Free Community edition](https://visualstudio.microsoft.com/downloads/))
- Visual Studio 2017/2019 + Manual command-line instructions for GCC/make/gmake + + > If you'd rather use GCC (v9.x or higher)/make (GNU Make 4.2.1 or higher) than CMake, you can follow these manual steps. Note that for FreeBSD, this approach requires installing **gmake** as an alternative to *make*: `pkg install gmake` + + > First, navigate to **spidermonkey** directory and run these commands: + > `make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc` (Linux) + > `ar -r libjs32.a Linux_All_DBG.OBJ/*.o` (Linux) + > `cp Linux_All_DBG.OBJ/jsautocfg.h ./` (Linux) + > `gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang` (FreeBSD) + > `ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o` (FreeBSD) + > `cp FreeBSD_DBG.OBJ/jsautocfg.h ./` (FreeBSD) + + > Next, head to the **zlib** directory: + > `cd ../zlib` + > `make distclean` + > `./configure` + > `make` + + > Finally, head to **UOX3/source** directory: + > `cd ../source` + > `make` (Linux) + > `gmake` (FreeBSD) +
-*This option will let you use Visual Studio solution/project files to compile both UOX3 and SpiderMonkey with Visual Studio's default VC++ compiler. Note that you can download the [Free Community edition](https://visualstudio.microsoft.com/downloads/) of Visual Studio if you don't have it already. This approach also embeds SpiderMonkey directly inside UOX3 for a slightly larger (~1-2MB) executable, instead of requiring a separate DLL file, and comes with options for compiling either **32-bit** or **64-bit** (default) versions of UOX3.* +
+ Instructions for VS2017 -***Note:*** You'll need to install **"Desktop development with C++"** via the Visual Studio Installer if you don't have it already, along with the option for this titled **MSVC v141 - VS 2017 C++ x64/x86 build tools (v14.16)** + > When using VS2017, static libraries of the dependency projects (SpiderMonkey and zlib) need to be compiled first before UOX3 itself can be compiled UOX3 will work: -#### SpiderMonkey #### -1) Navigate to the **UOX3\spidermonkey** folder and open **SpiderMonkey.sln** in Visual Studio. -2) Make sure you have **js32** selected in the Solution Explorer, then select **Release** and either **x64** (64-bit) or **Win32** (32-bit) in the Solution Configuration/Platform dropdown menus -3) Click **Build > Build js32** from the menu. -4) Visual Studio will compile SpiderMonkey and create **spidermonkey\Release\x64** (64-bit) or **spidermonkey\Release\x86** (32-bit) folders with the compiled **js32.lib** library file contained within. No further actions are necessary here, so you can close the SpiderMonkey VS Solution. + > #### SpiderMonkey #### + > 1) Navigate to the **UOX3\spidermonkey\make\VS2017\jscript\** folder and open **jscript.sln** in VS2017. + > 2) Make sure you have **jscript** selected in the Solution Explorer, then select **Release** and **x64** (64-bit) in the Solution Configuration/Platform dropdown menus + > 3) Click **Build > Build jscript** from the menu. + > 4) Visual Studio will compile SpiderMonkey and create a **spidermonkey\make\VS2017\jscript\x64\Release\** (64-bit) folder with the compiled **jscript.lib** library file contained within. No further actions are necessary here, so you can close the SpiderMonkey VS Solution. -### zlib ### -1) Navigate to the **UOX3\zlib** folder and open **zlib.sln** in Visual Studio. -2) Select **Release** and either **x64** (64-bit) or **Win32** (32-bit) in the Solution Configuration/Platform dropdown menus -3) Click **Build > Build zlib-static** from the menu. -4) Visual Studio will compile zlib and create **zlib\x64\Release** (64-bit) or **zlib\x86\Release** (32-bit) folders with the compiled **zlib-static.lib** library file contained within. No further actions are necessary here, so you can close the zlib VS Solution. + > ### zlib ### + > 1) Navigate to the **UOX3\zlib\make\VS2017** folder and open **zlib.sln** in VS2017. + > 2) Select **Release** and **x64** (64-bit) in the Solution Configuration/Platform dropdown menus + > 3) Click **Build > Build zlib-static** from the menu. + > 4) Visual Studio will compile zlib and create a **zlib\x64\Release** (64-bit) folder with the compiled **zlib-static.lib** library file contained within. No further actions are necessary here, so you can close the zlib VS Solution. -#### UOX3 #### -1) Open **UOX3_Official.sln** from the **UOX3\source** folder. -2) Make sure you have **UOX3_Official** selected in the Solution Explorer, then select either **Release** or **Debug**, and either **x64** (64-bit) or **Win32** (32-bit) in the *Solution Configuration/Platform dropdown menus*, or via **Build -> Configuration Manager**. -3) Select **Build -> Build UOX3_Official** to start compiling UOX3. When done, you'll find **UOX3.exe** either in **UOX3\source\Release\x64** (or **\x86**) or in **UOX3\source\Debug\x64** (or **\86**), depending on your choices in the previous step. + > #### UOX3 #### + > 1) Navigate to the **UOX3\make\VS2017\** folder and open **uox3.sln** in VS2017. + > 2) Make sure you have **UOX3** selected in the Solution Explorer, then select **Release** and **x64** (64-bit) in the *Solution Configuration/Platform dropdown menus*, or via **Build -> Configuration Manager**. + > 3) Select **Build -> Build UOX3** to start compiling UOX3. When done, you'll find **UOX3.exe** in **UOX3\make\VS2017\Release\x64**.
- Adding SpiderMonkey/zlib references in Configuration Manager + (Troubleshooting) Adding SpiderMonkey/zlib references in Configuration Manager -If VS give you link errors when attempting to build UOX3, references to SpiderMonkey or zlib might have gone missing! Try the following steps to add them back. + > If VS give you link errors when attempting to build UOX3, references to SpiderMonkey or zlib might have gone missing! Try the following steps to add them back. -1) Right click on **UOX3_Official** in the Solution Explorer, and select Properties. -2) With the desired configuration (ex: Release, x64) selected at the top of the panel, add references to SpiderMonkey and zlib in these sections: - * *VC++ Directories >* **Include Directories** (add path to SpiderMonkey and zlib root folders) - * *VC++ Directories >* **Library Directories** (add path to SpiderMonkey **Release\x64** or **Release\x86** folder, as well as zlib **\x64\Release** or **\x86\Release** folder, depending on desired configuration) - * *VC++ Directories >* **Source Directories** (add path to SpiderMonkey and zlib root folders) - * *Linker >* **Additional Library Dependencies** (add path to SpiderMonkey **Release\x64** or **Release\x86** folder, as well as zlib **\x64\Release** or **\x86\Release** folder, depending on desired configuration) -Press apply! -Repeat process for both Release and Debug configurations (chosen at top of panel), then retry the UOX3 build process! + > 1) Right click on **UOX3_Official** in the Solution Explorer, and select Properties. + > 2) With the desired configuration (ex: Release, x64) selected at the top of the panel, add references to SpiderMonkey and zlib in these sections: + > * *VC++ Directories >* **Include Directories** (add path to SpiderMonkey and zlib root folders) + > * *VC++ Directories >* **Library Directories** (add path to **spidermonkey\make\VS2017\jscript\x64\Release** folder, as well as **zlib\make\VS2017\x64\Release** folder) + > * *VC++ Directories >* **Source Directories** (add path to SpiderMonkey and zlib root folders) + > * *Linker >* **Additional Library Dependencies** (add path to **spidermonkey\make\VS2017\jscript\x64\Release** folder, as well as **zlib\make\VS2017\x64\Release** folder) + > Press apply! + > Repeat process for both Release and Debug configurations (chosen at top of panel), then retry the UOX3 build process!
-### Option B) Visual Studio 2017/2019 and CMake ([Free Community edition](https://visualstudio.microsoft.com/downloads/)) -
- Visual Studio 2017/2019 and CMake - -*This option requires installing the Visual Studio toolset named **Linux development with C++** and the component called **Visual C++ tools for CMake and Linux**. Use the Visual Studio Installer to modify your install of Visual Studio if you don't already have these installed! This approach compiles SpiderMonkey to a separate DLL (**js32.dll**) file that needs to live inside the same folder as the main UOX3 executable, and currently only supports compiling a **32-bit** version of UOX3.* - -1) Start Visual Studio and use **File > Open > CMake** and select *CMakeLists.txt* in the root project folder (*Example: **D:\UOX3***). **Don't** open the similarly named file in the source folder directly. -2) After Visual Studio is done loading the project and has generated some necessary files, select **CMake > Change CMake Settings > UOX3** from the toolbar menu, and select either *x86-Debug* or *x86-Release* depending on what kind of build you want to make - or do this using the Solution Configuration select menu. -3) When Visual Studio is done switching to the new configuration, select **CMake > Build All** from the toolbar menu to start compiling UOX3. -4) When done, you'll find **uox3.exe** and **js32.dll** in a subfolder named **out** of the root project folder, more specifically **/UOX3/out/build/x86-Debug** or **x86-Release**, based on the selected configuration. -5) Note that the **js32.dll** file must be copied to the same folder as UOX3.exe. - -
- --- +## UOX3 Compiled! Now what? +Once done compiling, you can copy the compiled UOX3 binary/executable to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data subdirectory. Where you'll find the compiled UOX3 binary/executable depends on your platform and build method. Examples: + * **Windows** - Compiled UOX3.exe can be found in **UOX3/make/VS2022/x64/Release** + * **Linux/FreeBSD** - Compiled uox3 binary can be found in **root UOX3 repository** + * **macOS** - Compiled uox3 binary can be found in **UOX3\make\XCode\Build\Products\Release** -Once done compiling, you can copy your new **uox3.exe** (and if using CMake, **js32.dll**) file from the appropriate output folders (depending on which method and configuration you used) to the root folder of your actual UOX3 project. You'll also need to copy the files and folders contained within the **data** subfolder of the UOX3 repository, if you don't already have these. - -**It is recommended** to run your UOX3 shard from a separate, dedicated folder instead of the data folder in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future. +**It is recommended** to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future. -Once you have all the required files in place, you can follow the regular steps listed under **Installation and Setup > Configuring Your UOX3 Shard** in the UOX3 documentation (see docs folder, or visit https://www.uox3.org/docs/index.html#configureUOX3) to finish your UOX3 setup! +Once you have all the required files in place, you can follow the regular steps listed under **Installation and Setup > Configuring Your UOX3 Shard** in the UOX3 documentation (see docs folder, or visit https://www.uox3.org/docs/index.html#configureUOX3) to finish your UOX3 setup. \ No newline at end of file diff --git a/assets/uox3.rc b/assets/uox3.rc index d3cdf73d4..599a2e9cf 100644 --- a/assets/uox3.rc +++ b/assets/uox3.rc @@ -1,6 +1,5 @@ // Microsoft Visual C++ generated resource script. // -#include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -35,18 +34,14 @@ IDI_MAINFRAME ICON "uox3.ico" // TEXTINCLUDE // -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END -2 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "#include ""windows.h""\r\n" "\0" END -3 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "\r\n" "\0" diff --git a/automake.sh b/automake.sh index cde2cbb9f..06bd08d51 100755 --- a/automake.sh +++ b/automake.sh @@ -1,81 +1,47 @@ -#!/usr/bin/env sh - -echo "Building SpiderMonkey..." -cd spidermonkey -if [ "$(uname)" = "FreeBSD" ] +#!/bin/sh + +# Support optional argument: -b Debug/Release +buildtype="Release" +while getopts b: flag +do + case "${flag}" in + b) buildtype=${OPTARG};; + esac +done + +echo "Creating Build directory" +cd make/cmake +mkdir -p build +cd build + +echo "Creating Make Files" +if [ "$(uname)" = "Darwin" ] then - gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang -else - make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc -fi - -ev=$? -if [ $ev -ne 0 ]; then - echo "Unable to build SpiderMonkey! Exiting..." - exit $ev -else - echo "Done building SpiderMonkey." -fi - -echo "Creating JavaScript library..." -if [ "$(uname)" = "Darwin" ] # macOS -then - libtool -static -o libjs32.a -s Darwin_DBG.OBJ/*.o - cp Darwin_DBG.OBJ/jsautocfg.h ./ -elif [ "$(uname)" = "FreeBSD" ] -then - ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o - cp FreeBSD_DBG.OBJ/jsautocfg.h ./ -elif [ "$(expr substr $(uname -s) 1 5)" = "Linux" ] -then - # Linux - ar -r libjs32.a Linux_All_DBG.OBJ/*.o - cp Linux_All_DBG.OBJ/jsautocfg.h ./ -fi - -ev=$? -if [ $ev -ne 0 ]; then - echo "Unable to create JavaScript library! Exiting..." - exit $ev -else - echo "Done creating JavaScript library." + # Mac OS X + cmake .. -DCMAKE_BUILD_TYPE=$buildtype -G"Unix Makefiles" +else + cmake .. -DCMAKE_BUILD_TYPE=$buildtype fi -echo "Bulding zlib..." -cd ../zlib -make distclean -./configure && make +echo "Building UOX3 ($buildtype)..." +cmake --build . --config $buildtype ev=$? if [ $ev -ne 0 ]; then - echo "Unable to build zlib! Exiting..." - exit $ev -else - echo "Done building zlib." -fi - -echo "Building UOX3..." -cd ../source -if [ "$(uname)" = "FreeBSD" ] -then - gmake -else - make -fi - -ev=$? -if [ $ev -ne 0 ]; then - echo "Unable to build UOX3! Exiting..." - cd .. + echo "Unable to build UOX3 ($buildtype)! Exiting..." + cd ../../.. exit $ev else if [ -f ./uox3 ]; then - cp uox3 .. + cp uox3 ../../.. echo "Done! You should now find the compiled uox3 binary in the root UOX3 project directory. Copy this binary" echo "to a separate directory dedicated to running your UOX3 shard, along with the contents of the UOX3/data directory," - echo "to avoid potential git conflicts and accidental overwriting of data when pulling UOX3 updates in the future." + echo "to avoid potential git conflicts and accidental overwriting of data when pulling UOX3 updates in the future." + cd ../../.. + rm -R make/cmake/build/ + exit $ev else echo "uox3 program not found! Please review the build status." + cd ../../.. fi -fi -cd .. +fi \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 96d6fb542..683d41ce3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -22,12 +22,12 @@

UOX3 Documentation

-

Last Updated: 22. November, 2022

+

Last Updated: 11. December, 2022

Written for UOX3 Version: v0.99.6-RC1

@@ -60,6 +60,14 @@

UOX3 Documentation

+

December 11th, 2022

+ +

November 24th, 2022

+
    +
  • Updated UOX.INI Settings section with details on additional settings: BLOODDECAYTIMER, BLOODDECAYCORPSETIMER, CORESHARDERA, ARMORCALCULATION, STRENGTHDAMAGEBONUS, TACTICSDAMAGEBONUS, ANATOMYDAMAGEBONUS, LUMBERJACKDAMAGEBONUS, RACIALDAMAGEBONUS, DAMAGEBONUSCAP, SHIELDPARRY, WEAPONPARRY, WRESTLINGPARRY, COMBATHITCHANCE, GLOBALRESTOCKMULTIPLIER, SHOWREPUTATIONTITLEINTOOLTIP, SHOWGUILDINFOINTOOLTIP, SHOWNPCTITLESINTOOLTIPS, SHOWNPCTITLESOVERHEAD, SHOWINVULNERABLETAGOVERHEAD, SHOWRACEWITHNAME, SHOWRACEINPAPERDOLL, MAXPLAYERPACKWEIGHT, MAXPLAYERBANKWEIGHT, FORCENEWANIMATIONPACKET, CASTSPELLSWHILEMOVING
  • +

August 24th, 2022

  • Made it easier to find the Frequently Asked Questions section of the document
  • @@ -1025,8 +1033,8 @@

    The Community Discord

    Determines if support for the UOGateway Info Request Service is enabled.

-

CUOENABLED=0
- Determines if support for the ConnectUO Server Poll Packet request is enabled.

+

FREESHARDSERVERPOLL=0
+ Determines if support for the Freeshard Server Poll Packet request is enabled.

RANDOMSTARTINGLOCATION=0
@@ -1312,6 +1320,119 @@

The Community Discord

NPCFLAGUPDATETIMER=5
Interval in seconds between each time NPC flags are updated.

+
+

BLOODDECAYTIMER=3
+ Time in seconds it takes small blood splatter on ground spawned during combat to decay. Defaults to 3 seconds.

+
+
+

BLOODDECAYCORPSETIMER=210
+ Time in seconds it takes larger blood splatter on ground spawned upon death to decay. Defaults to half the duration of the default corpse decay timer.

+
+ + + + +
+

Supported era values: core, t2a, uor, td, lbr, pub15, aos, se, ml, sa, hs, tol
Note: A value of 'core' inherits whatever is set in CORESHARDERA

+
+

CORESHARDERA=pub15
+ Defines the "core" era of the shard. Defaults to pub15 (Publish 15).

+
    +
  • any - determines which Item/NPC DFNs gets loaded, based on tags like GETT2A, GETPUB15
  • +
  • uor or later - enables bonus hit chance for archery via ARCHERYHITBONUS setting
  • +
  • pub15 or earlier - final combat damage value reduced by half
  • +
+
+
+

ARMORCALCULATION=core
+ Defines era to base armor calculations on

+
    +
  • pub15 or earlier - different armor pieces contribute different percentage of the total Armor Rating
  • +
  • aos or later - each armor piece contribute to sum total of Physical Resistance, and other elemental resistance stats
  • +
+
+
+

STRENGTHDAMAGEBONUS=core
+ Defines era to base strength damage bonus on

+
    +
  • uor or earlier - 20% damage bonus based on strength, capped at 200 strength
  • +
  • td or later - 35% damage bonus based on strength if 100 strength or more, otherwise 30% damage bonus
  • +
+
+
+

TACTICSDAMAGEBONUS=core
+ Defines era to base tactics damage bonus on

+
    +
  • pub15 or earlier - bonus = Tactics skill + 50
  • +
  • aos or later - 68.75% damage bonus if GM Tactics, 62.5% bonus if below
  • +
+
+
+

ANATOMYDAMAGEBONUS=core
+ Defines era to base anatomy damage bonus on

+
    +
  • uor or earlier - bonus = Anatomy / 5 vs NPCs, Anatomy / 2.5 vs Players
  • +
  • td or later - 30% damage bonus at GM anatomy, up to 20% below GM
  • +
  • ml or later - 50% + 5 damage bonus at GM anatomy, up to 50% below GM
  • +
+
+
+

LUMBERJACKDAMAGEBONUS=core
+ Defines era to base lumberjacking damage bonus on

+
    +
  • uor or earlier - 35% damage bonus at GM skill, up to 25% below GM
  • +
  • td or later - 30% damage bonus at GM skill, up to 20% below GM
  • +
  • hs or later - 10% chance of 100% damage bonus
  • +
+
+
+

RACIALDAMAGEBONUS=core
+ Defines era to base racial damage bonus on

+
    +
  • sa or later - Gargoyles gain +15% damage bonus per each 20 HP lost
  • +
+
+
+

DAMAGEBONUSCAP=core
+ Defines era to base damage bonus cap on

+
    +
  • pub15 or earlier - No cap on damage bonus multiplier
  • +
  • aos or later - Total damage bonus multiplier capped at 300% higher than base damage
  • +
+
+
+

SHIELDPARRY=core
+ Defines era to base shield parry calculations on

+
    +
  • t2a - chance to block is parryskill / 2. shield absorbs damage equivalent of AR/2 for melee, or equivalent of AR for archery
  • +
  • uor to pub15 - higher AR equals lower block chance, but more damage absorbed.
  • +
  • aos or later - chance to block dependent on parry skill vs bushido skill, with dex modifier
  • +
+
+
+

WEAPONPARRY=core
+ Defines era to base weapon parry calculations on

+
    +
  • aos or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 16.6% chance weapon will take damage from parrying
  • +
  • ml or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 5% chance weapon will take damage from parrying, or 75% if opponent has mace
  • +
+
+
+

WRESTLINGPARRY=core
+ Defines era to base wrestling parry calculations on

+
    +
  • tol or later - From 12.5% chance (at GM wrestling, increases with higher skill) that an NPC will parry an attack
  • +
+
+
+

COMBATHITCHANCE=core
+ Defines era to base combat hit chance calculations on

+
    +
  • t2a to pub15 - hit chance based on attacker's skill vs defender's skill. No minimum chance to hit
  • +
  • uor to pub15 - Additional bonus hit chance for archery
  • +
  • aos to tol - hit chance based on attacker's skill (and hit chance increase) vs defender's skill (and defense chance increase). Minimum 2% chance to hit
  • +
+
@@ -1363,12 +1484,16 @@

The Community Discord

SELLBYNAME=0
- Determines if items are sold by their name, not just ID/Colour.

+ Determines if items are sold by their name, not just ID/Colour. Recommended to leave off.

SELLMAXITEMS=5
Maximum number of items that can be sold to a vendor at a time.

+
+

GLOBALRESTOCKMULTIPLIER=1
+ Global multiplier used to alter how many items NPC shopkeepers will restock. Defaults to 1, which means RESTOCK values in item definitions are taken at face value.

+

BANKBUYTHRESHOLD=2000
Defines the lower limit for when a purchase will withdraw money from bank instead of backpack

@@ -1492,6 +1617,35 @@

The Community Discord

BASICTOOLTIPSONLY=0
If enabled, tooltips will only show name and weight of items

+ +
+

SHOWREPUTATIONTITLEINTOOLTIP=1
+ If enabled, shows player's reputation title in tooltip. Defaults to 1

+
+
+

SHOWGUILDINFOINTOOLTIP=1
+ If enabled, shows player's guild info in tooltip. Defaults to 1

+
+
+

SHOWNPCTITLESINTOOLTIPS=1
+ If enabled, shows NPC titles in tooltip. Defaults to 1

+
+
+

SHOWNPCTITLESOVERHEAD=1
+ If enabled, shows NPC titles over their heads. Defaults to 1

+
+
+

SHOWINVULNERABLETAGOVERHEAD=1
+ If enabled, shows invulnerable tags over the head of characters. Defaults to 0

+
+
+

SHOWRACEWITHNAME=1
+ If enabled, shows a character's race along with their name. Defaults to 1

+
+
+

SHOWRACEINPAPERDOLL=1
+ If enabled, shows a character's race in the paperdoll. Defaults to 1

+

GLOBALITEMDECAY=1
Toggles decay on/off on a global scale. Does not remove decay flag from items, only stops them from decaying

@@ -1524,6 +1678,18 @@

The Community Discord

MAXPLAYERBANKITEMS=125
Sets max amount of items players can keep in their bank box.

+
+

MAXPLAYERPACKWEIGHT=40000
+ Sets max weight capacity in stones for player backpacks (including items in sub-containers). 40000 = 400.00 stones

+
+
+

MAXPLAYERBANKWEIGHT=160000
+ Sets max weight capacity in stones for player bankboxes (including items in sub-containers). 160000 = 1600.00 stones

+
+
+

FORCENEWANIMATIONPACKET=1
+ If enabled (default), forces the use of the new animation packet for playing various character animations for both NPCs in general and for player characters connected with client v7.0.0.0+

+

MAPDIFFSENABLED=0
If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default.

@@ -1927,6 +2093,10 @@

The Community Discord

HIDESTATSFORUNKNOWNMAGICITEMS=1
Toggles whether item stats for unidentified magic items are hidden from tooltips

+
+

CASTSPELLSWHILEMOVING=0
+ Toggles whether spells can be cast while moving, without ever having to stop!

+
@@ -4548,184 +4718,146 @@

Step 4 - Convert UOP Files to MUL

Compiling UOX3 Source
-

Follow the steps below for your preferred platform if you wish to download and compile the UOX3 source directly from GitHub yourself.

-

Windows Users

-

Step 1 - Clone the UOX3 Git Repository

- - -
-
    -
  1. Download and install GitHub Desktop. If you already have another tool for git installed, you can use that instead.
  2. -
  3. Run GitHub Desktop (or your preferred git tool) and click File->Clone Repository from the menu.
  4. -
  5. Click the URL tab, enter https://github.com/UOX3DevTeam/UOX3.git, then provide a local path for where you want the UOX3 git repository cloned on your drive.
  6. -
  7. Hit the Clone button to clone the stable branch of the UOX3 git repository to the specified local path, along with the latest verified compatible version of SpiderMonkey (v1.7.0).
  8. -
- - -
-

If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can click the Current branch dropdown menu in GitHub Desktop and select the branch you wish to check out. If you're out to do some code development, or just want to get at the latest possible changes, be sure to select the develop branch instead of the main/master one!

-
-
-

Step 2 - Compile UOX3

- - +

Follow the steps below for your preferred platform if you wish to download and compile the UOX3 source directly from GitHub yourself. These instructions are also available in UOX3's GitHub repository.

+ +

Step 1: Set up a Build Environment

+ First, setup a proper build environment with the various tools needed to clone and compile UOX3. + +
-

This option will let you use Visual Studio solution/project files to compile both UOX3, SpiderMonkey and zlib with Visual Studio's default VC++ compiler. Note that you can download the Free Community Edition of Visual Studio if you don't have it already. This approach also embeds SpiderMonkey directly inside UOX3 for a slightly larger (~1-2MB) executable, instead of requiring a separate DLL file, and comes with options for compiling either 32-bit or 64-bit (default) versions of UOX3.

-

Note: You'll need to install "Desktop development with C++" via the Visual Studio Installer if you don't have it already, along with the option for this titled MSVC v141 - VS 2017 C++ x64/x86 build tools (v14.16)

-

SpiderMonkey

-
    -
  1. Navigate to the UOX3\spidermonkey folder and open SpiderMonkey.sln in Visual Studio.
  2. -
  3. Make sure you have js32 selected in the Solution Explorer, then select Release and either x64 (64-bit) or Win32 (32-bit) in the Solution Configuration/Platform dropdown menus
  4. -
  5. Click Build > Build js32 from the menu.
  6. -
  7. Visual Studio will compile SpiderMonkey and create spidermonkey\Release\x64 (64-bit) or spidermonkey\Release\x86 (32-bit) folders with the compiled js32.lib library file contained within. No further actions are necessary here, so you can close the SpiderMonkey VS Solution.
  8. -
-

zlib

-
    -
  1. Navigate to the UOX3\zlib folder and open zlib.sln in Visual Studio.
  2. -
  3. Select Release and either x64 (64-bit) or Win32 (32-bit) in the Solution Configuration/Platform dropdown menus
  4. -
  5. Click Build > Build zlib-static from the menu.
  6. -
  7. Visual Studio will compile zlib and create zlib\x64\Release (64-bit) or zlib\x86\Release (32-bit) folders with the compiled zlib-static.lib library file contained within. No further actions are necessary here, so you can close the zlib VS Solution.
  8. -
-

UOX3

-
    -
  1. Open UOX3_Official.sln from the UOX3\source folder.
  2. -
  3. Make sure you have UOX3_Official selected in the Solution Explorer, then select either Release or Debug, and either x64 (64-bit) or Win32 (32-bit) in the Solution Configuration/Platform dropdown menus, or via Build -> Configuration Manager.
  4. -
  5. Select Build -> Build UOX3_Official to start compiling UOX3. When done, you'll find UOX3.exe in either UOX3\source\Release\x64 (or \x86) or UOX3\source\Debug\x64 (or \x86), depending on your choices in the previous step.
  6. -
- - -
-

If VS give you link errors when attempting to build UOX3, references to SpiderMonkey or zlib might have gone missing! Try the following steps to add them back.

-
    -
  1. Right click on UOX3_Official in the Solution Explorer, and select Properties.
  2. -
  3. With the desired configuration (ex: Release, x64) selected at the top of the panel, add references to SpiderMonkey and zlib in these sections:
  4. +
      +
    • Windows - Download and install Community Edition of Visual Studio 2017 or 2022.
        -
      • VC++ Directories > Include Directories (add path to SpiderMonkey and zlib root folders)
      • -
      • VC++ Directories > Library Directories (add path to SpiderMonkey Release\x64 or Release\x86 folder, as well as zlib \x64\Release or \x86\Release folder, depending on desired configuration) -
      • VC++ Directories > Source Directories (add path to SpiderMonkey and zlib root folder)
      • -
      • Linker > Additional Library Dependencies (add path to SpiderMonkey Release\x64 or Release\x86 folder, as well as zlib \x64\Release or \x86\Release , depending on desired configuration)
      • +
      • Be sure to also install Desktop development with C++ via the Visual Studio Installer, along with the individual component titled VC++ 2017 version 15.9 v14.16 latest v141 tools (VS2017) or MSVC v143 - VS 2022 C++ x64/x86 build tools (VS2022). CMake is included for command-line builds.
      -
    • Press apply!
    • -
    • Repeat process for both Release and Debug configurations (chosen at top of panel), then retry the UOX3 build process!
    • -
-
+
  • Linux (Debian-based) - Run sudo apt install build-essentials cmake in a Terminal: (or use your Linux distro's package manager)
  • +
  • FreeBSD - Run pkg install cmake in a Terminal. Alternatively, build cmake via ports if desired.
  • +
  • macOS - Download Xcode (for building with an IDE) via the App Store, and/or CMake (for command-line builds)
  • - - + +
    -

    This option requires installing the Visual Studio toolset named Linux development with C++ and the component called Visual C++ tools for CMake and Linux. Use the Visual Studio Installer to modify your install of Visual Studio if you don't already have these installed! This approach compiles SpiderMonkey to a separate DLL (js32.dll) file that needs to live inside the same folder as the main UOX3 executable, and currently only supports compiling a 32-bit version of UOX3.

    -
      -
    1. Start Visual Studio and use File > Open > CMake and select CMakeLists.txt in the root project folder (Example: D:\UOX3). Don't open the similarly named file in the source folder directly.
    2. -
    3. After Visual Studio is done loading the project and has generated some necessary files, select CMake > Change CMake Settings > UOX3 from the toolbar menu, and select either x86-Debug or x86-Release depending on what kind of build you want to make - or do this using the Solution Configuration select menu.
    4. -
    5. When Visual Studio is done switching to the new configuration, select CMake > Build All from the toolbar menu to start compiling UOX3.
    6. -
    7. When done, you'll find UOX3.exe and js32.dll in a subfolder named out of the root project folder, more specifically /UOX3/out/build/x86-Debug or x86-Release, based on the selected configuration.
    8. -
    9. Note that the js32.dll file must be copied to the same folder as UOX3.exe.
    10. -
    +
      +
    • Windows/macOS - Grab GitHub Desktop or your preferred git tool
    • +
    • Linux - Run sudo apt install git in a Terminal.
    • +
    • FreeBSD - Run pkg install git in a Terminal. Alternatively, build git via ports if desired.
    -

    Once this process is done, you can copy your new UOX3.exe (and if using CMake, js32.dll) file from the appropriate output folders (depending on which method and configuration you used) to the root folder of your actual UOX3 project. You'll also need to copy the files and folders contained within the data subfolder of the UOX3 repository, if you don't already have these.

    -

    It is recommended to run your UOX3 shard from a separate, dedicated folder instead of the data folder in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future.

    -

    Once you have all the files in place, you can follow the regular steps listed under Installation and Setup > Configuring Your UOX3 Shard to finish your UOX3 setup!

    -

    Linux/macOS Users

    -

    Step 1 - Clone the UOX3 Git Repository

    - - + +

    Step 2: Clone the UOX3 Git Repository

    + Next up, clone the UOX3 git repository, which also includes the latest verified compatible version of SpiderMonkey (v1.7.0) and a minimal set of files required to compile zlib-1.2.11. + +
    -

    First step, open a new terminal and enter the following commands: -

      -
    1. (Linux) sudo apt install git - This will install git if not already installed (Ubuntu/Debian-based Linux variants). If you're using a non-Debian flavour of Linux, use the default package manager that comes with it to install git instead.
    2. -
    3. (macOS) xcode-select --install - This will install git if not already installed, along with required make and gcc tools
    4. -
    5. git clone https://github.com/UOX3DevTeam/UOX3.git - This will clone the stable branch of the UOX3 git repository into a subdirectory of the current directory you're in, named UOX3. The latest verified compatible version of SpiderMonkey (v1.7.0) is also included, as well as a minimal set of files required to compile zlib-1.2.11.
    6. -
    - - -
    -

    If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can use the following command *after* completing the previous step: git checkout develop

    -
    +
      +
    • Run GitHub Desktop and click File->Clone Repository from the menu.
    • +
    • Enter https://github.com/UOX3DevTeam/UOX3.git in the URL tab, and provide a local path for storing the cloned repo on your drive.
    • +
    • Hit the Clone button to clone the stable master branch of UOX3 to the specified local path
    - - + +
    -
      -
    1. Download and install the macOS version of GitHub Desktop.
    2. -
    3. Run GitHub Desktop and click File->Clone Repository from the menu.
    4. -
    5. Click the URL tab, enter https://github.com/UOX3DevTeam/UOX3.git, then provide a local path for where you want the UOX3 git repository cloned on your drive.
    6. -
    7. Hit the Clone button!
    8. -
    +
      +
    • Run git clone https://github.com/UOX3DevTeam/UOX3.git in a Terminal to clone the stable master branch of UOX3 into a subdirectory of the current directory you're in.
    -

    Step 2 - Compile UOX3

    - - + + +
    +

    If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can use the following command after completing the previous step: git checkout develop

    +

    GitHub Desktop users can change the active branch via the Current Branch dropdown menu in GitHub Desktop.

    +
    + +

    Step 3: Compile UOX3

    + Finally, compile UOX3 using the build environment you setup above +
      +
    • Windows - Open UOX3\make\VS2022\uox3.sln (VS2022), choose Release/Debug from dropdown menu, and hit Build -> Build UOX3
    • +
    • Linux/FreeBSD - Run ./automake.sh in a Terminal, from the root of the cloned UOX3 repository.
    • +
    • macOS - Open UOX3/make/XCode/uox3/uox3.xcworkspace, select Build
    • +
    + +
    -

    You'll need a couple tools before you can compile UOX3 on Linux, like GNU Make (4.2.1 or higher recommended) and gcc (v9.x or higher recommended). Install these through your favourite package manager or through your flavour of Linux' variant of the following terminal command (specific to Debian/Ubuntu Linux flavours):

    +

    If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal:

      -
    • (Linux only) sudo apt install build-essential
    • +
    • Navigate to root of cloned UOX3 git repository
    • +
    • cd make/cmake
    • +
    • mkdir -p build
    • +
    • cd build
    • +
    • cmake .. -DCMAKE_BUILD_TYPE=Release (Linux/FreeBSD)
    • +
    • cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles" (macOS)
    • +
    • cmake --build . --config Release
    -

    Once these tools are in place, navigate to the UOX3 project directory in your terminal and execute the following commands from the project's root directory, in order:

    -
      -
    1. ./automake.sh - First compiles the SpiderMonkey JS library bundled with UOX3, then compiles the included zlib library, and finally compiles the actual UOX3 build, before copying the compiled binary to the root UOX3 project directory.
    2. -
    +
    - - + + +
    +

    If you'd rather use GCC (v9.x or higher)/make (GNU Make 4.2.1 or higher) than CMake, you can follow these manual steps. Note that for FreeBSD, this approach requires installing gmake as an alternative to make: pkg install gmake

    + +

    First, navigate to spidermonkey directory and run these commands:
    + make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc (Linux)
    + ar -r libjs32.a Linux_All_DBG.OBJ/*.o (Linux)
    + cp Linux_All_DBG.OBJ/jsautocfg.h ./ (Linux)
    + gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang (FreeBSD)
    + ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o (FreeBSD)
    + cp FreeBSD_DBG.OBJ/jsautocfg.h ./ (FreeBSD)

    + +

    Next, head to the zlib directory:
    + cd ../zlib
    + make distclean
    + ./configure
    + make

    + +

    Finally, head to UOX3/source directory:
    + cd ../source
    + make (Linux)
    + gmake (FreeBSD)

    + +
    -

    If your version of gcc is below 9.x, you'll need to add -lstdc++fs in Makefile to include the experimental filesystem library from c++17.:

    +

    If your version of gcc is below 9.x, you'll need to add -lstdc++fs in Makefile to include the experimental filesystem library from c++17.:

    Change the following line (~34) from
    $(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS)
    to
    $(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS) -lstdc++fs

    - - - -
    -

    If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does):

    -
      -
    • cd spidermonkey
    • -
    • make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc
    • -
    • Linux
    • -
        -
      • ar -r libjs32.a Linux_All_DBG.OBJ/*.o
      • -
      • cp Linux_All_DBG.OBJ/jsautocfg.h ./
      • -
      -
    • macOS
    • -
        -
      • ar rcs libjs32.a Darwin_DBG.OBJ/*.o
      • -
      • cp Darwin_DBG.OBJ/jsautocfg.h ./
      • -
      -
    • Next up, compile a static library of the included zlib package:
    • -
        -
      • cd ../zlib
      • -
      • make distclean
      • -
      • ./configure
      • -
      • make
      • -
      -
    • At this point, now cd to the root UOX3 project directory and build UOX3:
    • -
        -
      • cd ../source
      • -
      • make
      • -
      -
    -
    -

    Once this process is done, you will find the compiled uox3 binary in the root UOX3 directory. You can copy this binary to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data/ subdirectory.

    -

    It is recommended to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future.

    - - - + +
    -

    This is an example of how to copy all required files to a directory called UOX3 in your user account's home directory -

      -
    1. navigate to root UOX3 project directory
    2. -
    3. mkdir ~/UOX3
    4. -
    5. cp uox3 ~/UOX3
    6. -
    7. cp -r data/* ~/UOX3
    8. -
    9. cd ~/UOX3
    10. -

      +

      When using VS2017, static libraries of the dependency projects (SpiderMonkey and zlib) need to be compiled first before UOX3 itself can be compiled UOX3 will work:

      + +

      SpiderMonkey

      +
        +
      1. Navigate to the UOX3\spidermonkey\make\VS2017\jscript folder and open jscript.sln in VS2017.
      2. +
      3. Make sure you have jscript selected in the Solution Explorer, then select Release and x64 (64-bit) in the Solution Configuration/Platform dropdown menus
      4. +
      5. Click Build > Build jscript from the menu.
      6. +
      7. Visual Studio will compile SpiderMonkey and create a spidermonkey\make\VS2017\jscript\x64\Release (64-bit) folder with the compiled jscript.lib library file contained within. No further actions are necessary here, so you can close the SpiderMonkey VS Solution.
      8. +
      +

      zlib

      +
        +
      1. Navigate to the UOX3\zlib\make\VS2017 folder and open zlib.sln in VS2017.
      2. +
      3. Select Release and x64 (64-bit) in the Solution Configuration/Platform dropdown menus
      4. +
      5. Click Build > Build zlib-static from the menu.
      6. +
      7. Visual Studio will compile zlib and create a zlib\x64\Release (64-bit) folder with the compiled zlib-static.lib library file contained within. No further actions are necessary here, so you can close the zlib VS Solution.
      8. +
      +

      UOX3

      +
        +
      1. Navigate to the UOX3\make\VS2017 folder and open uox3.sln in VS2017.
      2. +
      3. Make sure you have UOX3 selected in the Solution Explorer, then select Release and x64 (64-bit) in the Solution Configuration/Platform dropdown menus, or via Build -> Configuration Manager.
      4. +
      5. Select Build -> Build UOX3 to start compiling UOX3. When done, you'll find UOX3.exe in UOX3\make\VS2017\Release\x64.
      6. +
    -

    Once you have all the files in place, you can follow the regular steps listed under Installation and Setup > Configuring Your UOX3 Shard to finish your UOX3 setup.

    -
    +

    UOX3 Compiled! Now what?

    +

    Once done compiling, you can copy the compiled UOX3 binary/executable to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data subdirectory. Where you'll find the compiled UOX3 binary/executable depends on your platform and build method. Examples:

    +
      +
    • Windows - Compiled UOX3.exe can be found in UOX3/make/VS2022/x64/Release
    • +
    • Linux/FreeBSD - Compiled uox3 binary can be found in root UOX3 repository
    • +
    • macOS - Compiled uox3 binary can be found in UOX3\make\XCode\Build\Products\Release
    • +
    +

    It is recommended to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future.

    +

    Once you have all the files in place, you can follow the regular steps listed under Installation and Setup > Configuring Your UOX3 Shard to finish your UOX3 setup!

    @@ -4746,8 +4878,8 @@

    Step 2 - Compile UOX3

    Any contributions that involve making changes to UOX3 can either be posted in the Submissions - Fixes & Improvements section of the UOX3.org forums, or can be submitted as a Pull Request on UOX3's GitHub page, for those familiar with that workflow. Do note that any such contributions will be reviewed for quality and fit with the project before being accepted and merged into the core UOX3 project.

    If it so happens, that your code or script contribution is not approved for inclusion in the core UOX3 project, you can still post it as custom additions/tweaks in other parts of the UOX3.org forums, for other users to download! Alternatively, if your changes are extensive enough, you can do what many others have done before you and branch off the main UOX3 project to create something entirely new and exciting!

    - +

    A Note about Coding Styles and Practices

    +

    Before venturing on a grand coding adventure, pause for a moment and take a peek at the UOX3 Style Guide for Code (WIP). Sticking closely to the guidelines in that document increases the chance that one's code submissions can be included/merged into the main UOX3 codebase, and also helps ensure that all (new, if not all old) code follows a consistent style. This makes it easier to read and understand the codebase.

    @@ -5273,6 +5405,10 @@

    Available NPC AI types

    Passive AI that doesn't fight back or react to being attacked.

    8 - AI_BANKER
    Bankers give players access to their bank boxes when saying the word "bank" nearby. Tip: This can also be used on players to ALWAYS give them access to their bankbox ;)

    +

    10 - AI_CASTER
    + Same as AI_FIGHTER, but will try to stay at casting range.

    +

    11 - AI_EVIL_CASTER
    + Same as AI_EVIL, but will try to stay at casting range.

    17 - AI_PLAYERVENDOR
    Used by playervendors placed by players at their houses to sell items to other players.

    32 - AI_PET_GUARD
    @@ -6430,6 +6566,10 @@

    Manage Event Decorations

    def=[defense] or [lowdef highdef]
    Set Physical-resist/defense value - either fixed or random range

    +
    +

    defbonus=[minDefenseBonus maxDefenseBonus]
    + Set defense/physical resistance bonus applied on top of standard def (maxDefenseBonus is optional, but if specified, randomizes). Should be applied after the def tag.

    +

    detectinghidden=[skillpoints] or [lowskill highskill]
    Set Detecting Hidden skill (0 - 1000)

    @@ -6446,6 +6586,10 @@

    Manage Event Decorations

    elementresist=[fire cold energy poison]
    Set Element-resist stats (0 - 1000 for each stat)

    +
    +

    erbonus=[fire cold energy poison]
    + Set elemental resistance bonus applied on top of standard elementresist. Should be applied after the elementresist tag.

    +

    emotecolour=[color]
    Set the default colour (in hex or decimal) for the NPC's emote text

    @@ -6526,6 +6670,10 @@

    Manage Event Decorations

    get=[npcSectionID]
    Inherit properties from NPC defined by npcSectionID in NPC DFNs

    +
    +

    gett2a/gettd/getuor/getlbr/getpub15/getaos/getse/getml/getsa/gettol=[npcSectionID]
    + Inherit properties from NPC defined by npcSectionID in NPC DFNs, based on selected era in expansion settings of uox.ini

    +

    gold=[gold] or [mingold maxgold]
    Set the amount of gold this NPC carries - either fixed or random range

    @@ -7021,6 +7169,10 @@

    Manage Event Decorations

    def=[defense]
    Set physical resist/armor rating value of item. Primarily used with wearables like clothes, armour, etc.

    +
    +

    defbonus=[minDefenseBonus maxDefenseBonus]
    + Set defense/physical resistance bonus applied on top of standard def (maxDefenseBonus is optional, but if specified, randomizes). Should be applied after the def tag.

    +

    dex=[statpoints]
    Minimum dexterity required to equip item

    @@ -7049,10 +7201,18 @@

    Manage Event Decorations

    elementresist=[fire cold energy poison]
    Set fire, cold, energy and poison resistance values (0 - 1000, where 1000 = 100.0)

    +
    +

    erbonus=[fire cold energy poison]
    + Set elemental resistance bonus applied on top of standard elementresist. Should be applied after the elementresist tag.

    +

    get=[itemSectionID]
    Inherit properties of item with specified itemSectionID from item DFNs

    +
    +

    gett2a/gettd/getuor/getlbr/getpub15/getaos/getse/getml/getsa/gettol=[itemSectionID]
    + Inherit properties from Item defined by itemSectionID in Item DFNs, based on selected era in expansion settings of uox.ini

    +

    glow=[0/1]
    Attaches a hidden lightsource to the item to make it appear to glow

    diff --git a/docs/jsdocs.html b/docs/jsdocs.html index c453910c2..7d2241ef2 100644 --- a/docs/jsdocs.html +++ b/docs/jsdocs.html @@ -23,7 +23,7 @@

    UOX3 JS Engine Docs

    @@ -4041,7 +4041,7 @@

    January 9th, 2022

    Prototype

    -

    function onTooltip( myObject )

    +

    function onTooltip( myObject, pSocket )

    Purpose

    @@ -4054,7 +4054,7 @@

    January 9th, 2022

    Example of usage

    // Display remaining uses left in a tooltip, based on item's UsesLeft tag
    -function onTooltip( myObj )
    +function onTooltip( myObj, pSocket )
     {
     	var tooltipText = "";
     	var usesLeft = myObj.GetTag( "UsesLeft" );
    @@ -8740,7 +8740,7 @@ 

    January 9th, 2022

    Purpose

    -

    Get/Set the time in milliseconds until specified timer expires for a Character object

    +

    Get a timestamp for when timer will run out, or set the time in milliseconds until specified timer expires for a Character object

    Notes

    @@ -8755,7 +8755,7 @@

    January 9th, 2022

    Timer.SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt Timer.SPELLRECOVERYTIME // Time until player has recovered from casting a spell Timer.ANTISPAM // Time until next speech message can be sent (for anti spam purposes) -Timer.CRIMFLAG // Time until criminal flag runs out +Timer.CRIMFLAG // Time until criminal flag runs out (should be set after criminal flag itself) Timer.MURDERRATE // Time until next murder count decay Timer.PEACETIMER // Time until character can re-enter combat after being affected by peacemaking Timer.FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles @@ -8773,10 +8773,12 @@

    January 9th, 2022

    Example of usage

    -
    // Get remaining time in milliseconds before criminal flag expires
    -var criminalTimer = myChar.GetTimer( Timer.CRIMFLAG );
    +										
    // Get a timestamp for when criminal flag expires, and spit out milliseconds left
    +var criminalTimestamp = myChar.GetTimer( Timer.CRIMFLAG );
    +myChar.TextMessage(( myTarget.GetTimer( Timer.CRIMFLAG ) - GetCurrentClock() ).toString() );
     
    -// Set time from now in milliseconds that criminal flag will last
    +// Set time from now in milliseconds that criminal flag will last, after making character a criminal
    +myChar.criminal = true;
     myChar.SetTimer( timer.CRIMFLAG, 3000 );
    @@ -10478,7 +10480,7 @@

    January 9th, 2022

    Purpose

    -

    Adds a gump on the current gump (ie any image in the gumps part of InsideUO). A fourth parameter - hue - is optional, and can be used to set the color of the gump.

    +

    Adds a gump on the current gump (ie any image in the Gumps-tab of a tool like UOFiddler). A fourth parameter - hue - is optional, and can be used to set the color of the gump.

    Example of usage

    @@ -10499,7 +10501,7 @@

    January 9th, 2022

    Purpose

    -

    Adds a gump on the current gump (ie any image in the gumps part of InsideUO). Same as AddGump, but with an additional parameter for hue/color.

    +

    Adds a gump on the current gump (ie any image in the Gumps-tab of a tool like UOFiddler). Same as AddGump, but with an additional parameter for hue/color.

    Example of usage

    @@ -12977,8 +12979,10 @@

    January 9th, 2022

    Example of usage

    -
    // Get remaining time in milliseconds until next time player can use an object
    -var objectDelay = mySock.GetTimer( Timer.SOCK_OBJDELAY );
    +										
    // Get timestamp for when player can next use an object, and spit out remaining time in milliseconds
    +Get a timestamp for when criminal flag expires, and spit out milliseconds left
    +var objectDelayTimestamp = myChar.GetTimer( Timer.SOCK_OBJDELAY );
    +myChar.TextMessage(( myTarget.GetTimer( Timer.SOCK_OBJDELAY ) - GetCurrentClock() ).toString() );
     
     // Set time from now in milliseconds until next time player can use another item
     mySock.SetTimer( timer.SOCK_OBJDELAY, 3000 );
    @@ -13529,7 +13533,7 @@

    Flag/Boolean Types

    .criminal (bool, true/false)
    - Get/Set whether the character is flagged as a criminal

    + Get/Set whether the character is flagged as a criminal. If set to true, default criminal timer is applied, as defined in the uox.ini setting CRIMINALTIMER. Can override with .SetTimer( Timer.CRIMFLAG, timeInMilliseconds ) after flag has already been set to true.

    .dead (bool, true/false)
    @@ -13549,7 +13553,7 @@

    Flag/Boolean Types

    .innocent (bool, true/false)
    - Get/Set whether character is flagged as innocent

    + Get/Set whether character is flagged as innocent. If set to false, default criminal timer is applied, as defined in the uox.ini setting CRIMINALTIMER.

    .isAwake (bool, true/false)
    diff --git a/docs/styleguide.html b/docs/styleguide.html new file mode 100644 index 000000000..5bd878d1e --- /dev/null +++ b/docs/styleguide.html @@ -0,0 +1,404 @@ + + + + + + + + + + UOX3 Style Guide for Code + + +

    +
    +
    + +
    + +

    UOX3 Style Guide

    +
    +
    + + + +
    +

    Last Updated: 24. November, 2022

    +

    UOX3 Version: v0.99.6-RC1

    +
    + +
    + + +
    +
      +
    • About this Style Guide

    • + +
    • + Latest Updates +
      +
      +

      This section contains the latest notable updates made to the style guide.

      + + +
      +

      November 24th, 2022

      +
        +
      • Initial version of document completed
      • +
      +
      +
      +
      +
    • + +
    • + Purpose of This Style Guide +
      +
      +

      This style provides a common, shared set of (lightweight) guidelines for anyone who wishes to contribute source code and/or scripts to the UOX3 project, in order to help ensure that those contributions follow a standardized approach not only for code style, but also for conventions and practices used in the project. This also improves the maintainability of the project in the future.

      +

      The UOX3 code base has historically been a hodgepodge of different styles and approaches, written by people with varying programming skills over a period of more than 20 years, and that history highlights the need for a standard that can be followed when working on the project.

      +

      These guidelines are not meant to be understood as hard requirements, yet the closer to the guidelines that new contributions adhere to, the easier it will be to review any changes in context of the current code base and - if accepted - merge those contributions in.

      +
      +
      +
    • + +
    + +
      +
    • Basic Style Guide

    • +
    • + General Guidelines +
      +
      +

      Above all else, please take to heart the general guidelines listed below and follow them as best you can:

      +
        +
      • Write understandable, self-documenting code - Give sensible, descriptive names to classes, functions and variables that clarify their purpose, rather than short and ambiguous names that say nothing about what they are for.
      • +
      • Add comments where needed - Use comments to leave hints for the reader of your code if the code is not self-explanatory for the average programmer. If the code you write is so advanced and complex that no one else can understand it by reading it, then comments are crucial for anyone else to be able to maintain it if/once you've lost interest in the project and moved on (as happens).
      • +
      • Be consistent with existing code - Make life easy for anyone who needs to read or maintain your code in the future, by adopting the coding style, conventions and practices most commonly used in the project. If the existing code offers two alternatives on how to proceed in this context, choose one of the two; don't introduce a third option.
      • +
      • Avoid making unnecessary, sweeping style changes - If possible, avoid making sweeping changes throughout the entire code base that forces everyone else to adopt your own preferred style. Not only is it quite an assumption to make that everyone else on the project will prefer your style, it may also cause problems for anyone who wishes to merge their code changes with yours; instead of comparing differences in a few functions in a few files, they now potentially have thousands of differences to go through!
      • +
      • If unsure, ask - If you're unsure if a change would conflict with the guidelines laid out in this Style Guide, don't hesitate to bring it up in Discord or on the UOX3 Community forums to get a second opinion - preferably before you make the change!
      • +
      +

      If you have identified a need for a change that conflicts with the above points, or with anything else in this Style Guide, create a new topic on the Communtiy Forums and state your case, or bring it up in the Discord chat. None of these "rules" are etched in stone, they can (and should) be challenged, updated and added to when appropriate.

      +
      +
      +
    • + +
    • + C++ Target Versions +
      +
      +

      Currently, any new code written for UOX3 should target C++11 to C++17, and aim to be cross-platform conforming across Windows, Linux and macOS platforms, when compiled using VS2017-2022, GCC/G++ v8-9 and/or CMake v?. Avoid using features specific to C++20 or newer, to not introduce additional compiler dependencies and requirements.

      + +
      +
      +
    • + +
    • + Cross-Platform Support +
      +
      +

      UOX3 aims to be cross-platform conformant across (at least) 64-bit Windows, Linux and macOS platforms, with feature parity between each platform. Implementations specific to any one particular platform should be avoided if possible, though there might be exceptions for special cases where platform-specific handling is unavoidable - such as when dealing with console and/or networking.

      +

      Any code being contributed that does not compile, run and function the same on all the above-mentioned platforms will probably not be approved for inclusion in UOX3 until/unless necessary changes have been made to comply with the above.

      +
      +
      +
    • + +
    • + Naming Conventions +
      +
      +

      Use Self-Descriptive Names

      +

      Always prefer self-descriptive names (skillUsageDelay instead of skUseDel, itemCount instead of ic)

      +

      Filenames

      +

      If creation of new source files is necessary, use camelCase when naming the files to make the name more readable in a list of other, perhaps similarly named files. Try to stick close to existing naming practice.

      +

      Classes/Methods/Functions

      +

      Use PascalCase for class/function/method names.

      +

      Variables and Parameters

      +

      Use camelCase for variables, non-method class/struct members and function/method parameters.

      +
      +
      +
    • +
    + +
      +
    • Advanced Style Guide

    • + +
    • + Comments and Comment Blocks +
      +
      +

      Function/Method Comment Blocks

      +

      This Style Guide makes no differentiation between functions and methods for the purpose of comment blocks.

      +
        +
      • Comment blocks should be added for any new functions or methods added, should describe the purpose of the function/method and provide any extra context that is relevant for future maintainers of the code. For the sake of making the maintenance of comments more manageable, adopt a minimalistic approach where only relevant details are included:
      • +
        //o-----------------------------------------------------------------------------------------------o
        +//| Function	-	CSocket::AddTrigWord()
        +//o-----------------------------------------------------------------------------------------------o
        +//| Purpose		-	Adds trigger word to list of trigger words detected in player's speech
        +//o-----------------------------------------------------------------------------------------------o
        +
      • Getters/setters that have been grouped together should be commented together, where possible:
      • +
        //o-----------------------------------------------------------------------------------------------o
        +//| Function	-	CSocket::TargetOK()
        +//o-----------------------------------------------------------------------------------------------o
        +//| Purpose		-	Gets/Sets socket property to indicate whether waiting for client target
        +//o-----------------------------------------------------------------------------------------------o
        +auto CSocket::TargetOK( void ) const -> bool
        +{
        +	return targetok;
        +}
        +auto CSocket::TargetOK( bool newValue ) -> void
        +{
        +	targetok = newValue;
        +}
        +
      +

      General Comments

      +
        +
      • Pay attention to grammar, spelling and punctuation, even in comments
      • +
      • Variables in general should have names that are descriptive enough that they'd not need comments, but if comments are needed - add them!
      • +
      • For global variables, try to always add a comment to explain what it's used for, and potentially why it needs to be a global variable
      • +
      • Don't remove comments added by other maintainers unless the comments in question are no longer relevant/accurate
      • +
      • If the use of magic numbers is necessary, add context for the magic number via comments
      • +
      • When deciding what to comment or not, try to think from the perspective of people maintaining the code after you're gone. Is it likely that someone will need some extra context to understand your code? Add a comment.
      • +
      +
      +
      +
    • + +
    • + Const +
      +
      +
        +
      • Make liberal use of const. Any member function that does not modify its object should be const. Any function parameter that references an object, but doesn't actually change it, should be passed as a const reference.
      • +
      • For function parameters passed by value, const has no effect on the caller, and is not needed
      • +
      • When declaring something as const, follow this pattern: const int *foo (const comes first)
      • +
      +
      +
      +
    • + +
    • + Functions +
      +
      +

      Write Short Functions

      +
        +
      • Write short functions, whenever possible. Sometimes it makes sense for a function to be a bit longer, but if the code in a function exceeds ~40 lines, start thinking about whether it could be broken up.
      • +
      • Short functions are easier to read, easier to test, easier to debug, and easier to modify.
      • +
      +
      +
      +
    • + +
    • + Getters and Setters +
      +
      +
        +
      • Group getters and setters for class members together in pairs; put the getter for X next to the setter for X. Avoid spreading them out to different sections of a file. Grouping them up makes the code easier to read, maintain and debug:
      • +
        auto CItem::GetType( void ) const -> ItemTypes
        +{
        +	return type;
        +}
        +auto CItem::SetType( ItemTypes newValue ) -> void
        +{
        +	type = newValue;
        +}
        +
      +
      +
      +
    • + +
    • + Variable Scope +
      +
      +
        +
      • Declare local variables when you need to use them, and not a moment sooner. The narrower the scope for a variable, and the closer it is declared to where it is actually used, the easier it becomes to read and understand the code for future code maintainers (or yourself a month from now).
      • +
      • If possible initialize variables as they are declared, instead of declaring and then assigning values to them separately, so whoever reads the code can see at a glance both the type and value the variable was initialized to.
      • +

        Example: +

        // Not ideal
        +std::string myString;
        +myString = "Hello";
        +
        +// Better
        +std::string myString = "Hello";
        +
        +// Preferred
        +auto myString = "Hello"s; // note the 's' at the end
        +
        +
          +
        • Exception: If the variable is an object, and it's used in a for-loop, declare it outside the for-loop so the constructor and destructor of the object doesn't get invoked multiple times as it loops.
        • +
        +
      +
      +
      +
    • + +
    • + Auto keyword +
      +
      +
        +
      • Use the auto keyword when declaring variables to automatically deduct the variable type based on the initializer. Same can be done with return types for functions. Examples:
      • +
        // Using auto with a variable
        +auto myChar = "Hello"; // type is const char* pointer to const char[5] array
        +auto myString = "Hello, World!"s; // type is std::string (note the 's' at the end)
        +auto myVar = GetMyVarValue(); // type depends on what GetMyVarValue() returns
        +
        +// Using auto with functions
        +auto CItem::SetRegion( UI16 newValue ) -> void
        +{
        +	regionNum = newValue;
        +	UpdateRegion();
        +}
        +auto CItem::GetRegionNum( void ) const -> UI16
        +{
        +	return regionNum;
        +}
        +
      +
      +
      +
    • + +
    • + Variable Types and Casting +
      +
      +
        +
      • Use the UOX3-defined type aliases like UI16, SI32, etc. for different integer types where possible, to increase readability and maintainability of the code. These are defined as follows: +
        using R32 = float;
        +using R64 = double;
        +using UI08 = std::uint8_t;	// 0 to 255
        +using SI08 = std::int8_t;	// -128 to 127
        +using UI16 = std::uint16_t;	// 0 to 65535
        +using SI16 = std::int16_t;	// -32768 to 32767
        +using UI32 = std::uint32_t;	// 0 to 4294967295
        +using SI32 = std::int32_t;	// -2147483648 to 2147483647
        +using UI64 = std::uint64_t;	// 0 to 18446744073709551615
        +using SI64 = std::int64_t;	// -9223372036854775808 to 9223372036854775807
      • +
      • Use C++-style casts, and avoid C-style casts. Example: +
        // Good - C++-style cast
        +static_cast<R32>( double_value )
        +
        +// Avoid - C-style cast
        +( R32 )double_value
      • +
      • When in doubt about how large integer type is needed, prefer the larger type unless(i.e. UI64 over UI32, or SI32 over SI16)
      • +
      +
      +
      +
    • + +
    • + Whitespace, Indentation and Braces +
      +
      +

      Tabs vs Spaces

      +

      For consistency with the rest of the code base, indent your code using tabs (size: 4), not spaces.

      +

      Indentation

      +
        +
      • Vertical alignment can be done to increase readability in certain situations, like:
      • +
        case CCP_FAME:			*vp = INT_TO_JSVAL( gPriv->GetFame() );					break;
        +case CCP_KARMA:			*vp = INT_TO_JSVAL( gPriv->GetKarma() );				break;
        +case CCP_ATTACK:		*vp = INT_TO_JSVAL( Combat->calcAtt( gPriv, true ));	break;
        +case CCP_CANATTACK:		*vp = BOOLEAN_TO_JSVAL( gPriv->GetCanAttack() );		break;
        +case CCP_BRKPEACE:		*vp = INT_TO_JSVAL( gPriv->GetBrkPeaceChance() );		break;
        +case CCP_HUNGER:		*vp = INT_TO_JSVAL( gPriv->GetHunger() );				break;
        +
        pStream.ReserveSize( 44 );
        +pStream.WriteByte(   0, 0x1C );
        +pStream.WriteShort(  1, 44 );
        +pStream.WriteLong(   3, 0xFFFFFFFF );
        +pStream.WriteShort(  7, 0xFFFF );
        +pStream.WriteString( 14, "System", 6 );
        +pStream.WriteByte(   20, 0 );
        +
      +

      Whitespace Guidelines

      +
        +
      • Spaces inside parentheses
      • +
        ( x, y, z )
        +
      • Spaces after commas in list/function/method parameters
      • +
        void MyFunction( std::string myString, int myInt )
        +
      • Spaces around operators
      • +
        var foo = x - 1;
        +var bar = x <= 10;
        +
      • No spaces before parentheses in function or method declarations
      • +
        bool myClass::MyMethod()
        +
      • No spaces before parentheses in control statements
      • +
        if( x == 1 )
        +for( int i = 0; i < 10; ++i )
        +
      • No spaces between multiple parentheses in control statements
      • +
        if( foo || ( !bar ))
        +if(( x == y ) && ( z != x ))
        +
      • No spaces inside angled or square brackets, except after comma, or between operators
      • +
        [x, y, z]
        +static_cast<SI16>
        +
      +

      Braces

      +
        +
      • Braces ALWAYS on their own lines (Allman style)
      • +
        if( something )
        +{
        +  ...
        +}
        +
        +void myFunction( std::string myString )
        +{
        +}
        +
      • Always use braces with if & else statements, even for one liners, to prevent easy mistakes by future maintainers
      • +
        if( something )
        +{
        +	// one liner
        +}
        +
        +
      • Exception to the previous point: Braces can be skipped for one-liners that are intended to return early, continue/break a loop, etc. In those cases, try to leave an empty line after the early return/continue/break and the rest of the code in the function/method in question
      • +
        bool cScript::OnCreate( CBaseObject *thingCreated, bool dfnCreated )
        +{
        +	if( !ValidateObject( thingCreated ))
        +		return false;
        +
        +	std::string functionName = "onCreateDFN";
        +	...
        +}
        +
        for( auto &MapArea : MapRegion->PopulateList( this ))
        +{
        +	if( MapArea == nullptr )
        +		continue;
        +
        +	// First remove nearby characters from sight
        +	...
        +}
        +
      +
      +
      +
    • + +
    +
    + + + Close + + +
    +
    +

    UOX3 Style Guide for Code by Geir Ove Alnes @ Copyright 2022

    +

    Built upon FAQ Template framwork provided by CodyHouse.

    +
    + + + + + \ No newline at end of file diff --git a/make/VS2017/uox3.sln b/make/VS2017/uox3.sln index bdd835a22..e1306244a 100644 --- a/make/VS2017/uox3.sln +++ b/make/VS2017/uox3.sln @@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26430.16 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UOX3_Official", "UOX3_Official.vcxproj", "{82A66DAD-C555-416B-94DF-9784AFBB11FC}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uox3", "uox3.vcxproj", "{82A66DAD-C555-416B-94DF-9784AFBB11FC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/make/VS2017/uox3.vcxproj b/make/VS2017/uox3.vcxproj index 9647dd501..48baf8638 100644 --- a/make/VS2017/uox3.vcxproj +++ b/make/VS2017/uox3.vcxproj @@ -33,6 +33,7 @@ {82A66DAD-C555-416B-94DF-9784AFBB11FC} 8.1 + UOX3 @@ -100,18 +101,18 @@ .\Release\x86\ .\Release\x86\ false - ..\spidermonkey\Release\x86;..\zlib\Release;$(LibraryPath) - ..\spidermonkey;..\zlib;$(SourcePath) - ..\spidermonkey;..\zlib;$(IncludePath) + ..\..\spidermonkey\make\VS2017\jscript\Release\;..\..\zlib\make\VS2017\Release;$(LibraryPath) + ..\..\spidermonkey;..\..\zlib;$(SourcePath) + ..\..\spidermonkey;..\..\zlib;$(IncludePath) UOX3 NativeRecommendedRules.ruleset false false - ..\zlib\x64\Release;..\spidermonkey\Release\x64;$(LibraryPath) - ..\zlib;..\spidermonkey;$(SourcePath) - ..\zlib;..\spidermonkey;$(IncludePath) + ..\..\zlib\make\VS2017\x64\Release;..\..\spidermonkey\make\VS2017\jscript\x64\Release;$(LibraryPath) + ..\..\zlib;..\..\spidermonkey;$(SourcePath) + ..\..\zlib;..\..\spidermonkey;$(IncludePath) UOX3 NativeRecommendedRules.ruleset false @@ -130,16 +131,16 @@ .\Debug\x86\ .\Debug\x86\ true - ..\spidermonkey\Release\x86;..\zlib\Debug;$(LibraryPath) - ..\spidermonkey;..\zlib;$(SourcePath) - ..\spidermonkey;..\zlib;$(IncludePath) + ..\..\spidermonkey\make\VS2017\jscript\Debug;..\..\zlib\make\VS2017\Debug;$(LibraryPath) + ..\..\spidermonkey;..\..\zlib;$(SourcePath) + ..\..\spidermonkey;..\..\zlib;$(IncludePath) UOX3_debug true - ..\spidermonkey\Release\x64;..\zlib\x64\Debug;$(LibraryPath) - ..\spidermonkey;..\zlib;$(SourcePath) - ..\spidermonkey;..\zlib;$(IncludePath) + ..\..\spidermonkey\make\VS2017\jscript\x64\Debug;..\..\zlib\make\VS2017\x64\Debug;$(LibraryPath) + ..\..\spidermonkey;..\..\zlib;$(SourcePath) + ..\..\spidermonkey;..\..\zlib;$(IncludePath) UOX3_debug .\Debug\x64\ .\Debug\x64\ @@ -154,7 +155,7 @@ true /J - $(OutDir)/UOX3_Official.pch + $(OutDir)/uox3.pch $(OutDir) $(OutDir) $(OutDir) @@ -170,17 +171,17 @@ true - wsock32.lib;ws2_32.lib;js32.lib;zlib-static.lib;%(AdditionalDependencies) + wsock32.lib;ws2_32.lib;jscript.lib;zlib-static.lib;%(AdditionalDependencies) $(OutDir)$(TargetName).exe true - ..\spidermonkey\Release\x86;..\zlib\Release;%(AdditionalLibraryDirectories) + ..\..\spidermonkey\make\VS2017\Release;..\zlib\make\VS2017\Release;%(AdditionalLibraryDirectories) $(OutDir)$(TargetName).pdb Console MachineX86 UseLinkTimeCodeGeneration - .\Release/UOX3_Official.tlb + .\Release/uox3.tlb @@ -199,7 +200,7 @@ /J - $(OutDir)/UOX3_Official.pch + $(OutDir)/uox3.pch $(OutDir) $(OutDir) $(OutDir) @@ -215,16 +216,16 @@ true - wsock32.lib;ws2_32.lib;js32.lib;zlib-static.lib;%(AdditionalDependencies) + wsock32.lib;ws2_32.lib;jscript.lib;zlib-static.lib;%(AdditionalDependencies) $(OutDir)$(TargetName).exe true - ..\zlib\x64\Release\;..\spidermonkey\Release\x64;%(AdditionalLibraryDirectories) + ..\..\zlib\make\VS2017\x64\Release\;..\..\spidermonkey\make\VS2017\x64\Release;%(AdditionalLibraryDirectories) $(OutDir)$(TargetName).pdb Console UseLinkTimeCodeGeneration - .\Release/UOX3_Official.tlb + .\Release/uox3.tlb @@ -240,7 +241,7 @@ MultiThreadedDebug /J - .\DebugProfile/UOX3_Official.pch + .\DebugProfile/uox3.pch .\DebugProfile/ .\DebugProfile/ .\DebugProfile/ @@ -250,7 +251,7 @@ EditAndContinue - odbc32.lib;odbccp32.lib;ws2_32.lib;js32.lib;%(AdditionalDependencies) + odbc32.lib;odbccp32.lib;ws2_32.lib;jscript.lib;%(AdditionalDependencies) DebugProfile\UOX3.exe true JavaScript;%(AdditionalLibraryDirectories) @@ -260,7 +261,7 @@ MachineX86 - .\DebugProfile/UOX3_Official.tlb + .\DebugProfile/uox3.tlb @@ -276,7 +277,7 @@ /J - .\DebugProfile/UOX3_Official.pch + .\DebugProfile/uox3.pch .\DebugProfile/ .\DebugProfile/ .\DebugProfile/ @@ -286,7 +287,7 @@ ProgramDatabase - odbc32.lib;odbccp32.lib;ws2_32.lib;js32.lib;%(AdditionalDependencies) + odbc32.lib;odbccp32.lib;ws2_32.lib;jscript.lib;%(AdditionalDependencies) DebugProfile\UOX3.exe true JavaScript;%(AdditionalLibraryDirectories) @@ -295,7 +296,7 @@ Console - .\DebugProfile/UOX3_Official.tlb + .\DebugProfile/uox3.tlb @@ -311,7 +312,7 @@ MultiThreadedDebug /J - $(OutDir)/UOX3_Official.pch + $(OutDir)/uox3.pch $(OutDir) $(OutDir) $(OutDir) @@ -326,10 +327,10 @@ false - ws2_32.lib;js32.lib;zlib-static.lib;%(AdditionalDependencies) + ws2_32.lib;jscript.lib;zlib-static.lib;%(AdditionalDependencies) $(OutDir)$(TargetName).exe true - ..\spidermonkey\Release\x86;..\zlib\Debug;%(AdditionalLibraryDirectories) + ..\..\spidermonkey\make\VS2017\Release;..\..\zlib\make\VS2017\Debug;%(AdditionalLibraryDirectories) true $(OutDir)$(TargetName).pdb Console @@ -338,7 +339,7 @@ LIBCMT;%(IgnoreSpecificDefaultLibraries) - .\Debug/UOX3_Official.tlb + .\Debug/uox3.tlb @@ -354,7 +355,7 @@ /J - $(OutDir)/UOX3_Official.pch + $(OutDir)/uox3.pch $(OutDir) $(OutDir) $(OutDir) @@ -368,10 +369,10 @@ true - ws2_32.lib;js32.lib;zlib-static.lib;%(AdditionalDependencies) + ws2_32.lib;jscript.lib;zlib-static.lib;%(AdditionalDependencies) $(OutDir)$(TargetName).exe true - ..\spidermonkey\Release\x64;..\zlib\x64\Debug;%(AdditionalLibraryDirectories) + ..\..\spidermonkey\make\VS2017\x64\Release;..\..\zlib\make\VS2017\x64\Debug;%(AdditionalLibraryDirectories) true $(OutDir)$(TargetName).pdb Console @@ -379,7 +380,7 @@ LIBCMT;%(IgnoreSpecificDefaultLibraries) - .\Debug/UOX3_Official.tlb + .\Debug/uox3.tlb @@ -389,7 +390,7 @@ - + Disabled Disabled true @@ -403,7 +404,7 @@ true true - + Disabled Disabled true @@ -417,7 +418,7 @@ true true - + Disabled Disabled true @@ -431,7 +432,7 @@ true true - + Disabled Disabled true @@ -445,7 +446,7 @@ true true - + Disabled Disabled true @@ -459,7 +460,7 @@ true true - + Disabled Disabled true @@ -473,7 +474,7 @@ true true - + Disabled Disabled true @@ -487,7 +488,7 @@ true true - + Disabled Disabled true @@ -501,7 +502,7 @@ true true - + Disabled Disabled true @@ -515,7 +516,7 @@ true true - + Disabled Disabled true @@ -529,7 +530,7 @@ true true - + Disabled Disabled true @@ -543,7 +544,7 @@ true true - + Disabled Disabled true @@ -557,7 +558,7 @@ true true - + Disabled Disabled true @@ -571,7 +572,7 @@ true true - + Disabled Disabled true @@ -585,9 +586,9 @@ true true - - - + + + Disabled Disabled true @@ -601,7 +602,7 @@ true true - + Disabled Disabled true @@ -615,7 +616,7 @@ true true - + Disabled Disabled true @@ -629,7 +630,7 @@ true true - + Disabled Disabled true @@ -643,7 +644,7 @@ true true - + Disabled Disabled true @@ -657,7 +658,7 @@ true true - + Disabled Disabled true @@ -671,7 +672,7 @@ true true - + Disabled Disabled true @@ -685,7 +686,7 @@ true true - + Disabled Disabled true @@ -699,7 +700,7 @@ true true - + Disabled Disabled true @@ -713,7 +714,7 @@ true true - + Disabled Disabled true @@ -727,7 +728,7 @@ true true - + Disabled Disabled true @@ -741,7 +742,7 @@ true true - + Disabled Disabled true @@ -755,7 +756,7 @@ true true - + Disabled Disabled true @@ -769,7 +770,7 @@ true true - + Disabled Disabled true @@ -783,7 +784,7 @@ true true - + Disabled Disabled true @@ -797,7 +798,7 @@ true true - + Disabled Disabled true @@ -811,7 +812,7 @@ true true - + Disabled Disabled true @@ -825,7 +826,7 @@ true true - + Disabled Disabled true @@ -839,7 +840,7 @@ true true - + Disabled Disabled true @@ -853,7 +854,7 @@ true true - + Disabled Disabled true @@ -867,8 +868,8 @@ true true - - + + Disabled Disabled true @@ -882,7 +883,7 @@ true true - + Disabled Disabled true @@ -896,7 +897,7 @@ true true - + Disabled Disabled true @@ -910,7 +911,7 @@ true true - + Disabled Disabled true @@ -924,8 +925,8 @@ true true - - + + Disabled Disabled true @@ -939,7 +940,7 @@ true true - + Disabled Disabled true @@ -953,7 +954,7 @@ true true - + Disabled Disabled true @@ -967,7 +968,7 @@ true true - + Disabled Disabled true @@ -981,7 +982,7 @@ true true - + Disabled Disabled true @@ -995,7 +996,7 @@ true true - + Disabled Disabled true @@ -1009,7 +1010,7 @@ true true - + Disabled Disabled true @@ -1023,7 +1024,7 @@ true true - + Disabled Disabled true @@ -1037,8 +1038,8 @@ true true - - + + Disabled Disabled true @@ -1052,7 +1053,7 @@ true true - + Disabled Disabled true @@ -1066,7 +1067,7 @@ true true - + Disabled Disabled true @@ -1080,8 +1081,8 @@ true true - - + + Disabled Disabled true @@ -1095,7 +1096,7 @@ true true - + Disabled Disabled true @@ -1109,7 +1110,7 @@ true true - + Disabled Disabled true @@ -1123,7 +1124,7 @@ true true - + Disabled Disabled true @@ -1137,7 +1138,7 @@ true true - + Disabled Disabled true @@ -1151,7 +1152,7 @@ true true - + Disabled Disabled true @@ -1165,7 +1166,7 @@ true true - + Disabled Disabled true @@ -1179,7 +1180,7 @@ true true - + Disabled Disabled true @@ -1193,7 +1194,7 @@ true true - + Disabled Disabled true @@ -1207,7 +1208,7 @@ true true - + Disabled Disabled true @@ -1221,9 +1222,9 @@ true true - - - + + + Disabled Disabled true @@ -1237,7 +1238,7 @@ true true - + Disabled Disabled true @@ -1251,7 +1252,7 @@ true true - + Disabled Disabled true @@ -1265,8 +1266,8 @@ true true - - + + Disabled Disabled true @@ -1280,7 +1281,7 @@ true true - + Disabled Disabled true @@ -1294,7 +1295,7 @@ true true - + Disabled Disabled true @@ -1308,7 +1309,7 @@ true true - + Disabled Disabled true @@ -1322,7 +1323,7 @@ true true - + Disabled Disabled true @@ -1336,7 +1337,7 @@ true true - + Disabled Disabled true @@ -1350,7 +1351,7 @@ true true - + Disabled Disabled true @@ -1364,7 +1365,7 @@ true true - + Disabled Disabled true @@ -1380,90 +1381,90 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + diff --git a/make/VS2017/uox3.vcproj.filters b/make/VS2017/uox3.vcxproj.filters similarity index 60% rename from make/VS2017/uox3.vcproj.filters rename to make/VS2017/uox3.vcxproj.filters index 480241cd7..022e4f485 100644 --- a/make/VS2017/uox3.vcproj.filters +++ b/make/VS2017/uox3.vcxproj.filters @@ -62,490 +62,490 @@ - + Source Files - + Source Files\Script - + Source Files\Script - + Source Files\Script - + Source Files\Script - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\Other - + Source Files\JS Engine - + Source Files\JS Engine - + Source Files\JS Engine - + Source Files\JS Engine - + Source Files\JS Engine - + Source Files\JS Engine - + Source Files\JS Engine - + Source Files\Network - + Source Files\Network - + Source Files\UOData - + Source Files\UOData - + Source Files\Network - + Source Files\Network - + Source Files\Utility - + Source Files\Utility - + Source Files\Utility - + Source Files\Subsystem - + Source Files - + Source Files - + Header Files - + Header Files - + Header Files - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Base Objects - + Header Files\Script - + Header Files\Script - + Header Files\Script - + Header Files\Script - + Header Files\Script - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Subsystem - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\Other - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\JS Engine - + Header Files\Network - + Header Files\Network - + Header Files\Network - + Header Files - + Header Files\UOData - + Header Files\UOData - + Header Files\Network No. 1 - + Header Files\Network - + Header Files\Utility - + Header Files\Utility - + Header Files\Base Objects - + Header Files\Utility - + Header Files\Subsystem - + Header Files - + Header Files - + Resource Files - + Resource Files diff --git a/make/VS2022/uox3.sln b/make/VS2022/uox3.sln index adb31620c..7666b71d6 100644 --- a/make/VS2022/uox3.sln +++ b/make/VS2022/uox3.sln @@ -1,13 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.0.32112.339 +VisualStudioVersion = 17.4.33122.133 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uox3", "uox3.vcxproj", "{874C3F38-3B02-407B-823F-CE8F73B52580}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uox3", "uox3.vcxproj", "{062AE4B6-C989-4919-ADBF-7CD5A2CF30C5}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsengine", "..\spidermonkey\VS2022\jsengine.vcxproj", "{4366F707-C296-4510-85AA-A61DD77DE34B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jscript", "..\..\spidermonkey\make\vs2022\jscript\jscript.vcxproj", "{2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\zlib\vs2022\zlib.vcxproj", "{7DDBF2DC-F199-4F38-B56D-C75270C3922D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\zlib\make\vs2022\zlib.vcxproj", "{091529FD-5075-45F1-9D96-5708B3AB7C2B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,23 +15,23 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {874C3F38-3B02-407B-823F-CE8F73B52580}.Debug|x64.ActiveCfg = Debug|x64 - {874C3F38-3B02-407B-823F-CE8F73B52580}.Debug|x64.Build.0 = Debug|x64 - {874C3F38-3B02-407B-823F-CE8F73B52580}.Release|x64.ActiveCfg = Release|x64 - {874C3F38-3B02-407B-823F-CE8F73B52580}.Release|x64.Build.0 = Release|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Debug|x64.ActiveCfg = Debug|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Debug|x64.Build.0 = Debug|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Release|x64.ActiveCfg = Release|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Release|x64.Build.0 = Release|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Debug|x64.ActiveCfg = Debug|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Debug|x64.Build.0 = Debug|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Release|x64.ActiveCfg = Release|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Release|x64.Build.0 = Release|x64 + {062AE4B6-C989-4919-ADBF-7CD5A2CF30C5}.Debug|x64.ActiveCfg = Debug|x64 + {062AE4B6-C989-4919-ADBF-7CD5A2CF30C5}.Debug|x64.Build.0 = Debug|x64 + {062AE4B6-C989-4919-ADBF-7CD5A2CF30C5}.Release|x64.ActiveCfg = Release|x64 + {062AE4B6-C989-4919-ADBF-7CD5A2CF30C5}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.ActiveCfg = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.Build.0 = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.ActiveCfg = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.Build.0 = Release|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Debug|x64.ActiveCfg = Debug|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Debug|x64.Build.0 = Debug|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Release|x64.ActiveCfg = Release|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {356E900D-8220-47C9-AF00-B965C5D986B3} + SolutionGuid = {CF21F62F-540E-4063-B542-B2421969D2C0} EndGlobalSection EndGlobal diff --git a/make/VS2022/uox3.vcxproj b/make/VS2022/uox3.vcxproj index a73ac515c..2e2d14e49 100644 --- a/make/VS2022/uox3.vcxproj +++ b/make/VS2022/uox3.vcxproj @@ -10,200 +10,25 @@ x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {4366f707-c296-4510-85aa-a61dd77de34b} - - - {7ddbf2dc-f199-4f38-b56d-c75270c3922d} - - 16.0 Win32Proj - {874c3f38-3b02-407b-823f-ce8f73b52580} + {062ae4b6-c989-4919-adbf-7cd5a2cf30c5} uox3 10.0 + Application true v143 MultiByte - Application false v143 - false + true MultiByte @@ -218,65 +43,226 @@ - - true - false - Disabled Level3 - MultiThreadedDebug - /J - true - EditAndContinue - _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH;EXPORT_JS_API;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION;_WARNING_CRT_NO_VA_START_VALIDATION;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + _DEBUG;_CONSOLE;_CRT_NO_VA_START_VALIDATION;_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH;EXPORT_JS_API;_CRT_SECURE_NO_WARNINGS;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION true stdcpp17 stdc11 - ..\source;..\zlib;..\spidermonkey - false + true - true - false - Sync + /J + ..\..\source;..\..\zlib;..\..\spidermonkey + MultiThreadedDebug Console true - ws2_32.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;%(AdditionalDependencies) - MaxSpeed Level3 - MultiThreaded - /J - true - _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;_CRT_NO_VA_START_VALIDATION;EXPORT_JS_API;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + true + true + NDEBUG;_CONSOLE;_CRT_NO_VA_START_VALIDATION;_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH;EXPORT_JS_API;_CRT_SECURE_NO_WARNINGS;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION true stdcpp17 stdc11 - ..\source;..\zlib;..\spidermonkey - false + true - true - false - Sync - true - OnlyExplicitInline - true - true + /J + ..\..\source;..\..\zlib;..\..\spidermonkey + MultiThreaded Console - ws2_32.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;%(AdditionalDependencies) + false + true + false UseLinkTimeCodeGeneration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {2af3a5ea-0cec-4d24-80f7-05e0b8b300c5} + + + {091529fd-5075-45f1-9d96-5708b3ab7c2b} + + diff --git a/make/VS2022/uox3.vcxproj.filters b/make/VS2022/uox3.vcxproj.filters index 80290ca49..ae0e11fa8 100644 --- a/make/VS2022/uox3.vcxproj.filters +++ b/make/VS2022/uox3.vcxproj.filters @@ -13,537 +13,533 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - {274e96e8-de7a-41ad-8594-90bd68f0f353} + + {cd40ad04-825d-48bb-9a86-ff3ee1b2925e} - - {0bfc6dfc-539a-4feb-926a-7dcf248b105a} + + {f1c80722-7193-47b7-8c33-b900a0063ae4} - - {0e099317-e932-45be-996c-fcb43d4d42ab} + + {803b199d-3be5-4df0-a1a3-606c8ee008df} - - {8898a532-b7e0-4f91-8755-27d7100c6c45} + + {9070ad2d-6668-48f5-a867-d62bf7e1c2ce} + + + {5dc0e64e-1161-4bdd-b7a9-08309a58eb14} - {e7c93d8f-387d-4b78-b573-51b5cce671eb} + {e69fb852-15bb-499d-a73e-13f7b97c87b5} - - {701247da-b7de-4859-81f3-42a84d34a445} + + {5fcfac04-c4f0-4c48-804a-8b4f49e615c4} - {3b23bdce-f84c-4264-b241-5c745928b4c0} + {d191cb74-b6ab-4daa-9a7d-23c417c8efa5} - {30d280c4-5fd2-41c6-97ee-f9a8f03fcc63} + {39d50936-dc83-4b6c-b219-2f79d292d75b} - - {0bfee963-d056-4eb6-9f61-8861eb79d979} - - - {1c962ff3-a42a-4894-acc5-898005fb981d} + + {6a0862ae-8f52-4d2e-bac1-51e13e865632} - - {5450e04f-62a4-441f-ba5e-7fad214a483b} + + {9a0e0d95-1028-413d-916f-c79b93d05203} - - {1f38c55b-c2ca-4548-9384-dc297d476d71} + + {d08079d3-ca4f-47c2-834e-b2982e2cc5d2} - - {926f0a88-1049-4700-bded-7ccd6524e438} + + {6120db4f-bb2e-449f-b847-1547b395dee6} - - {da730940-f39f-41b5-96c1-05e690d46584} + + {b53b55e3-1e33-4ebf-a60f-a7e98258942c} - - {309ef513-f9c9-426d-aa44-6e03659b6d44} + + {4e9f44ee-ffe6-4241-9ba9-faa06b8bcd9b} - - {65548359-8d35-4132-98a1-d9e33044a8f7} + + {47123d74-35f3-41ba-b7ee-c4d15af5c6af} - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\Base Objects - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\JS Engine - - - Header Files\Network - - - Header Files\Network - - - Header Files\Network - - - Header Files\Network - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files\Script - - - Header Files\Script - - - Header Files\Script - - - Header Files\Script - - - Header Files\Script - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\UOData - - - Header Files\UOData - - - Header Files\Utility - - - Header Files\Utility - - - Header Files\Utility - - - Header Files\Subsystem - - - Header Files\Subsystem - - - Header Files\Other - - - Header Files\Other - - - Header Files\Other - - - Header Files - - - Header Files - + + Resource Files + - + Source Files - - Source Files\UOData - - - Source Files\UOData - - - Source Files\Utility - - - Source Files\Utility - - - Source Files\Utility - - - Source Files\JS Engine - - - Source Files\JS Engine - - - Source Files\JS Engine - - - Source Files\JS Engine - - - Source Files\JS Engine + + Source Files\Script - - Source Files\JS Engine + + Source Files\Script - - Source Files\JS Engine + + Source Files\Script - - Source Files\Network + + Source Files\Script - - Source Files\Network + + Source Files\Base Objects - - Source Files\Network + + Source Files\Base Objects - - Source Files\Network + + Source Files\Base Objects - - Source Files\Network + + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Base Objects - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - - Source Files\Other - - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - + Source Files\Subsystem - - Source Files\Subsystem + + Source Files\Other - - Source Files\Script + + Source Files\Other - - Source Files\Script + + Source Files\Other - - Source Files\Script + + Source Files\Other - - Source Files\Script + + Source Files\Other - - Source Files\Base Objects + + Source Files\Other - - Source Files\Base Objects + + Source Files\Other - - Source Files\Base Objects + + Source Files\Other - - Source Files\Base Objects + + Source Files\Other - - Source Files\Base Objects + + Source Files\Other + + + Source Files\Other + + + Source Files\Other + + + Source Files\Other + + + Source Files\JS Engine + + + Source Files\JS Engine + + + Source Files\JS Engine + + + Source Files\JS Engine + + + Source Files\JS Engine + + + Source Files\JS Engine + + + Source Files\JS Engine + + + Source Files\Network + + + Source Files\Network - + + Source Files\UOData + + + Source Files\UOData + + + Source Files\Network + + + Source Files\Network + + + Source Files\Utility + + + Source Files\Utility + + + Source Files\Utility + + Source Files\Subsystem - + Source Files - + + Source Files + + + + Source Files + + Source Files - - Resource Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Base Objects + + + Header Files\Script + + + Header Files\Script + + + Header Files\Script + + + Header Files\Script + + + Header Files\Script + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Subsystem + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\Other + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\JS Engine + + + Header Files\Network + + + Header Files\Network + + + Header Files\Network + + + Header Files + + + Header Files\UOData + + + Header Files\UOData + + + Header Files\Network No. 1 + + + Header Files\Network + + + Header Files\Utility + + + Header Files\Utility + + + Header Files\Base Objects + + + Header Files\Utility + + + Header Files\Subsystem + + + Header Files + + + Header Files + + - + Resource Files diff --git a/make/XCode/uox3.xcodeproj/project.pbxproj b/make/XCode/uox3.xcodeproj/project.pbxproj index 766e87105..e52835d72 100644 --- a/make/XCode/uox3.xcodeproj/project.pbxproj +++ b/make/XCode/uox3.xcodeproj/project.pbxproj @@ -7,91 +7,91 @@ objects = { /* Begin PBXBuildFile section */ - 6452D32227D3A7CB00E5AFB4 /* osunique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6452D32127D3A7CB00E5AFB4 /* osunique.cpp */; }; - 648AF79627CFF2CD009327DE /* cConsole.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF6F627CFF2CC009327DE /* cConsole.cpp */; }; - 648AF79727CFF2CD009327DE /* dist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF6F727CFF2CC009327DE /* dist.cpp */; }; - 648AF79827CFF2CD009327DE /* calcfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF6FA27CFF2CC009327DE /* calcfuncs.cpp */; }; - 648AF79927CFF2CD009327DE /* CPacketReceive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF6FC27CFF2CC009327DE /* CPacketReceive.cpp */; }; - 648AF79A27CFF2CD009327DE /* cScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF6FD27CFF2CC009327DE /* cScript.cpp */; }; - 648AF79B27CFF2CD009327DE /* uox3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70027CFF2CC009327DE /* uox3.cpp */; }; - 648AF79C27CFF2CD009327DE /* boats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70127CFF2CC009327DE /* boats.cpp */; }; - 648AF79D27CFF2CD009327DE /* IP4Address.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70227CFF2CC009327DE /* IP4Address.cpp */; }; - 648AF79E27CFF2CD009327DE /* cItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70527CFF2CC009327DE /* cItem.cpp */; }; - 648AF79F27CFF2CD009327DE /* worldmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70727CFF2CC009327DE /* worldmain.cpp */; }; - 648AF7A027CFF2CD009327DE /* cBaseobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70827CFF2CC009327DE /* cBaseobject.cpp */; }; - 648AF7A127CFF2CD009327DE /* cServerData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70A27CFF2CC009327DE /* cServerData.cpp */; }; - 648AF7A227CFF2CD009327DE /* cMultiObj.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF70E27CFF2CC009327DE /* cMultiObj.cpp */; }; - 648AF7A327CFF2CD009327DE /* jail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF71227CFF2CC009327DE /* jail.cpp */; }; - 648AF7A427CFF2CD009327DE /* cSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF71427CFF2CC009327DE /* cSocket.cpp */; }; - 648AF7A627CFF2CD009327DE /* queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF71727CFF2CC009327DE /* queue.cpp */; }; - 648AF7A827CFF2CD009327DE /* SEFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF71B27CFF2CC009327DE /* SEFunctions.cpp */; }; - 648AF7A927CFF2CD009327DE /* archive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF71D27CFF2CC009327DE /* archive.cpp */; }; - 648AF7AA27CFF2CD009327DE /* lineofsight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF72027CFF2CC009327DE /* lineofsight.cpp */; }; - 648AF7AB27CFF2CD009327DE /* TimeUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF72527CFF2CC009327DE /* TimeUtility.cpp */; }; - 648AF7AC27CFF2CD009327DE /* townregion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF72627CFF2CC009327DE /* townregion.cpp */; }; - 648AF7AD27CFF2CD009327DE /* house.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF72B27CFF2CC009327DE /* house.cpp */; }; - 648AF7AE27CFF2CD009327DE /* CResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF72D27CFF2CC009327DE /* CResponse.cpp */; }; - 648AF7AF27CFF2CD009327DE /* UOXJSPropertyFuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF72F27CFF2CC009327DE /* UOXJSPropertyFuncs.cpp */; }; - 648AF7B027CFF2CD009327DE /* UOPData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73227CFF2CC009327DE /* UOPData.cpp */; }; - 648AF7B127CFF2CD009327DE /* UOXJSMethods.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73327CFF2CC009327DE /* UOXJSMethods.cpp */; }; - 648AF7B227CFF2CD009327DE /* cRaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73427CFF2CC009327DE /* cRaces.cpp */; }; - 648AF7B327CFF2CD009327DE /* MultiMul.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73627CFF2CD009327DE /* MultiMul.cpp */; }; - 648AF7B427CFF2CD009327DE /* targeting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73727CFF2CD009327DE /* targeting.cpp */; }; - 648AF7B527CFF2CD009327DE /* skills.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73827CFF2CD009327DE /* skills.cpp */; }; - 648AF7B627CFF2CD009327DE /* findfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73A27CFF2CD009327DE /* findfuncs.cpp */; }; - 648AF7B727CFF2CD009327DE /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73B27CFF2CD009327DE /* Dictionary.cpp */; }; - 648AF7B827CFF2CD009327DE /* CJSEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73D27CFF2CD009327DE /* CJSEngine.cpp */; }; - 648AF7B927CFF2CD009327DE /* magic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF73F27CFF2CD009327DE /* magic.cpp */; }; - 648AF7BA27CFF2CD009327DE /* cGuild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74227CFF2CD009327DE /* cGuild.cpp */; }; - 648AF7BB27CFF2CD009327DE /* EventTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74327CFF2CD009327DE /* EventTimer.cpp */; }; - 648AF7BC27CFF2CD009327DE /* cChar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74427CFF2CD009327DE /* cChar.cpp */; }; - 648AF7BD27CFF2CD009327DE /* commands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74527CFF2CD009327DE /* commands.cpp */; }; - 648AF7BE27CFF2CD009327DE /* cThreadQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74727CFF2CD009327DE /* cThreadQueue.cpp */; }; - 648AF7BF27CFF2CD009327DE /* cHTMLSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74827CFF2CD009327DE /* cHTMLSystem.cpp */; }; - 648AF7C027CFF2CD009327DE /* network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74A27CFF2CD009327DE /* network.cpp */; }; - 648AF7C127CFF2CD009327DE /* gumps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74C27CFF2CD009327DE /* gumps.cpp */; }; - 648AF7C227CFF2CD009327DE /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF74D27CFF2CD009327DE /* sound.cpp */; }; - 648AF7C327CFF2CD009327DE /* cmdtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75127CFF2CD009327DE /* cmdtable.cpp */; }; - 648AF7C427CFF2CD009327DE /* cDice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75227CFF2CD009327DE /* cDice.cpp */; }; - 648AF7C527CFF2CD009327DE /* items.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75327CFF2CD009327DE /* items.cpp */; }; - 648AF7C627CFF2CD009327DE /* cVersionClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75427CFF2CD009327DE /* cVersionClass.cpp */; }; - 648AF7C727CFF2CD009327DE /* regions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75627CFF2CD009327DE /* regions.cpp */; }; - 648AF7C827CFF2CD009327DE /* cServerDefinitions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75827CFF2CD009327DE /* cServerDefinitions.cpp */; }; - 648AF7C927CFF2CD009327DE /* ssection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75927CFF2CD009327DE /* ssection.cpp */; }; - 648AF7CA27CFF2CD009327DE /* scriptc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF75E27CFF2CD009327DE /* scriptc.cpp */; }; - 648AF7CB27CFF2CD009327DE /* mapstuff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76127CFF2CD009327DE /* mapstuff.cpp */; }; - 648AF7CC27CFF2CD009327DE /* msgboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76427CFF2CD009327DE /* msgboard.cpp */; }; - 648AF7CD27CFF2CD009327DE /* cWeather.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76527CFF2CD009327DE /* cWeather.cpp */; }; - 648AF7CE27CFF2CD009327DE /* cPlayerAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76627CFF2CD009327DE /* cPlayerAction.cpp */; }; - 648AF7CF27CFF2CD009327DE /* movement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76827CFF2CD009327DE /* movement.cpp */; }; - 648AF7D027CFF2CD009327DE /* cSpawnRegion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76927CFF2CD009327DE /* cSpawnRegion.cpp */; }; - 648AF7D127CFF2CD009327DE /* PartySystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76B27CFF2CD009327DE /* PartySystem.cpp */; }; - 648AF7D227CFF2CD009327DE /* vendor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF76E27CFF2CD009327DE /* vendor.cpp */; }; - 648AF7D327CFF2CD009327DE /* fileio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77027CFF2CD009327DE /* fileio.cpp */; }; - 648AF7D427CFF2CD009327DE /* CJSMapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77227CFF2CD009327DE /* CJSMapping.cpp */; }; - 648AF7D527CFF2CD009327DE /* books.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77527CFF2CD009327DE /* books.cpp */; }; - 648AF7D627CFF2CD009327DE /* CPacketSend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77627CFF2CD009327DE /* CPacketSend.cpp */; }; - 648AF7D727CFF2CD009327DE /* StringUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77927CFF2CD009327DE /* StringUtility.cpp */; }; - 648AF7D827CFF2CD009327DE /* quantityfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77A27CFF2CD009327DE /* quantityfuncs.cpp */; }; - 648AF7D927CFF2CD009327DE /* cAccountClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF77F27CFF2CD009327DE /* cAccountClass.cpp */; }; - 648AF7DA27CFF2CD009327DE /* ObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78027CFF2CD009327DE /* ObjectFactory.cpp */; }; - 648AF7DB27CFF2CD009327DE /* npcs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78127CFF2CD009327DE /* npcs.cpp */; }; - 648AF7DC27CFF2CD009327DE /* wholist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78427CFF2CD009327DE /* wholist.cpp */; }; - 648AF7DD27CFF2CD009327DE /* combat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78527CFF2CD009327DE /* combat.cpp */; }; - 648AF7DE27CFF2CD009327DE /* CGump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78727CFF2CD009327DE /* CGump.cpp */; }; - 648AF7DF27CFF2CD009327DE /* JSEncapsulate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78927CFF2CD009327DE /* JSEncapsulate.cpp */; }; - 648AF7E027CFF2CD009327DE /* ai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78A27CFF2CD009327DE /* ai.cpp */; }; - 648AF7E127CFF2CD009327DE /* pcmanage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78B27CFF2CD009327DE /* pcmanage.cpp */; }; - 648AF7E227CFF2CD009327DE /* trade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF78E27CFF2CD009327DE /* trade.cpp */; }; - 648AF7E327CFF2CD009327DE /* weight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF79127CFF2CD009327DE /* weight.cpp */; }; - 648AF7E427CFF2CD009327DE /* effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF79327CFF2CD009327DE /* effect.cpp */; }; - 648AF7E527CFF2CD009327DE /* speech.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 648AF79527CFF2CD009327DE /* speech.cpp */; }; - 64E0066C2935A37500BEBA8F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 64E0066829354B1800BEBA8F /* libz.tbd */; }; - 64E0066E2935A39A00BEBA8F /* libjs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64E0066D2935A38900BEBA8F /* libjs.a */; }; + 64A9011A293E3DD4009B54DA /* ai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90075293E3DD4009B54DA /* ai.cpp */; }; + 64A9011B293E3DD4009B54DA /* archive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90076293E3DD4009B54DA /* archive.cpp */; }; + 64A9011C293E3DD4009B54DA /* boats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90077293E3DD4009B54DA /* boats.cpp */; }; + 64A9011D293E3DD4009B54DA /* books.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90078293E3DD4009B54DA /* books.cpp */; }; + 64A9011E293E3DD4009B54DA /* cAccountClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9007A293E3DD4009B54DA /* cAccountClass.cpp */; }; + 64A9011F293E3DD4009B54DA /* calcfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9007C293E3DD4009B54DA /* calcfuncs.cpp */; }; + 64A90120293E3DD4009B54DA /* cBaseobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9007D293E3DD4009B54DA /* cBaseobject.cpp */; }; + 64A90121293E3DD4009B54DA /* cChar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9007F293E3DD4009B54DA /* cChar.cpp */; }; + 64A90122293E3DD4009B54DA /* cConsole.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90081293E3DD4009B54DA /* cConsole.cpp */; }; + 64A90123293E3DD4009B54DA /* cDice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90083293E3DD4009B54DA /* cDice.cpp */; }; + 64A90124293E3DD4009B54DA /* cGuild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90086293E3DD4009B54DA /* cGuild.cpp */; }; + 64A90125293E3DD4009B54DA /* CGump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90088293E3DD4009B54DA /* CGump.cpp */; }; + 64A90126293E3DD4009B54DA /* cHTMLSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9008A293E3DD4009B54DA /* cHTMLSystem.cpp */; }; + 64A90127293E3DD4009B54DA /* cItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9008C293E3DD4009B54DA /* cItem.cpp */; }; + 64A90128293E3DD4009B54DA /* CJSEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9008E293E3DD4009B54DA /* CJSEngine.cpp */; }; + 64A90129293E3DD4009B54DA /* CJSMapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90090293E3DD4009B54DA /* CJSMapping.cpp */; }; + 64A9012A293E3DD4009B54DA /* cmdtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90095293E3DD4009B54DA /* cmdtable.cpp */; }; + 64A9012B293E3DD4009B54DA /* cMultiObj.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90097293E3DD4009B54DA /* cMultiObj.cpp */; }; + 64A9012C293E3DD4009B54DA /* combat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90099293E3DD4009B54DA /* combat.cpp */; }; + 64A9012D293E3DD4009B54DA /* commands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9009B293E3DD4009B54DA /* commands.cpp */; }; + 64A9012E293E3DD4009B54DA /* CPacketReceive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9009E293E3DD4009B54DA /* CPacketReceive.cpp */; }; + 64A9012F293E3DD4009B54DA /* CPacketSend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900A0293E3DD4009B54DA /* CPacketSend.cpp */; }; + 64A90130293E3DD4009B54DA /* cPlayerAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900A2293E3DD4009B54DA /* cPlayerAction.cpp */; }; + 64A90131293E3DD4009B54DA /* cRaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900A3293E3DD4009B54DA /* cRaces.cpp */; }; + 64A90132293E3DD4009B54DA /* CResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900A5293E3DD4009B54DA /* CResponse.cpp */; }; + 64A90133293E3DD4009B54DA /* cScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900A7293E3DD4009B54DA /* cScript.cpp */; }; + 64A90134293E3DD4009B54DA /* cServerData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900A9293E3DD4009B54DA /* cServerData.cpp */; }; + 64A90135293E3DD4009B54DA /* cServerDefinitions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900AB293E3DD4009B54DA /* cServerDefinitions.cpp */; }; + 64A90136293E3DD4009B54DA /* cSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900AE293E3DD4009B54DA /* cSocket.cpp */; }; + 64A90137293E3DD4009B54DA /* cSpawnRegion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900B0293E3DD4009B54DA /* cSpawnRegion.cpp */; }; + 64A90138293E3DD4009B54DA /* cThreadQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900B2293E3DD4009B54DA /* cThreadQueue.cpp */; }; + 64A90139293E3DD4009B54DA /* cVersionClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900B4293E3DD4009B54DA /* cVersionClass.cpp */; }; + 64A9013A293E3DD4009B54DA /* cWeather.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900B6293E3DD4009B54DA /* cWeather.cpp */; }; + 64A9013B293E3DD4009B54DA /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900B8293E3DD4009B54DA /* Dictionary.cpp */; }; + 64A9013C293E3DD4009B54DA /* dist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900BA293E3DD4009B54DA /* dist.cpp */; }; + 64A9013D293E3DD4009B54DA /* effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900BB293E3DD4009B54DA /* effect.cpp */; }; + 64A9013E293E3DD4009B54DA /* EventTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900BD293E3DD4009B54DA /* EventTimer.cpp */; }; + 64A9013F293E3DD4009B54DA /* fileio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900BF293E3DD4009B54DA /* fileio.cpp */; }; + 64A90140293E3DD4009B54DA /* findfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900C0293E3DD4009B54DA /* findfuncs.cpp */; }; + 64A90141293E3DD4009B54DA /* gumps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900C4293E3DD4009B54DA /* gumps.cpp */; }; + 64A90142293E3DD4009B54DA /* house.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900C5293E3DD4009B54DA /* house.cpp */; }; + 64A90143293E3DD4009B54DA /* IP4Address.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900C6293E3DD4009B54DA /* IP4Address.cpp */; }; + 64A90144293E3DD4009B54DA /* items.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900C8293E3DD4009B54DA /* items.cpp */; }; + 64A90145293E3DD4009B54DA /* jail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900C9293E3DD4009B54DA /* jail.cpp */; }; + 64A90146293E3DD4009B54DA /* JSEncapsulate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900CB293E3DD4009B54DA /* JSEncapsulate.cpp */; }; + 64A90147293E3DD4009B54DA /* lineofsight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900CD293E3DD4009B54DA /* lineofsight.cpp */; }; + 64A90148293E3DD4009B54DA /* magic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900CE293E3DD4009B54DA /* magic.cpp */; }; + 64A9014A293E3DD4009B54DA /* mapstuff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900D2293E3DD4009B54DA /* mapstuff.cpp */; }; + 64A9014B293E3DD4009B54DA /* movement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900D4293E3DD4009B54DA /* movement.cpp */; }; + 64A9014C293E3DD4009B54DA /* msgboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900D6293E3DD4009B54DA /* msgboard.cpp */; }; + 64A9014D293E3DD4009B54DA /* MultiMul.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900D8293E3DD4009B54DA /* MultiMul.cpp */; }; + 64A9014E293E3DD4009B54DA /* network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900DA293E3DD4009B54DA /* network.cpp */; }; + 64A9014F293E3DD4009B54DA /* npcs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900DC293E3DD4009B54DA /* npcs.cpp */; }; + 64A90150293E3DD4009B54DA /* ObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900DD293E3DD4009B54DA /* ObjectFactory.cpp */; }; + 64A90151293E3DD4009B54DA /* osunique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900DF293E3DD4009B54DA /* osunique.cpp */; }; + 64A90152293E3DD4009B54DA /* PartySystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900E2293E3DD4009B54DA /* PartySystem.cpp */; }; + 64A90153293E3DD4009B54DA /* pcmanage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900E4293E3DD4009B54DA /* pcmanage.cpp */; }; + 64A90154293E3DD4009B54DA /* quantityfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900E7293E3DD4009B54DA /* quantityfuncs.cpp */; }; + 64A90155293E3DD4009B54DA /* queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900E8293E3DD4009B54DA /* queue.cpp */; }; + 64A90156293E3DD4009B54DA /* regions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900E9293E3DD4009B54DA /* regions.cpp */; }; + 64A90157293E3DD4009B54DA /* scriptc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900EC293E3DD4009B54DA /* scriptc.cpp */; }; + 64A90158293E3DD4009B54DA /* SEFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900EE293E3DD4009B54DA /* SEFunctions.cpp */; }; + 64A90159293E3DD4009B54DA /* skills.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900F0293E3DD4009B54DA /* skills.cpp */; }; + 64A9015A293E3DD4009B54DA /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900F2293E3DD4009B54DA /* sound.cpp */; }; + 64A9015B293E3DD4009B54DA /* speech.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900F3293E3DD4009B54DA /* speech.cpp */; }; + 64A9015C293E3DD4009B54DA /* ssection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900F5293E3DD4009B54DA /* ssection.cpp */; }; + 64A9015D293E3DD4009B54DA /* StringUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900F7293E3DD4009B54DA /* StringUtility.cpp */; }; + 64A9015E293E3DD4009B54DA /* targeting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900F9293E3DD4009B54DA /* targeting.cpp */; }; + 64A9015F293E3DD4009B54DA /* TimeUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900FB293E3DD4009B54DA /* TimeUtility.cpp */; }; + 64A90160293E3DD4009B54DA /* townregion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900FD293E3DD4009B54DA /* townregion.cpp */; }; + 64A90161293E3DD4009B54DA /* trade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A900FF293E3DD4009B54DA /* trade.cpp */; }; + 64A90162293E3DD4009B54DA /* UOPData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90101293E3DD4009B54DA /* UOPData.cpp */; }; + 64A90163293E3DD4009B54DA /* uox3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90103293E3DD4009B54DA /* uox3.cpp */; }; + 64A90164293E3DD4009B54DA /* UOXJSMethods.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9010B293E3DD4009B54DA /* UOXJSMethods.cpp */; }; + 64A90165293E3DD4009B54DA /* UOXJSPropertyFuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A9010E293E3DD4009B54DA /* UOXJSPropertyFuncs.cpp */; }; + 64A90166293E3DD4009B54DA /* vendor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90113293E3DD4009B54DA /* vendor.cpp */; }; + 64A90167293E3DD4009B54DA /* weight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90114293E3DD4009B54DA /* weight.cpp */; }; + 64A90168293E3DD4009B54DA /* wholist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90116293E3DD4009B54DA /* wholist.cpp */; }; + 64A90169293E3DD4009B54DA /* worldmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90118293E3DD4009B54DA /* worldmain.cpp */; }; + 64A9016D293E3EED009B54DA /* libjscript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A9016C293E3EED009B54DA /* libjscript.a */; }; + 64A9016F293E3EFD009B54DA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A9016E293E3EF5009B54DA /* libz.tbd */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ - 648AF6E227CFEF79009327DE /* CopyFiles */ = { + 64A90068293E3DA3009B54DA /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; @@ -103,473 +103,454 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 6452D32027D2E13B00E5AFB4 /* osunique.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = osunique.hpp; sourceTree = ""; }; - 6452D32127D3A7CB00E5AFB4 /* osunique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = osunique.cpp; sourceTree = ""; }; - 6453667D2859FB340064E649 /* Changelog.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Changelog.txt; sourceTree = ""; }; - 6453667E285A04130064E649 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 648AF6E427CFEF79009327DE /* uox3 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = uox3; sourceTree = BUILT_PRODUCTS_DIR; }; - 648AF6F627CFF2CC009327DE /* cConsole.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cConsole.cpp; sourceTree = ""; }; - 648AF6F727CFF2CC009327DE /* dist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dist.cpp; sourceTree = ""; }; - 648AF6F827CFF2CC009327DE /* cSpawnRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cSpawnRegion.h; sourceTree = ""; }; - 648AF6F927CFF2CC009327DE /* skills.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = skills.h; sourceTree = ""; }; - 648AF6FA27CFF2CC009327DE /* calcfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = calcfuncs.cpp; sourceTree = ""; }; - 648AF6FB27CFF2CC009327DE /* books.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = books.h; sourceTree = ""; }; - 648AF6FC27CFF2CC009327DE /* CPacketReceive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPacketReceive.cpp; sourceTree = ""; }; - 648AF6FD27CFF2CC009327DE /* cScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cScript.cpp; sourceTree = ""; }; - 648AF6FE27CFF2CC009327DE /* ConfigOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfigOS.h; sourceTree = ""; }; - 648AF6FF27CFF2CC009327DE /* msgboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msgboard.h; sourceTree = ""; }; - 648AF70027CFF2CC009327DE /* uox3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uox3.cpp; sourceTree = ""; }; - 648AF70127CFF2CC009327DE /* boats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boats.cpp; sourceTree = ""; }; - 648AF70227CFF2CC009327DE /* IP4Address.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IP4Address.cpp; sourceTree = ""; }; - 648AF70327CFF2CC009327DE /* cGuild.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cGuild.h; sourceTree = ""; }; - 648AF70427CFF2CC009327DE /* UOXJSMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSMethods.h; sourceTree = ""; }; - 648AF70527CFF2CC009327DE /* cItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cItem.cpp; sourceTree = ""; }; - 648AF70627CFF2CC009327DE /* worldmain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = worldmain.h; sourceTree = ""; }; - 648AF70727CFF2CC009327DE /* worldmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = worldmain.cpp; sourceTree = ""; }; - 648AF70827CFF2CC009327DE /* cBaseobject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cBaseobject.cpp; sourceTree = ""; }; - 648AF70A27CFF2CC009327DE /* cServerData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cServerData.cpp; sourceTree = ""; }; - 648AF70B27CFF2CC009327DE /* TimeUtility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TimeUtility.hpp; sourceTree = ""; }; - 648AF70C27CFF2CC009327DE /* townregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = townregion.h; sourceTree = ""; }; - 648AF70D27CFF2CC009327DE /* magic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = magic.h; sourceTree = ""; }; - 648AF70E27CFF2CC009327DE /* cMultiObj.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cMultiObj.cpp; sourceTree = ""; }; - 648AF70F27CFF2CC009327DE /* cmdtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmdtable.h; sourceTree = ""; }; - 648AF71027CFF2CC009327DE /* jail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jail.h; sourceTree = ""; }; - 648AF71127CFF2CC009327DE /* cServerDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cServerDefinitions.h; sourceTree = ""; }; - 648AF71227CFF2CC009327DE /* jail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jail.cpp; sourceTree = ""; }; - 648AF71327CFF2CC009327DE /* movement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = movement.h; sourceTree = ""; }; - 648AF71427CFF2CC009327DE /* cSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cSocket.cpp; sourceTree = ""; }; - 648AF71527CFF2CC009327DE /* mapstuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mapstuff.h; sourceTree = ""; }; - 648AF71727CFF2CC009327DE /* queue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = queue.cpp; sourceTree = ""; }; - 648AF71927CFF2CC009327DE /* CResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CResponse.h; sourceTree = ""; }; - 648AF71A27CFF2CC009327DE /* UOXJSPropertySpecs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSPropertySpecs.h; sourceTree = ""; }; - 648AF71B27CFF2CC009327DE /* SEFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SEFunctions.cpp; sourceTree = ""; }; - 648AF71C27CFF2CC009327DE /* cEffects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cEffects.h; sourceTree = ""; }; - 648AF71D27CFF2CC009327DE /* archive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = archive.cpp; sourceTree = ""; }; - 648AF71E27CFF2CC009327DE /* Dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Dictionary.h; sourceTree = ""; }; - 648AF71F27CFF2CC009327DE /* mapclasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mapclasses.h; sourceTree = ""; }; - 648AF72027CFF2CC009327DE /* lineofsight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lineofsight.cpp; sourceTree = ""; }; - 648AF72127CFF2CC009327DE /* uoxstruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uoxstruct.h; sourceTree = ""; }; - 648AF72227CFF2CC009327DE /* ObjectFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectFactory.h; sourceTree = ""; }; - 648AF72327CFF2CC009327DE /* uox3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uox3.h; sourceTree = ""; }; - 648AF72427CFF2CC009327DE /* cAccountClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cAccountClass.h; sourceTree = ""; }; - 648AF72527CFF2CC009327DE /* TimeUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeUtility.cpp; sourceTree = ""; }; - 648AF72627CFF2CC009327DE /* townregion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = townregion.cpp; sourceTree = ""; }; - 648AF72727CFF2CC009327DE /* StringUtility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = StringUtility.hpp; sourceTree = ""; }; - 648AF72827CFF2CC009327DE /* cScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cScript.h; sourceTree = ""; }; - 648AF72927CFF2CC009327DE /* SEFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEFunctions.h; sourceTree = ""; }; - 648AF72A27CFF2CC009327DE /* UOXJSClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSClasses.h; sourceTree = ""; }; - 648AF72B27CFF2CC009327DE /* house.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = house.cpp; sourceTree = ""; }; - 648AF72C27CFF2CC009327DE /* cMagic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cMagic.h; sourceTree = ""; }; - 648AF72D27CFF2CC009327DE /* CResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CResponse.cpp; sourceTree = ""; }; - 648AF72E27CFF2CC009327DE /* cRaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cRaces.h; sourceTree = ""; }; - 648AF72F27CFF2CC009327DE /* UOXJSPropertyFuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UOXJSPropertyFuncs.cpp; sourceTree = ""; }; - 648AF73027CFF2CC009327DE /* cChar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cChar.h; sourceTree = ""; }; - 648AF73127CFF2CC009327DE /* GenericList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericList.h; sourceTree = ""; }; - 648AF73227CFF2CC009327DE /* UOPData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UOPData.cpp; sourceTree = ""; }; - 648AF73327CFF2CC009327DE /* UOXJSMethods.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UOXJSMethods.cpp; sourceTree = ""; }; - 648AF73427CFF2CC009327DE /* cRaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cRaces.cpp; sourceTree = ""; }; - 648AF73527CFF2CC009327DE /* cItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cItem.h; sourceTree = ""; }; - 648AF73627CFF2CD009327DE /* MultiMul.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiMul.cpp; sourceTree = ""; }; - 648AF73727CFF2CD009327DE /* targeting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = targeting.cpp; sourceTree = ""; }; - 648AF73827CFF2CD009327DE /* skills.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skills.cpp; sourceTree = ""; }; - 648AF73927CFF2CD009327DE /* power.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = power.h; sourceTree = ""; }; - 648AF73A27CFF2CD009327DE /* findfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = findfuncs.cpp; sourceTree = ""; }; - 648AF73B27CFF2CD009327DE /* Dictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Dictionary.cpp; sourceTree = ""; }; - 648AF73C27CFF2CD009327DE /* CJSEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSEngine.h; sourceTree = ""; }; - 648AF73D27CFF2CD009327DE /* CJSEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CJSEngine.cpp; sourceTree = ""; }; - 648AF73E27CFF2CD009327DE /* UOXJSPropertyFuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSPropertyFuncs.h; sourceTree = ""; }; - 648AF73F27CFF2CD009327DE /* magic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = magic.cpp; sourceTree = ""; }; - 648AF74027CFF2CD009327DE /* commands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = commands.h; sourceTree = ""; }; - 648AF74127CFF2CD009327DE /* funcdecl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = funcdecl.h; sourceTree = ""; }; - 648AF74227CFF2CD009327DE /* cGuild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cGuild.cpp; sourceTree = ""; }; - 648AF74327CFF2CD009327DE /* EventTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventTimer.cpp; sourceTree = ""; }; - 648AF74427CFF2CD009327DE /* cChar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cChar.cpp; sourceTree = ""; }; - 648AF74527CFF2CD009327DE /* commands.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commands.cpp; sourceTree = ""; }; - 648AF74627CFF2CD009327DE /* cServerData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cServerData.h; sourceTree = ""; }; - 648AF74727CFF2CD009327DE /* cThreadQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cThreadQueue.cpp; sourceTree = ""; }; - 648AF74827CFF2CD009327DE /* cHTMLSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cHTMLSystem.cpp; sourceTree = ""; }; - 648AF74927CFF2CD009327DE /* combat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combat.h; sourceTree = ""; }; - 648AF74A27CFF2CD009327DE /* network.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = network.cpp; sourceTree = ""; }; - 648AF74B27CFF2CD009327DE /* scriptc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptc.h; sourceTree = ""; }; - 648AF74C27CFF2CD009327DE /* gumps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gumps.cpp; sourceTree = ""; }; - 648AF74D27CFF2CD009327DE /* sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sound.cpp; sourceTree = ""; }; - 648AF74E27CFF2CD009327DE /* teffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = teffect.h; sourceTree = ""; }; - 648AF74F27CFF2CD009327DE /* cHTMLSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cHTMLSystem.h; sourceTree = ""; }; - 648AF75027CFF2CD009327DE /* cConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cConsole.h; sourceTree = ""; }; - 648AF75127CFF2CD009327DE /* cmdtable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cmdtable.cpp; sourceTree = ""; }; - 648AF75227CFF2CD009327DE /* cDice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cDice.cpp; sourceTree = ""; }; - 648AF75327CFF2CD009327DE /* items.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = items.cpp; sourceTree = ""; }; - 648AF75427CFF2CD009327DE /* cVersionClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cVersionClass.cpp; sourceTree = ""; }; - 648AF75527CFF2CD009327DE /* cdice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdice.h; sourceTree = ""; }; - 648AF75627CFF2CD009327DE /* regions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regions.cpp; sourceTree = ""; }; - 648AF75727CFF2CD009327DE /* Prerequisites.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prerequisites.h; sourceTree = ""; }; - 648AF75827CFF2CD009327DE /* cServerDefinitions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cServerDefinitions.cpp; sourceTree = ""; }; - 648AF75927CFF2CD009327DE /* ssection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssection.cpp; sourceTree = ""; }; - 648AF75A27CFF2CD009327DE /* UOXJSPropertyEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSPropertyEnums.h; sourceTree = ""; }; - 648AF75B27CFF2CD009327DE /* UOXStdHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXStdHeaders.h; sourceTree = ""; }; - 648AF75C27CFF2CD009327DE /* CPacketReceive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPacketReceive.h; sourceTree = ""; }; - 648AF75D27CFF2CD009327DE /* weight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = weight.h; sourceTree = ""; }; - 648AF75E27CFF2CD009327DE /* scriptc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptc.cpp; sourceTree = ""; }; - 648AF75F27CFF2CD009327DE /* EventTimer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EventTimer.hpp; sourceTree = ""; }; - 648AF76027CFF2CD009327DE /* JSEncapsulate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSEncapsulate.h; sourceTree = ""; }; - 648AF76127CFF2CD009327DE /* mapstuff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mapstuff.cpp; sourceTree = ""; }; - 648AF76227CFF2CD009327DE /* cMultiObj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cMultiObj.h; sourceTree = ""; }; - 648AF76327CFF2CD009327DE /* cBaseObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cBaseObject.h; sourceTree = ""; }; - 648AF76427CFF2CD009327DE /* msgboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = msgboard.cpp; sourceTree = ""; }; - 648AF76527CFF2CD009327DE /* cWeather.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cWeather.cpp; sourceTree = ""; }; - 648AF76627CFF2CD009327DE /* cPlayerAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cPlayerAction.cpp; sourceTree = ""; }; - 648AF76727CFF2CD009327DE /* gump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gump.h; sourceTree = ""; }; - 648AF76827CFF2CD009327DE /* movement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = movement.cpp; sourceTree = ""; }; - 648AF76927CFF2CD009327DE /* cSpawnRegion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cSpawnRegion.cpp; sourceTree = ""; }; - 648AF76A27CFF2CD009327DE /* cWeather.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cWeather.hpp; sourceTree = ""; }; - 648AF76B27CFF2CD009327DE /* PartySystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PartySystem.cpp; sourceTree = ""; }; - 648AF76C27CFF2CD009327DE /* regions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regions.h; sourceTree = ""; }; - 648AF76D27CFF2CD009327DE /* MultiMul.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MultiMul.hpp; sourceTree = ""; }; - 648AF76E27CFF2CD009327DE /* vendor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vendor.cpp; sourceTree = ""; }; - 648AF76F27CFF2CD009327DE /* cThreadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cThreadQueue.h; sourceTree = ""; }; - 648AF77027CFF2CD009327DE /* fileio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fileio.cpp; sourceTree = ""; }; - 648AF77127CFF2CD009327DE /* CPacketSend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPacketSend.h; sourceTree = ""; }; - 648AF77227CFF2CD009327DE /* CJSMapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CJSMapping.cpp; sourceTree = ""; }; - 648AF77327CFF2CD009327DE /* ssection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssection.h; sourceTree = ""; }; - 648AF77427CFF2CD009327DE /* IP4Address.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IP4Address.hpp; sourceTree = ""; }; - 648AF77527CFF2CD009327DE /* books.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = books.cpp; sourceTree = ""; }; - 648AF77627CFF2CD009327DE /* CPacketSend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPacketSend.cpp; sourceTree = ""; }; - 648AF77727CFF2CD009327DE /* network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = network.h; sourceTree = ""; }; - 648AF77827CFF2CD009327DE /* PageVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageVector.h; sourceTree = ""; }; - 648AF77927CFF2CD009327DE /* StringUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringUtility.cpp; sourceTree = ""; }; - 648AF77A27CFF2CD009327DE /* quantityfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quantityfuncs.cpp; sourceTree = ""; }; - 648AF77C27CFF2CD009327DE /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = ""; }; - 648AF77E27CFF2CD009327DE /* wholist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wholist.h; sourceTree = ""; }; - 648AF77F27CFF2CD009327DE /* cAccountClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cAccountClass.cpp; sourceTree = ""; }; - 648AF78027CFF2CD009327DE /* ObjectFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjectFactory.cpp; sourceTree = ""; }; - 648AF78127CFF2CD009327DE /* npcs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = npcs.cpp; sourceTree = ""; }; - 648AF78227CFF2CD009327DE /* PartySystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PartySystem.h; sourceTree = ""; }; - 648AF78327CFF2CD009327DE /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = ""; }; - 648AF78427CFF2CD009327DE /* wholist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wholist.cpp; sourceTree = ""; }; - 648AF78527CFF2CD009327DE /* combat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combat.cpp; sourceTree = ""; }; - 648AF78627CFF2CD009327DE /* classes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = classes.h; sourceTree = ""; }; - 648AF78727CFF2CD009327DE /* CGump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CGump.cpp; sourceTree = ""; }; - 648AF78827CFF2CD009327DE /* UOPData.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UOPData.hpp; sourceTree = ""; }; - 648AF78927CFF2CD009327DE /* JSEncapsulate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSEncapsulate.cpp; sourceTree = ""; }; - 648AF78A27CFF2CD009327DE /* ai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai.cpp; sourceTree = ""; }; - 648AF78B27CFF2CD009327DE /* pcmanage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcmanage.cpp; sourceTree = ""; }; - 648AF78C27CFF2CD009327DE /* CJSMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSMapping.h; sourceTree = ""; }; - 648AF78D27CFF2CD009327DE /* cVersionClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cVersionClass.h; sourceTree = ""; }; - 648AF78E27CFF2CD009327DE /* trade.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trade.cpp; sourceTree = ""; }; - 648AF78F27CFF2CD009327DE /* enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enums.h; sourceTree = ""; }; - 648AF79027CFF2CD009327DE /* speech.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speech.h; sourceTree = ""; }; - 648AF79127CFF2CD009327DE /* weight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = weight.cpp; sourceTree = ""; }; - 648AF79227CFF2CD009327DE /* cSkillClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cSkillClass.h; sourceTree = ""; }; - 648AF79327CFF2CD009327DE /* effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = effect.cpp; sourceTree = ""; }; - 648AF79427CFF2CD009327DE /* cSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cSocket.h; sourceTree = ""; }; - 648AF79527CFF2CD009327DE /* speech.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = speech.cpp; sourceTree = ""; }; - 64E0066829354B1800BEBA8F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 64E0066D2935A38900BEBA8F /* libjs.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjs.a; path = ../spidermonkey/libjs.a; sourceTree = ""; }; + 64A9006A293E3DA3009B54DA /* uox3 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = uox3; sourceTree = BUILT_PRODUCTS_DIR; }; + 64A90075293E3DD4009B54DA /* ai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai.cpp; sourceTree = ""; }; + 64A90076293E3DD4009B54DA /* archive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = archive.cpp; sourceTree = ""; }; + 64A90077293E3DD4009B54DA /* boats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boats.cpp; sourceTree = ""; }; + 64A90078293E3DD4009B54DA /* books.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = books.cpp; sourceTree = ""; }; + 64A90079293E3DD4009B54DA /* books.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = books.h; sourceTree = ""; }; + 64A9007A293E3DD4009B54DA /* cAccountClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cAccountClass.cpp; sourceTree = ""; }; + 64A9007B293E3DD4009B54DA /* cAccountClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cAccountClass.h; sourceTree = ""; }; + 64A9007C293E3DD4009B54DA /* calcfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = calcfuncs.cpp; sourceTree = ""; }; + 64A9007D293E3DD4009B54DA /* cBaseobject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cBaseobject.cpp; sourceTree = ""; }; + 64A9007E293E3DD4009B54DA /* cBaseObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cBaseObject.h; sourceTree = ""; }; + 64A9007F293E3DD4009B54DA /* cChar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cChar.cpp; sourceTree = ""; }; + 64A90080293E3DD4009B54DA /* cChar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cChar.h; sourceTree = ""; }; + 64A90081293E3DD4009B54DA /* cConsole.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cConsole.cpp; sourceTree = ""; }; + 64A90082293E3DD4009B54DA /* cConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cConsole.h; sourceTree = ""; }; + 64A90083293E3DD4009B54DA /* cDice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cDice.cpp; sourceTree = ""; }; + 64A90084293E3DD4009B54DA /* cdice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdice.h; sourceTree = ""; }; + 64A90085293E3DD4009B54DA /* cEffects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cEffects.h; sourceTree = ""; }; + 64A90086293E3DD4009B54DA /* cGuild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cGuild.cpp; sourceTree = ""; }; + 64A90087293E3DD4009B54DA /* cGuild.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cGuild.h; sourceTree = ""; }; + 64A90088293E3DD4009B54DA /* CGump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CGump.cpp; sourceTree = ""; }; + 64A90089293E3DD4009B54DA /* Changelog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changelog.txt; sourceTree = ""; }; + 64A9008A293E3DD4009B54DA /* cHTMLSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cHTMLSystem.cpp; sourceTree = ""; }; + 64A9008B293E3DD4009B54DA /* cHTMLSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cHTMLSystem.h; sourceTree = ""; }; + 64A9008C293E3DD4009B54DA /* cItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cItem.cpp; sourceTree = ""; }; + 64A9008D293E3DD4009B54DA /* cItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cItem.h; sourceTree = ""; }; + 64A9008E293E3DD4009B54DA /* CJSEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CJSEngine.cpp; sourceTree = ""; }; + 64A9008F293E3DD4009B54DA /* CJSEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSEngine.h; sourceTree = ""; }; + 64A90090293E3DD4009B54DA /* CJSMapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CJSMapping.cpp; sourceTree = ""; }; + 64A90091293E3DD4009B54DA /* CJSMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSMapping.h; sourceTree = ""; }; + 64A90092293E3DD4009B54DA /* classes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = classes.h; sourceTree = ""; }; + 64A90093293E3DD4009B54DA /* cMagic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cMagic.h; sourceTree = ""; }; + 64A90095293E3DD4009B54DA /* cmdtable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cmdtable.cpp; sourceTree = ""; }; + 64A90096293E3DD4009B54DA /* cmdtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmdtable.h; sourceTree = ""; }; + 64A90097293E3DD4009B54DA /* cMultiObj.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cMultiObj.cpp; sourceTree = ""; }; + 64A90098293E3DD4009B54DA /* cMultiObj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cMultiObj.h; sourceTree = ""; }; + 64A90099293E3DD4009B54DA /* combat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combat.cpp; sourceTree = ""; }; + 64A9009A293E3DD4009B54DA /* combat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combat.h; sourceTree = ""; }; + 64A9009B293E3DD4009B54DA /* commands.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commands.cpp; sourceTree = ""; }; + 64A9009C293E3DD4009B54DA /* commands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = commands.h; sourceTree = ""; }; + 64A9009D293E3DD4009B54DA /* ConfigOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfigOS.h; sourceTree = ""; }; + 64A9009E293E3DD4009B54DA /* CPacketReceive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPacketReceive.cpp; sourceTree = ""; }; + 64A9009F293E3DD4009B54DA /* CPacketReceive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPacketReceive.h; sourceTree = ""; }; + 64A900A0293E3DD4009B54DA /* CPacketSend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPacketSend.cpp; sourceTree = ""; }; + 64A900A1293E3DD4009B54DA /* CPacketSend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPacketSend.h; sourceTree = ""; }; + 64A900A2293E3DD4009B54DA /* cPlayerAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cPlayerAction.cpp; sourceTree = ""; }; + 64A900A3293E3DD4009B54DA /* cRaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cRaces.cpp; sourceTree = ""; }; + 64A900A4293E3DD4009B54DA /* cRaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cRaces.h; sourceTree = ""; }; + 64A900A5293E3DD4009B54DA /* CResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CResponse.cpp; sourceTree = ""; }; + 64A900A6293E3DD4009B54DA /* CResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CResponse.h; sourceTree = ""; }; + 64A900A7293E3DD4009B54DA /* cScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cScript.cpp; sourceTree = ""; }; + 64A900A8293E3DD4009B54DA /* cScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cScript.h; sourceTree = ""; }; + 64A900A9293E3DD4009B54DA /* cServerData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cServerData.cpp; sourceTree = ""; }; + 64A900AA293E3DD4009B54DA /* cServerData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cServerData.h; sourceTree = ""; }; + 64A900AB293E3DD4009B54DA /* cServerDefinitions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cServerDefinitions.cpp; sourceTree = ""; }; + 64A900AC293E3DD4009B54DA /* cServerDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cServerDefinitions.h; sourceTree = ""; }; + 64A900AD293E3DD4009B54DA /* cSkillClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cSkillClass.h; sourceTree = ""; }; + 64A900AE293E3DD4009B54DA /* cSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cSocket.cpp; sourceTree = ""; }; + 64A900AF293E3DD4009B54DA /* cSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cSocket.h; sourceTree = ""; }; + 64A900B0293E3DD4009B54DA /* cSpawnRegion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cSpawnRegion.cpp; sourceTree = ""; }; + 64A900B1293E3DD4009B54DA /* cSpawnRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cSpawnRegion.h; sourceTree = ""; }; + 64A900B2293E3DD4009B54DA /* cThreadQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cThreadQueue.cpp; sourceTree = ""; }; + 64A900B3293E3DD4009B54DA /* cThreadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cThreadQueue.h; sourceTree = ""; }; + 64A900B4293E3DD4009B54DA /* cVersionClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cVersionClass.cpp; sourceTree = ""; }; + 64A900B5293E3DD4009B54DA /* cVersionClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cVersionClass.h; sourceTree = ""; }; + 64A900B6293E3DD4009B54DA /* cWeather.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cWeather.cpp; sourceTree = ""; }; + 64A900B7293E3DD4009B54DA /* cWeather.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cWeather.hpp; sourceTree = ""; }; + 64A900B8293E3DD4009B54DA /* Dictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Dictionary.cpp; sourceTree = ""; }; + 64A900B9293E3DD4009B54DA /* Dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Dictionary.h; sourceTree = ""; }; + 64A900BA293E3DD4009B54DA /* dist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dist.cpp; sourceTree = ""; }; + 64A900BB293E3DD4009B54DA /* effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = effect.cpp; sourceTree = ""; }; + 64A900BC293E3DD4009B54DA /* enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enums.h; sourceTree = ""; }; + 64A900BD293E3DD4009B54DA /* EventTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventTimer.cpp; sourceTree = ""; }; + 64A900BE293E3DD4009B54DA /* EventTimer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EventTimer.hpp; sourceTree = ""; }; + 64A900BF293E3DD4009B54DA /* fileio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fileio.cpp; sourceTree = ""; }; + 64A900C0293E3DD4009B54DA /* findfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = findfuncs.cpp; sourceTree = ""; }; + 64A900C1293E3DD4009B54DA /* funcdecl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = funcdecl.h; sourceTree = ""; }; + 64A900C2293E3DD4009B54DA /* GenericList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericList.h; sourceTree = ""; }; + 64A900C3293E3DD4009B54DA /* gump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gump.h; sourceTree = ""; }; + 64A900C4293E3DD4009B54DA /* gumps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gumps.cpp; sourceTree = ""; }; + 64A900C5293E3DD4009B54DA /* house.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = house.cpp; sourceTree = ""; }; + 64A900C6293E3DD4009B54DA /* IP4Address.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IP4Address.cpp; sourceTree = ""; }; + 64A900C7293E3DD4009B54DA /* IP4Address.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IP4Address.hpp; sourceTree = ""; }; + 64A900C8293E3DD4009B54DA /* items.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = items.cpp; sourceTree = ""; }; + 64A900C9293E3DD4009B54DA /* jail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jail.cpp; sourceTree = ""; }; + 64A900CA293E3DD4009B54DA /* jail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jail.h; sourceTree = ""; }; + 64A900CB293E3DD4009B54DA /* JSEncapsulate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSEncapsulate.cpp; sourceTree = ""; }; + 64A900CC293E3DD4009B54DA /* JSEncapsulate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSEncapsulate.h; sourceTree = ""; }; + 64A900CD293E3DD4009B54DA /* lineofsight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lineofsight.cpp; sourceTree = ""; }; + 64A900CE293E3DD4009B54DA /* magic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = magic.cpp; sourceTree = ""; }; + 64A900CF293E3DD4009B54DA /* magic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = magic.h; sourceTree = ""; }; + 64A900D1293E3DD4009B54DA /* mapclasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mapclasses.h; sourceTree = ""; }; + 64A900D2293E3DD4009B54DA /* mapstuff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mapstuff.cpp; sourceTree = ""; }; + 64A900D3293E3DD4009B54DA /* mapstuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mapstuff.h; sourceTree = ""; }; + 64A900D4293E3DD4009B54DA /* movement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = movement.cpp; sourceTree = ""; }; + 64A900D5293E3DD4009B54DA /* movement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = movement.h; sourceTree = ""; }; + 64A900D6293E3DD4009B54DA /* msgboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = msgboard.cpp; sourceTree = ""; }; + 64A900D7293E3DD4009B54DA /* msgboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msgboard.h; sourceTree = ""; }; + 64A900D8293E3DD4009B54DA /* MultiMul.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiMul.cpp; sourceTree = ""; }; + 64A900D9293E3DD4009B54DA /* MultiMul.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MultiMul.hpp; sourceTree = ""; }; + 64A900DA293E3DD4009B54DA /* network.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = network.cpp; sourceTree = ""; }; + 64A900DB293E3DD4009B54DA /* network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = network.h; sourceTree = ""; }; + 64A900DC293E3DD4009B54DA /* npcs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = npcs.cpp; sourceTree = ""; }; + 64A900DD293E3DD4009B54DA /* ObjectFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjectFactory.cpp; sourceTree = ""; }; + 64A900DE293E3DD4009B54DA /* ObjectFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectFactory.h; sourceTree = ""; }; + 64A900DF293E3DD4009B54DA /* osunique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = osunique.cpp; sourceTree = ""; }; + 64A900E0293E3DD4009B54DA /* osunique.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = osunique.hpp; sourceTree = ""; }; + 64A900E1293E3DD4009B54DA /* PageVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageVector.h; sourceTree = ""; }; + 64A900E2293E3DD4009B54DA /* PartySystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PartySystem.cpp; sourceTree = ""; }; + 64A900E3293E3DD4009B54DA /* PartySystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PartySystem.h; sourceTree = ""; }; + 64A900E4293E3DD4009B54DA /* pcmanage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcmanage.cpp; sourceTree = ""; }; + 64A900E5293E3DD4009B54DA /* power.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = power.h; sourceTree = ""; }; + 64A900E6293E3DD4009B54DA /* Prerequisites.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prerequisites.h; sourceTree = ""; }; + 64A900E7293E3DD4009B54DA /* quantityfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quantityfuncs.cpp; sourceTree = ""; }; + 64A900E8293E3DD4009B54DA /* queue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = queue.cpp; sourceTree = ""; }; + 64A900E9293E3DD4009B54DA /* regions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regions.cpp; sourceTree = ""; }; + 64A900EA293E3DD4009B54DA /* regions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regions.h; sourceTree = ""; }; + 64A900EC293E3DD4009B54DA /* scriptc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptc.cpp; sourceTree = ""; }; + 64A900ED293E3DD4009B54DA /* scriptc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptc.h; sourceTree = ""; }; + 64A900EE293E3DD4009B54DA /* SEFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SEFunctions.cpp; sourceTree = ""; }; + 64A900EF293E3DD4009B54DA /* SEFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEFunctions.h; sourceTree = ""; }; + 64A900F0293E3DD4009B54DA /* skills.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skills.cpp; sourceTree = ""; }; + 64A900F1293E3DD4009B54DA /* skills.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = skills.h; sourceTree = ""; }; + 64A900F2293E3DD4009B54DA /* sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sound.cpp; sourceTree = ""; }; + 64A900F3293E3DD4009B54DA /* speech.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = speech.cpp; sourceTree = ""; }; + 64A900F4293E3DD4009B54DA /* speech.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speech.h; sourceTree = ""; }; + 64A900F5293E3DD4009B54DA /* ssection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssection.cpp; sourceTree = ""; }; + 64A900F6293E3DD4009B54DA /* ssection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssection.h; sourceTree = ""; }; + 64A900F7293E3DD4009B54DA /* StringUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringUtility.cpp; sourceTree = ""; }; + 64A900F8293E3DD4009B54DA /* StringUtility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = StringUtility.hpp; sourceTree = ""; }; + 64A900F9293E3DD4009B54DA /* targeting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = targeting.cpp; sourceTree = ""; }; + 64A900FA293E3DD4009B54DA /* teffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = teffect.h; sourceTree = ""; }; + 64A900FB293E3DD4009B54DA /* TimeUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeUtility.cpp; sourceTree = ""; }; + 64A900FC293E3DD4009B54DA /* TimeUtility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TimeUtility.hpp; sourceTree = ""; }; + 64A900FD293E3DD4009B54DA /* townregion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = townregion.cpp; sourceTree = ""; }; + 64A900FE293E3DD4009B54DA /* townregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = townregion.h; sourceTree = ""; }; + 64A900FF293E3DD4009B54DA /* trade.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trade.cpp; sourceTree = ""; }; + 64A90100293E3DD4009B54DA /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = ""; }; + 64A90101293E3DD4009B54DA /* UOPData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UOPData.cpp; sourceTree = ""; }; + 64A90102293E3DD4009B54DA /* UOPData.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UOPData.hpp; sourceTree = ""; }; + 64A90103293E3DD4009B54DA /* uox3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uox3.cpp; sourceTree = ""; }; + 64A90104293E3DD4009B54DA /* uox3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uox3.h; sourceTree = ""; }; + 64A9010A293E3DD4009B54DA /* UOXJSClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSClasses.h; sourceTree = ""; }; + 64A9010B293E3DD4009B54DA /* UOXJSMethods.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UOXJSMethods.cpp; sourceTree = ""; }; + 64A9010C293E3DD4009B54DA /* UOXJSMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSMethods.h; sourceTree = ""; }; + 64A9010D293E3DD4009B54DA /* UOXJSPropertyEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSPropertyEnums.h; sourceTree = ""; }; + 64A9010E293E3DD4009B54DA /* UOXJSPropertyFuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UOXJSPropertyFuncs.cpp; sourceTree = ""; }; + 64A9010F293E3DD4009B54DA /* UOXJSPropertyFuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSPropertyFuncs.h; sourceTree = ""; }; + 64A90110293E3DD4009B54DA /* UOXJSPropertySpecs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXJSPropertySpecs.h; sourceTree = ""; }; + 64A90111293E3DD4009B54DA /* UOXStdHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOXStdHeaders.h; sourceTree = ""; }; + 64A90112293E3DD4009B54DA /* uoxstruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uoxstruct.h; sourceTree = ""; }; + 64A90113293E3DD4009B54DA /* vendor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vendor.cpp; sourceTree = ""; }; + 64A90114293E3DD4009B54DA /* weight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = weight.cpp; sourceTree = ""; }; + 64A90115293E3DD4009B54DA /* weight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = weight.h; sourceTree = ""; }; + 64A90116293E3DD4009B54DA /* wholist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wholist.cpp; sourceTree = ""; }; + 64A90117293E3DD4009B54DA /* wholist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wholist.h; sourceTree = ""; }; + 64A90118293E3DD4009B54DA /* worldmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = worldmain.cpp; sourceTree = ""; }; + 64A90119293E3DD4009B54DA /* worldmain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = worldmain.h; sourceTree = ""; }; + 64A9016C293E3EED009B54DA /* libjscript.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libjscript.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 64A9016E293E3EF5009B54DA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 648AF6E127CFEF79009327DE /* Frameworks */ = { + 64A90067293E3DA3009B54DA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64E0066E2935A39A00BEBA8F /* libjs.a in Frameworks */, - 64E0066C2935A37500BEBA8F /* libz.tbd in Frameworks */, + 64A9016D293E3EED009B54DA /* libjscript.a in Frameworks */, + 64A9016F293E3EFD009B54DA /* libz.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 6400D388284CE45700AADA54 /* Base Objects */ = { + 64A90061293E3DA3009B54DA = { isa = PBXGroup; children = ( - 648AF70127CFF2CC009327DE /* boats.cpp */, - 648AF70827CFF2CC009327DE /* cBaseobject.cpp */, - 648AF76327CFF2CD009327DE /* cBaseObject.h */, - 648AF74427CFF2CD009327DE /* cChar.cpp */, - 648AF73027CFF2CC009327DE /* cChar.h */, - 648AF74227CFF2CD009327DE /* cGuild.cpp */, - 648AF70327CFF2CC009327DE /* cGuild.h */, - 648AF70527CFF2CC009327DE /* cItem.cpp */, - 648AF73527CFF2CC009327DE /* cItem.h */, - 648AF70E27CFF2CC009327DE /* cMultiObj.cpp */, - 648AF76227CFF2CD009327DE /* cMultiObj.h */, - 648AF74127CFF2CD009327DE /* funcdecl.h */, - 648AF78027CFF2CD009327DE /* ObjectFactory.cpp */, - 648AF72227CFF2CC009327DE /* ObjectFactory.h */, - 648AF77827CFF2CD009327DE /* PageVector.h */, - 648AF71727CFF2CC009327DE /* queue.cpp */, - 648AF79527CFF2CD009327DE /* speech.cpp */, - 648AF79027CFF2CD009327DE /* speech.h */, - 648AF72627CFF2CC009327DE /* townregion.cpp */, - 648AF70C27CFF2CC009327DE /* townregion.h */, - 648AF72127CFF2CC009327DE /* uoxstruct.h */, + 64A90074293E3DD4009B54DA /* source */, + 64A9006B293E3DA3009B54DA /* Products */, + 64A9016B293E3EED009B54DA /* Frameworks */, ); - name = "Base Objects"; sourceTree = ""; }; - 6400D389284CE53500AADA54 /* JSEngine */ = { + 64A9006B293E3DA3009B54DA /* Products */ = { isa = PBXGroup; children = ( - 648AF73D27CFF2CD009327DE /* CJSEngine.cpp */, - 648AF73C27CFF2CD009327DE /* CJSEngine.h */, - 648AF77227CFF2CD009327DE /* CJSMapping.cpp */, - 648AF78C27CFF2CD009327DE /* CJSMapping.h */, - 648AF6FD27CFF2CC009327DE /* cScript.cpp */, - 648AF72827CFF2CC009327DE /* cScript.h */, - 648AF78927CFF2CD009327DE /* JSEncapsulate.cpp */, - 648AF76027CFF2CD009327DE /* JSEncapsulate.h */, - 648AF71B27CFF2CC009327DE /* SEFunctions.cpp */, - 648AF72927CFF2CC009327DE /* SEFunctions.h */, - 648AF72A27CFF2CC009327DE /* UOXJSClasses.h */, - 648AF73327CFF2CC009327DE /* UOXJSMethods.cpp */, - 648AF70427CFF2CC009327DE /* UOXJSMethods.h */, - 648AF75A27CFF2CD009327DE /* UOXJSPropertyEnums.h */, - 648AF72F27CFF2CC009327DE /* UOXJSPropertyFuncs.cpp */, - 648AF73E27CFF2CD009327DE /* UOXJSPropertyFuncs.h */, - 648AF71A27CFF2CC009327DE /* UOXJSPropertySpecs.h */, + 64A9006A293E3DA3009B54DA /* uox3 */, ); - name = JSEngine; + name = Products; sourceTree = ""; }; - 6400D38A284CE5A200AADA54 /* Network */ = { + 64A90074293E3DD4009B54DA /* source */ = { isa = PBXGroup; children = ( - 648AF6FC27CFF2CC009327DE /* CPacketReceive.cpp */, - 648AF75C27CFF2CD009327DE /* CPacketReceive.h */, - 648AF77627CFF2CD009327DE /* CPacketSend.cpp */, - 648AF77127CFF2CD009327DE /* CPacketSend.h */, - 648AF71427CFF2CC009327DE /* cSocket.cpp */, - 648AF79427CFF2CD009327DE /* cSocket.h */, - 648AF70227CFF2CC009327DE /* IP4Address.cpp */, - 648AF77427CFF2CD009327DE /* IP4Address.hpp */, - 648AF74A27CFF2CD009327DE /* network.cpp */, - 648AF77727CFF2CD009327DE /* network.h */, + 64E2F798293FD53200546A08 /* Leftover */, + 64E2F791293FCE4800546A08 /* Subsystem */, + 64E2F797293FCE8C00546A08 /* Utility */, + 64E2F796293FCE8400546A08 /* UOData */, + 64E2F795293FCE7500546A08 /* Script */, + 64E2F792293FCE5900546A08 /* Other */, + 64E2F794293FCE6C00546A08 /* Network */, + 64E2F793293FCE6200546A08 /* JS Engine */, + 64E2F790293FCE3800546A08 /* Base Objects */, + 64A90089293E3DD4009B54DA /* Changelog.txt */, + 64A90103293E3DD4009B54DA /* uox3.cpp */, + 64A90104293E3DD4009B54DA /* uox3.h */, ); - name = Network; + name = source; + path = ../../../source; sourceTree = ""; }; - 6400D38B284CE5EC00AADA54 /* Other */ = { + 64A9016B293E3EED009B54DA /* Frameworks */ = { isa = PBXGroup; children = ( - 648AF78A27CFF2CD009327DE /* ai.cpp */, - 648AF71D27CFF2CC009327DE /* archive.cpp */, - 648AF6FA27CFF2CC009327DE /* calcfuncs.cpp */, - 648AF75227CFF2CD009327DE /* cDice.cpp */, - 648AF75527CFF2CD009327DE /* cdice.h */, - 648AF78627CFF2CD009327DE /* classes.h */, - 648AF75127CFF2CD009327DE /* cmdtable.cpp */, - 648AF70F27CFF2CC009327DE /* cmdtable.h */, - 648AF76627CFF2CD009327DE /* cPlayerAction.cpp */, - 648AF73427CFF2CC009327DE /* cRaces.cpp */, - 648AF72E27CFF2CC009327DE /* cRaces.h */, - 648AF72D27CFF2CC009327DE /* CResponse.cpp */, - 648AF71927CFF2CC009327DE /* CResponse.h */, - 648AF79227CFF2CD009327DE /* cSkillClass.h */, - 648AF76927CFF2CD009327DE /* cSpawnRegion.cpp */, - 648AF6F827CFF2CC009327DE /* cSpawnRegion.h */, - 648AF75427CFF2CD009327DE /* cVersionClass.cpp */, - 648AF78D27CFF2CD009327DE /* cVersionClass.h */, - 648AF6F727CFF2CC009327DE /* dist.cpp */, - 648AF79327CFF2CD009327DE /* effect.cpp */, - 648AF77027CFF2CD009327DE /* fileio.cpp */, - 648AF73A27CFF2CD009327DE /* findfuncs.cpp */, - 648AF76727CFF2CD009327DE /* gump.h */, - 648AF74C27CFF2CD009327DE /* gumps.cpp */, - 648AF76427CFF2CD009327DE /* msgboard.cpp */, - 648AF6FF27CFF2CC009327DE /* msgboard.h */, - 648AF78127CFF2CD009327DE /* npcs.cpp */, - 648AF78B27CFF2CD009327DE /* pcmanage.cpp */, - 648AF73927CFF2CD009327DE /* power.h */, - 648AF78327CFF2CD009327DE /* resource.h */, + 64A9016E293E3EF5009B54DA /* libz.tbd */, + 64A9016C293E3EED009B54DA /* libjscript.a */, ); - name = Other; + name = Frameworks; sourceTree = ""; }; - 6400D38C284CE68600AADA54 /* Script */ = { + 64E2F790293FCE3800546A08 /* Base Objects */ = { isa = PBXGroup; children = ( - 648AF73B27CFF2CD009327DE /* Dictionary.cpp */, - 648AF71E27CFF2CC009327DE /* Dictionary.h */, - 648AF75E27CFF2CD009327DE /* scriptc.cpp */, - 648AF74B27CFF2CD009327DE /* scriptc.h */, - 648AF75927CFF2CD009327DE /* ssection.cpp */, - 648AF77327CFF2CD009327DE /* ssection.h */, + 64A90112293E3DD4009B54DA /* uoxstruct.h */, + 64A900E1293E3DD4009B54DA /* PageVector.h */, + 64A900C1293E3DD4009B54DA /* funcdecl.h */, + 64A900DD293E3DD4009B54DA /* ObjectFactory.cpp */, + 64A900DE293E3DD4009B54DA /* ObjectFactory.h */, + 64A9007D293E3DD4009B54DA /* cBaseobject.cpp */, + 64A9007E293E3DD4009B54DA /* cBaseObject.h */, + 64A90081293E3DD4009B54DA /* cConsole.cpp */, + 64A90082293E3DD4009B54DA /* cConsole.h */, + 64A90086293E3DD4009B54DA /* cGuild.cpp */, + 64A90087293E3DD4009B54DA /* cGuild.h */, + 64A9008C293E3DD4009B54DA /* cItem.cpp */, + 64A9008D293E3DD4009B54DA /* cItem.h */, + 64A90097293E3DD4009B54DA /* cMultiObj.cpp */, + 64A90098293E3DD4009B54DA /* cMultiObj.h */, + 64A900AE293E3DD4009B54DA /* cSocket.cpp */, + 64A900AF293E3DD4009B54DA /* cSocket.h */, + 64A900B0293E3DD4009B54DA /* cSpawnRegion.cpp */, + 64A900B1293E3DD4009B54DA /* cSpawnRegion.h */, + 64A900B2293E3DD4009B54DA /* cThreadQueue.cpp */, + 64A900B3293E3DD4009B54DA /* cThreadQueue.h */, + 64A900E8293E3DD4009B54DA /* queue.cpp */, ); - name = Script; + name = "Base Objects"; sourceTree = ""; }; - 6400D38D284CE6C300AADA54 /* Subsystem */ = { + 64E2F791293FCE4800546A08 /* Subsystem */ = { isa = PBXGroup; children = ( - 642E11B028549716003AA848 /* BaseWorld */, - 648AF77527CFF2CD009327DE /* books.cpp */, - 648AF6FB27CFF2CC009327DE /* books.h */, - 648AF77F27CFF2CD009327DE /* cAccountClass.cpp */, - 648AF72427CFF2CC009327DE /* cAccountClass.h */, - 648AF71C27CFF2CC009327DE /* cEffects.h */, - 648AF78727CFF2CD009327DE /* CGump.cpp */, - 648AF74827CFF2CD009327DE /* cHTMLSystem.cpp */, - 648AF74F27CFF2CD009327DE /* cHTMLSystem.h */, - 648AF72C27CFF2CC009327DE /* cMagic.h */, - 648AF78527CFF2CD009327DE /* combat.cpp */, - 648AF74927CFF2CD009327DE /* combat.h */, - 648AF74527CFF2CD009327DE /* commands.cpp */, - 648AF74027CFF2CD009327DE /* commands.h */, - 648AF76527CFF2CD009327DE /* cWeather.cpp */, - 648AF76A27CFF2CD009327DE /* cWeather.hpp */, - 648AF72B27CFF2CC009327DE /* house.cpp */, - 648AF75327CFF2CD009327DE /* items.cpp */, - 648AF71227CFF2CC009327DE /* jail.cpp */, - 648AF71027CFF2CC009327DE /* jail.h */, - 648AF72027CFF2CC009327DE /* lineofsight.cpp */, - 648AF73F27CFF2CD009327DE /* magic.cpp */, - 648AF70D27CFF2CC009327DE /* magic.h */, - 648AF76827CFF2CD009327DE /* movement.cpp */, - 648AF71327CFF2CC009327DE /* movement.h */, - 648AF76B27CFF2CD009327DE /* PartySystem.cpp */, - 648AF78227CFF2CD009327DE /* PartySystem.h */, - 648AF77A27CFF2CD009327DE /* quantityfuncs.cpp */, - 648AF75627CFF2CD009327DE /* regions.cpp */, - 648AF76C27CFF2CD009327DE /* regions.h */, - 648AF73827CFF2CD009327DE /* skills.cpp */, - 648AF6F927CFF2CC009327DE /* skills.h */, - 648AF74D27CFF2CD009327DE /* sound.cpp */, - 648AF73727CFF2CD009327DE /* targeting.cpp */, - 648AF74E27CFF2CD009327DE /* teffect.h */, - 648AF78E27CFF2CD009327DE /* trade.cpp */, - 648AF76E27CFF2CD009327DE /* vendor.cpp */, - 648AF79127CFF2CD009327DE /* weight.cpp */, - 648AF75D27CFF2CD009327DE /* weight.h */, - 648AF78427CFF2CD009327DE /* wholist.cpp */, - 648AF77E27CFF2CD009327DE /* wholist.h */, + 64A900FA293E3DD4009B54DA /* teffect.h */, + 64A900E7293E3DD4009B54DA /* quantityfuncs.cpp */, + 64A900CA293E3DD4009B54DA /* jail.h */, + 64A900C3293E3DD4009B54DA /* gump.h */, + 64A90093293E3DD4009B54DA /* cMagic.h */, + 64A90085293E3DD4009B54DA /* cEffects.h */, + 64A90077293E3DD4009B54DA /* boats.cpp */, + 64A90078293E3DD4009B54DA /* books.cpp */, + 64A90079293E3DD4009B54DA /* books.h */, + 64A9007A293E3DD4009B54DA /* cAccountClass.cpp */, + 64A9007B293E3DD4009B54DA /* cAccountClass.h */, + 64A9007F293E3DD4009B54DA /* cChar.cpp */, + 64A90080293E3DD4009B54DA /* cChar.h */, + 64A90088293E3DD4009B54DA /* CGump.cpp */, + 64A9008A293E3DD4009B54DA /* cHTMLSystem.cpp */, + 64A9008B293E3DD4009B54DA /* cHTMLSystem.h */, + 64A90095293E3DD4009B54DA /* cmdtable.cpp */, + 64A90096293E3DD4009B54DA /* cmdtable.h */, + 64A90099293E3DD4009B54DA /* combat.cpp */, + 64A9009A293E3DD4009B54DA /* combat.h */, + 64A9009B293E3DD4009B54DA /* commands.cpp */, + 64A9009C293E3DD4009B54DA /* commands.h */, + 64A900A3293E3DD4009B54DA /* cRaces.cpp */, + 64A900A4293E3DD4009B54DA /* cRaces.h */, + 64A900A9293E3DD4009B54DA /* cServerData.cpp */, + 64A900AA293E3DD4009B54DA /* cServerData.h */, + 64A900B6293E3DD4009B54DA /* cWeather.cpp */, + 64A900B7293E3DD4009B54DA /* cWeather.hpp */, + 64A900C4293E3DD4009B54DA /* gumps.cpp */, + 64A900C5293E3DD4009B54DA /* house.cpp */, + 64A900C8293E3DD4009B54DA /* items.cpp */, + 64A900C9293E3DD4009B54DA /* jail.cpp */, + 64A900CD293E3DD4009B54DA /* lineofsight.cpp */, + 64A900CE293E3DD4009B54DA /* magic.cpp */, + 64A900CF293E3DD4009B54DA /* magic.h */, + 64A900D2293E3DD4009B54DA /* mapstuff.cpp */, + 64A900D3293E3DD4009B54DA /* mapstuff.h */, + 64A900D4293E3DD4009B54DA /* movement.cpp */, + 64A900D5293E3DD4009B54DA /* movement.h */, + 64A900D6293E3DD4009B54DA /* msgboard.cpp */, + 64A900D7293E3DD4009B54DA /* msgboard.h */, + 64A900E2293E3DD4009B54DA /* PartySystem.cpp */, + 64A900E3293E3DD4009B54DA /* PartySystem.h */, + 64A900E9293E3DD4009B54DA /* regions.cpp */, + 64A900EA293E3DD4009B54DA /* regions.h */, + 64A900F0293E3DD4009B54DA /* skills.cpp */, + 64A900F1293E3DD4009B54DA /* skills.h */, + 64A900F2293E3DD4009B54DA /* sound.cpp */, + 64A900F3293E3DD4009B54DA /* speech.cpp */, + 64A900F4293E3DD4009B54DA /* speech.h */, + 64A900F9293E3DD4009B54DA /* targeting.cpp */, + 64A900FF293E3DD4009B54DA /* trade.cpp */, + 64A90113293E3DD4009B54DA /* vendor.cpp */, + 64A90114293E3DD4009B54DA /* weight.cpp */, + 64A90115293E3DD4009B54DA /* weight.h */, + 64A90116293E3DD4009B54DA /* wholist.cpp */, + 64A90117293E3DD4009B54DA /* wholist.h */, + 64A90118293E3DD4009B54DA /* worldmain.cpp */, + 64A90119293E3DD4009B54DA /* worldmain.h */, ); name = Subsystem; sourceTree = ""; }; - 6400D38E284CE74C00AADA54 /* UOData */ = { - isa = PBXGroup; - children = ( - 648AF71F27CFF2CC009327DE /* mapclasses.h */, - 648AF76127CFF2CD009327DE /* mapstuff.cpp */, - 648AF71527CFF2CC009327DE /* mapstuff.h */, - 648AF73627CFF2CD009327DE /* MultiMul.cpp */, - 648AF76D27CFF2CD009327DE /* MultiMul.hpp */, - 648AF73227CFF2CC009327DE /* UOPData.cpp */, - 648AF78827CFF2CD009327DE /* UOPData.hpp */, - ); - name = UOData; - sourceTree = ""; - }; - 6400D38F284CE78000AADA54 /* Utility */ = { - isa = PBXGroup; - children = ( - 648AF74327CFF2CD009327DE /* EventTimer.cpp */, - 648AF75F27CFF2CD009327DE /* EventTimer.hpp */, - 648AF73127CFF2CC009327DE /* GenericList.h */, - 648AF77927CFF2CD009327DE /* StringUtility.cpp */, - 648AF72727CFF2CC009327DE /* StringUtility.hpp */, - 648AF72527CFF2CC009327DE /* TimeUtility.cpp */, - 648AF70B27CFF2CC009327DE /* TimeUtility.hpp */, - ); - name = Utility; - sourceTree = ""; - }; - 6400D390284CE7A300AADA54 /* General */ = { + 64E2F792293FCE5900546A08 /* Other */ = { isa = PBXGroup; children = ( - 648AF75B27CFF2CD009327DE /* UOXStdHeaders.h */, - 6452D32127D3A7CB00E5AFB4 /* osunique.cpp */, - 6452D32027D2E13B00E5AFB4 /* osunique.hpp */, - 648AF6FE27CFF2CC009327DE /* ConfigOS.h */, - 648AF75727CFF2CD009327DE /* Prerequisites.h */, - 648AF77C27CFF2CD009327DE /* typedefs.h */, - 648AF78F27CFF2CD009327DE /* enums.h */, + 64A90100293E3DD4009B54DA /* typedefs.h */, + 64A900E5293E3DD4009B54DA /* power.h */, + 64A900D1293E3DD4009B54DA /* mapclasses.h */, + 64A900BC293E3DD4009B54DA /* enums.h */, + 64A900AD293E3DD4009B54DA /* cSkillClass.h */, + 64A90092293E3DD4009B54DA /* classes.h */, + 64A90075293E3DD4009B54DA /* ai.cpp */, + 64A90076293E3DD4009B54DA /* archive.cpp */, + 64A9007C293E3DD4009B54DA /* calcfuncs.cpp */, + 64A90083293E3DD4009B54DA /* cDice.cpp */, + 64A90084293E3DD4009B54DA /* cdice.h */, + 64A900A2293E3DD4009B54DA /* cPlayerAction.cpp */, + 64A900A5293E3DD4009B54DA /* CResponse.cpp */, + 64A900A6293E3DD4009B54DA /* CResponse.h */, + 64A900B4293E3DD4009B54DA /* cVersionClass.cpp */, + 64A900B5293E3DD4009B54DA /* cVersionClass.h */, + 64A900BA293E3DD4009B54DA /* dist.cpp */, + 64A900BB293E3DD4009B54DA /* effect.cpp */, + 64A900BF293E3DD4009B54DA /* fileio.cpp */, + 64A900C0293E3DD4009B54DA /* findfuncs.cpp */, + 64A900DC293E3DD4009B54DA /* npcs.cpp */, + 64A900E4293E3DD4009B54DA /* pcmanage.cpp */, ); - name = General; + name = Other; sourceTree = ""; }; - 6400D391284CE7C000AADA54 /* Not Used */ = { + 64E2F793293FCE6200546A08 /* JS Engine */ = { isa = PBXGroup; children = ( + 64A9008E293E3DD4009B54DA /* CJSEngine.cpp */, + 64A9008F293E3DD4009B54DA /* CJSEngine.h */, + 64A90090293E3DD4009B54DA /* CJSMapping.cpp */, + 64A90091293E3DD4009B54DA /* CJSMapping.h */, + 64A900A7293E3DD4009B54DA /* cScript.cpp */, + 64A900A8293E3DD4009B54DA /* cScript.h */, + 64A900CB293E3DD4009B54DA /* JSEncapsulate.cpp */, + 64A900CC293E3DD4009B54DA /* JSEncapsulate.h */, + 64A900EE293E3DD4009B54DA /* SEFunctions.cpp */, + 64A900EF293E3DD4009B54DA /* SEFunctions.h */, + 64A9010A293E3DD4009B54DA /* UOXJSClasses.h */, + 64A9010B293E3DD4009B54DA /* UOXJSMethods.cpp */, + 64A9010C293E3DD4009B54DA /* UOXJSMethods.h */, + 64A9010D293E3DD4009B54DA /* UOXJSPropertyEnums.h */, + 64A9010E293E3DD4009B54DA /* UOXJSPropertyFuncs.cpp */, + 64A9010F293E3DD4009B54DA /* UOXJSPropertyFuncs.h */, + 64A90110293E3DD4009B54DA /* UOXJSPropertySpecs.h */, ); - name = "Not Used"; + name = "JS Engine"; sourceTree = ""; }; - 642E11B028549716003AA848 /* BaseWorld */ = { + 64E2F794293FCE6C00546A08 /* Network */ = { isa = PBXGroup; children = ( - 648AF6F627CFF2CC009327DE /* cConsole.cpp */, - 648AF75027CFF2CD009327DE /* cConsole.h */, - 648AF74727CFF2CD009327DE /* cThreadQueue.cpp */, - 648AF76F27CFF2CD009327DE /* cThreadQueue.h */, - 648AF70727CFF2CC009327DE /* worldmain.cpp */, - 648AF70627CFF2CC009327DE /* worldmain.h */, - 648AF70A27CFF2CC009327DE /* cServerData.cpp */, - 648AF74627CFF2CD009327DE /* cServerData.h */, - 648AF75827CFF2CD009327DE /* cServerDefinitions.cpp */, - 648AF71127CFF2CC009327DE /* cServerDefinitions.h */, + 64A9009E293E3DD4009B54DA /* CPacketReceive.cpp */, + 64A9009F293E3DD4009B54DA /* CPacketReceive.h */, + 64A900A0293E3DD4009B54DA /* CPacketSend.cpp */, + 64A900A1293E3DD4009B54DA /* CPacketSend.h */, + 64A900C6293E3DD4009B54DA /* IP4Address.cpp */, + 64A900C7293E3DD4009B54DA /* IP4Address.hpp */, + 64A900DA293E3DD4009B54DA /* network.cpp */, + 64A900DB293E3DD4009B54DA /* network.h */, ); - name = BaseWorld; + name = Network; sourceTree = ""; }; - 648AF6D927CFEEC5009327DE = { + 64E2F795293FCE7500546A08 /* Script */ = { isa = PBXGroup; children = ( - 648AF6F527CFF1F2009327DE /* source */, - 648AF6E527CFEF79009327DE /* Products */, - 648AF6EC27CFEF94009327DE /* Frameworks */, + 64A900AB293E3DD4009B54DA /* cServerDefinitions.cpp */, + 64A900AC293E3DD4009B54DA /* cServerDefinitions.h */, + 64A900B8293E3DD4009B54DA /* Dictionary.cpp */, + 64A900B9293E3DD4009B54DA /* Dictionary.h */, + 64A900EC293E3DD4009B54DA /* scriptc.cpp */, + 64A900ED293E3DD4009B54DA /* scriptc.h */, + 64A900F5293E3DD4009B54DA /* ssection.cpp */, + 64A900F6293E3DD4009B54DA /* ssection.h */, ); + name = Script; sourceTree = ""; }; - 648AF6E527CFEF79009327DE /* Products */ = { + 64E2F796293FCE8400546A08 /* UOData */ = { isa = PBXGroup; children = ( - 648AF6E427CFEF79009327DE /* uox3 */, + 64A900D8293E3DD4009B54DA /* MultiMul.cpp */, + 64A900D9293E3DD4009B54DA /* MultiMul.hpp */, + 64A90101293E3DD4009B54DA /* UOPData.cpp */, + 64A90102293E3DD4009B54DA /* UOPData.hpp */, ); - name = Products; + name = UOData; sourceTree = ""; }; - 648AF6EC27CFEF94009327DE /* Frameworks */ = { + 64E2F797293FCE8C00546A08 /* Utility */ = { isa = PBXGroup; children = ( - 64E0066D2935A38900BEBA8F /* libjs.a */, - 64E0066829354B1800BEBA8F /* libz.tbd */, + 64A900BD293E3DD4009B54DA /* EventTimer.cpp */, + 64A900BE293E3DD4009B54DA /* EventTimer.hpp */, + 64A900F7293E3DD4009B54DA /* StringUtility.cpp */, + 64A900F8293E3DD4009B54DA /* StringUtility.hpp */, + 64A900FB293E3DD4009B54DA /* TimeUtility.cpp */, + 64A900FC293E3DD4009B54DA /* TimeUtility.hpp */, ); - name = Frameworks; + name = Utility; sourceTree = ""; }; - 648AF6F527CFF1F2009327DE /* source */ = { + 64E2F798293FD53200546A08 /* Leftover */ = { isa = PBXGroup; children = ( - 6453667E285A04130064E649 /* CMakeLists.txt */, - 6453667D2859FB340064E649 /* Changelog.txt */, - 6400D391284CE7C000AADA54 /* Not Used */, - 6400D390284CE7A300AADA54 /* General */, - 6400D38F284CE78000AADA54 /* Utility */, - 6400D38E284CE74C00AADA54 /* UOData */, - 6400D38D284CE6C300AADA54 /* Subsystem */, - 6400D38C284CE68600AADA54 /* Script */, - 6400D38B284CE5EC00AADA54 /* Other */, - 6400D38A284CE5A200AADA54 /* Network */, - 6400D389284CE53500AADA54 /* JSEngine */, - 6400D388284CE45700AADA54 /* Base Objects */, - 648AF70027CFF2CC009327DE /* uox3.cpp */, - 648AF72327CFF2CC009327DE /* uox3.h */, + 64A9009D293E3DD4009B54DA /* ConfigOS.h */, + 64A900C2293E3DD4009B54DA /* GenericList.h */, + 64A900DF293E3DD4009B54DA /* osunique.cpp */, + 64A900E0293E3DD4009B54DA /* osunique.hpp */, + 64A900E6293E3DD4009B54DA /* Prerequisites.h */, + 64A900FD293E3DD4009B54DA /* townregion.cpp */, + 64A900FE293E3DD4009B54DA /* townregion.h */, + 64A90111293E3DD4009B54DA /* UOXStdHeaders.h */, ); - path = source; + name = Leftover; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 648AF6E327CFEF79009327DE /* uox3 */ = { + 64A90069293E3DA3009B54DA /* uox3 */ = { isa = PBXNativeTarget; - buildConfigurationList = 648AF6EB27CFEF79009327DE /* Build configuration list for PBXNativeTarget "uox3" */; + buildConfigurationList = 64A90071293E3DA3009B54DA /* Build configuration list for PBXNativeTarget "uox3" */; buildPhases = ( - 648AF6E027CFEF79009327DE /* Sources */, - 648AF6E127CFEF79009327DE /* Frameworks */, - 648AF6E227CFEF79009327DE /* CopyFiles */, + 64A90066293E3DA3009B54DA /* Sources */, + 64A90067293E3DA3009B54DA /* Frameworks */, + 64A90068293E3DA3009B54DA /* CopyFiles */, ); buildRules = ( ); @@ -577,25 +558,24 @@ ); name = uox3; productName = uox3; - productReference = 648AF6E427CFEF79009327DE /* uox3 */; + productReference = 64A9006A293E3DA3009B54DA /* uox3 */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 648AF6DA27CFEEC5009327DE /* Project object */ = { + 64A90062293E3DA3009B54DA /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; LastUpgradeCheck = 1410; - ORGANIZATIONNAME = "Charles Kerr"; TargetAttributes = { - 648AF6E327CFEF79009327DE = { - CreatedOnToolsVersion = 13.2.1; + 64A90069293E3DA3009B54DA = { + CreatedOnToolsVersion = 14.1; }; }; }; - buildConfigurationList = 648AF6DD27CFEEC5009327DE /* Build configuration list for PBXProject "uox3" */; + buildConfigurationList = 64A90065293E3DA3009B54DA /* Build configuration list for PBXProject "uox3" */; compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -603,188 +583,113 @@ en, Base, ); - mainGroup = 648AF6D927CFEEC5009327DE; - productRefGroup = 648AF6E527CFEF79009327DE /* Products */; + mainGroup = 64A90061293E3DA3009B54DA; + productRefGroup = 64A9006B293E3DA3009B54DA /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 648AF6E327CFEF79009327DE /* uox3 */, + 64A90069293E3DA3009B54DA /* uox3 */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 648AF6E027CFEF79009327DE /* Sources */ = { + 64A90066293E3DA3009B54DA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 648AF7CF27CFF2CD009327DE /* movement.cpp in Sources */, - 648AF7CD27CFF2CD009327DE /* cWeather.cpp in Sources */, - 648AF7BB27CFF2CD009327DE /* EventTimer.cpp in Sources */, - 648AF79827CFF2CD009327DE /* calcfuncs.cpp in Sources */, - 648AF7AC27CFF2CD009327DE /* townregion.cpp in Sources */, - 648AF7CC27CFF2CD009327DE /* msgboard.cpp in Sources */, - 648AF7C327CFF2CD009327DE /* cmdtable.cpp in Sources */, - 648AF7B027CFF2CD009327DE /* UOPData.cpp in Sources */, - 648AF7B427CFF2CD009327DE /* targeting.cpp in Sources */, - 648AF7B627CFF2CD009327DE /* findfuncs.cpp in Sources */, - 648AF7A327CFF2CD009327DE /* jail.cpp in Sources */, - 648AF7BE27CFF2CD009327DE /* cThreadQueue.cpp in Sources */, - 648AF7BC27CFF2CD009327DE /* cChar.cpp in Sources */, - 648AF7A927CFF2CD009327DE /* archive.cpp in Sources */, - 648AF79F27CFF2CD009327DE /* worldmain.cpp in Sources */, - 648AF7BF27CFF2CD009327DE /* cHTMLSystem.cpp in Sources */, - 648AF7C027CFF2CD009327DE /* network.cpp in Sources */, - 648AF7E127CFF2CD009327DE /* pcmanage.cpp in Sources */, - 648AF7DD27CFF2CD009327DE /* combat.cpp in Sources */, - 648AF7E527CFF2CD009327DE /* speech.cpp in Sources */, - 648AF7D027CFF2CD009327DE /* cSpawnRegion.cpp in Sources */, - 648AF7B827CFF2CD009327DE /* CJSEngine.cpp in Sources */, - 648AF79927CFF2CD009327DE /* CPacketReceive.cpp in Sources */, - 648AF7D627CFF2CD009327DE /* CPacketSend.cpp in Sources */, - 648AF7CA27CFF2CD009327DE /* scriptc.cpp in Sources */, - 648AF7DA27CFF2CD009327DE /* ObjectFactory.cpp in Sources */, - 648AF7B327CFF2CD009327DE /* MultiMul.cpp in Sources */, - 648AF79D27CFF2CD009327DE /* IP4Address.cpp in Sources */, - 648AF7E427CFF2CD009327DE /* effect.cpp in Sources */, - 648AF7D527CFF2CD009327DE /* books.cpp in Sources */, - 648AF7A227CFF2CD009327DE /* cMultiObj.cpp in Sources */, - 648AF7A427CFF2CD009327DE /* cSocket.cpp in Sources */, - 648AF7B527CFF2CD009327DE /* skills.cpp in Sources */, - 648AF7CB27CFF2CD009327DE /* mapstuff.cpp in Sources */, - 648AF7AF27CFF2CD009327DE /* UOXJSPropertyFuncs.cpp in Sources */, - 648AF7A127CFF2CD009327DE /* cServerData.cpp in Sources */, - 648AF7B727CFF2CD009327DE /* Dictionary.cpp in Sources */, - 648AF7E027CFF2CD009327DE /* ai.cpp in Sources */, - 648AF7C927CFF2CD009327DE /* ssection.cpp in Sources */, - 648AF7A627CFF2CD009327DE /* queue.cpp in Sources */, - 648AF7B227CFF2CD009327DE /* cRaces.cpp in Sources */, - 648AF7BA27CFF2CD009327DE /* cGuild.cpp in Sources */, - 648AF7B127CFF2CD009327DE /* UOXJSMethods.cpp in Sources */, - 648AF7AA27CFF2CD009327DE /* lineofsight.cpp in Sources */, - 648AF7A827CFF2CD009327DE /* SEFunctions.cpp in Sources */, - 648AF79B27CFF2CD009327DE /* uox3.cpp in Sources */, - 648AF7A027CFF2CD009327DE /* cBaseobject.cpp in Sources */, - 648AF7C427CFF2CD009327DE /* cDice.cpp in Sources */, - 648AF79C27CFF2CD009327DE /* boats.cpp in Sources */, - 648AF7C727CFF2CD009327DE /* regions.cpp in Sources */, - 648AF7D727CFF2CD009327DE /* StringUtility.cpp in Sources */, - 648AF7B927CFF2CD009327DE /* magic.cpp in Sources */, - 648AF7E227CFF2CD009327DE /* trade.cpp in Sources */, - 648AF7AE27CFF2CD009327DE /* CResponse.cpp in Sources */, - 648AF7D327CFF2CD009327DE /* fileio.cpp in Sources */, - 648AF79A27CFF2CD009327DE /* cScript.cpp in Sources */, - 648AF7AB27CFF2CD009327DE /* TimeUtility.cpp in Sources */, - 648AF7C627CFF2CD009327DE /* cVersionClass.cpp in Sources */, - 648AF7DF27CFF2CD009327DE /* JSEncapsulate.cpp in Sources */, - 648AF7D927CFF2CD009327DE /* cAccountClass.cpp in Sources */, - 648AF7E327CFF2CD009327DE /* weight.cpp in Sources */, - 648AF7C227CFF2CD009327DE /* sound.cpp in Sources */, - 648AF7D127CFF2CD009327DE /* PartySystem.cpp in Sources */, - 648AF79627CFF2CD009327DE /* cConsole.cpp in Sources */, - 648AF7CE27CFF2CD009327DE /* cPlayerAction.cpp in Sources */, - 648AF7DE27CFF2CD009327DE /* CGump.cpp in Sources */, - 6452D32227D3A7CB00E5AFB4 /* osunique.cpp in Sources */, - 648AF7D227CFF2CD009327DE /* vendor.cpp in Sources */, - 648AF7C827CFF2CD009327DE /* cServerDefinitions.cpp in Sources */, - 648AF7C127CFF2CD009327DE /* gumps.cpp in Sources */, - 648AF79E27CFF2CD009327DE /* cItem.cpp in Sources */, - 648AF7DB27CFF2CD009327DE /* npcs.cpp in Sources */, - 648AF7DC27CFF2CD009327DE /* wholist.cpp in Sources */, - 648AF7C527CFF2CD009327DE /* items.cpp in Sources */, - 648AF7D827CFF2CD009327DE /* quantityfuncs.cpp in Sources */, - 648AF7AD27CFF2CD009327DE /* house.cpp in Sources */, - 648AF79727CFF2CD009327DE /* dist.cpp in Sources */, - 648AF7D427CFF2CD009327DE /* CJSMapping.cpp in Sources */, - 648AF7BD27CFF2CD009327DE /* commands.cpp in Sources */, + 64A9014E293E3DD4009B54DA /* network.cpp in Sources */, + 64A90168293E3DD4009B54DA /* wholist.cpp in Sources */, + 64A90124293E3DD4009B54DA /* cGuild.cpp in Sources */, + 64A90160293E3DD4009B54DA /* townregion.cpp in Sources */, + 64A90139293E3DD4009B54DA /* cVersionClass.cpp in Sources */, + 64A90122293E3DD4009B54DA /* cConsole.cpp in Sources */, + 64A90152293E3DD4009B54DA /* PartySystem.cpp in Sources */, + 64A90163293E3DD4009B54DA /* uox3.cpp in Sources */, + 64A90125293E3DD4009B54DA /* CGump.cpp in Sources */, + 64A9014C293E3DD4009B54DA /* msgboard.cpp in Sources */, + 64A9015F293E3DD4009B54DA /* TimeUtility.cpp in Sources */, + 64A90169293E3DD4009B54DA /* worldmain.cpp in Sources */, + 64A9013D293E3DD4009B54DA /* effect.cpp in Sources */, + 64A9011F293E3DD4009B54DA /* calcfuncs.cpp in Sources */, + 64A9013E293E3DD4009B54DA /* EventTimer.cpp in Sources */, + 64A90155293E3DD4009B54DA /* queue.cpp in Sources */, + 64A9014A293E3DD4009B54DA /* mapstuff.cpp in Sources */, + 64A9015D293E3DD4009B54DA /* StringUtility.cpp in Sources */, + 64A90159293E3DD4009B54DA /* skills.cpp in Sources */, + 64A90162293E3DD4009B54DA /* UOPData.cpp in Sources */, + 64A9014D293E3DD4009B54DA /* MultiMul.cpp in Sources */, + 64A9015C293E3DD4009B54DA /* ssection.cpp in Sources */, + 64A90127293E3DD4009B54DA /* cItem.cpp in Sources */, + 64A90123293E3DD4009B54DA /* cDice.cpp in Sources */, + 64A9012E293E3DD4009B54DA /* CPacketReceive.cpp in Sources */, + 64A9012A293E3DD4009B54DA /* cmdtable.cpp in Sources */, + 64A90120293E3DD4009B54DA /* cBaseobject.cpp in Sources */, + 64A90135293E3DD4009B54DA /* cServerDefinitions.cpp in Sources */, + 64A90166293E3DD4009B54DA /* vendor.cpp in Sources */, + 64A9015B293E3DD4009B54DA /* speech.cpp in Sources */, + 64A90161293E3DD4009B54DA /* trade.cpp in Sources */, + 64A9011D293E3DD4009B54DA /* books.cpp in Sources */, + 64A90128293E3DD4009B54DA /* CJSEngine.cpp in Sources */, + 64A90130293E3DD4009B54DA /* cPlayerAction.cpp in Sources */, + 64A90147293E3DD4009B54DA /* lineofsight.cpp in Sources */, + 64A90156293E3DD4009B54DA /* regions.cpp in Sources */, + 64A90131293E3DD4009B54DA /* cRaces.cpp in Sources */, + 64A90134293E3DD4009B54DA /* cServerData.cpp in Sources */, + 64A90143293E3DD4009B54DA /* IP4Address.cpp in Sources */, + 64A90144293E3DD4009B54DA /* items.cpp in Sources */, + 64A90138293E3DD4009B54DA /* cThreadQueue.cpp in Sources */, + 64A9014B293E3DD4009B54DA /* movement.cpp in Sources */, + 64A90145293E3DD4009B54DA /* jail.cpp in Sources */, + 64A9014F293E3DD4009B54DA /* npcs.cpp in Sources */, + 64A9013B293E3DD4009B54DA /* Dictionary.cpp in Sources */, + 64A90136293E3DD4009B54DA /* cSocket.cpp in Sources */, + 64A90126293E3DD4009B54DA /* cHTMLSystem.cpp in Sources */, + 64A90150293E3DD4009B54DA /* ObjectFactory.cpp in Sources */, + 64A90121293E3DD4009B54DA /* cChar.cpp in Sources */, + 64A90154293E3DD4009B54DA /* quantityfuncs.cpp in Sources */, + 64A90165293E3DD4009B54DA /* UOXJSPropertyFuncs.cpp in Sources */, + 64A9012C293E3DD4009B54DA /* combat.cpp in Sources */, + 64A90153293E3DD4009B54DA /* pcmanage.cpp in Sources */, + 64A90129293E3DD4009B54DA /* CJSMapping.cpp in Sources */, + 64A90132293E3DD4009B54DA /* CResponse.cpp in Sources */, + 64A90164293E3DD4009B54DA /* UOXJSMethods.cpp in Sources */, + 64A9011E293E3DD4009B54DA /* cAccountClass.cpp in Sources */, + 64A90148293E3DD4009B54DA /* magic.cpp in Sources */, + 64A9011B293E3DD4009B54DA /* archive.cpp in Sources */, + 64A9015A293E3DD4009B54DA /* sound.cpp in Sources */, + 64A90167293E3DD4009B54DA /* weight.cpp in Sources */, + 64A90133293E3DD4009B54DA /* cScript.cpp in Sources */, + 64A90146293E3DD4009B54DA /* JSEncapsulate.cpp in Sources */, + 64A9013F293E3DD4009B54DA /* fileio.cpp in Sources */, + 64A90141293E3DD4009B54DA /* gumps.cpp in Sources */, + 64A90142293E3DD4009B54DA /* house.cpp in Sources */, + 64A90151293E3DD4009B54DA /* osunique.cpp in Sources */, + 64A9012F293E3DD4009B54DA /* CPacketSend.cpp in Sources */, + 64A9013C293E3DD4009B54DA /* dist.cpp in Sources */, + 64A90158293E3DD4009B54DA /* SEFunctions.cpp in Sources */, + 64A9011A293E3DD4009B54DA /* ai.cpp in Sources */, + 64A9013A293E3DD4009B54DA /* cWeather.cpp in Sources */, + 64A90140293E3DD4009B54DA /* findfuncs.cpp in Sources */, + 64A9011C293E3DD4009B54DA /* boats.cpp in Sources */, + 64A90137293E3DD4009B54DA /* cSpawnRegion.cpp in Sources */, + 64A9015E293E3DD4009B54DA /* targeting.cpp in Sources */, + 64A9012B293E3DD4009B54DA /* cMultiObj.cpp in Sources */, + 64A90157293E3DD4009B54DA /* scriptc.cpp in Sources */, + 64A9012D293E3DD4009B54DA /* commands.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 648AF6DE27CFEEC5009327DE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_SEARCH_PATHS = ./spidermonkey; - ONLY_ACTIVE_ARCH = YES; - USER_HEADER_SEARCH_PATHS = ./spidermonkey; - }; - name = Debug; - }; - 648AF6DF27CFEEC5009327DE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_SEARCH_PATHS = ./spidermonkey; - USER_HEADER_SEARCH_PATHS = ./spidermonkey; - }; - name = Release; - }; - 648AF6E927CFEF79009327DE /* Debug */ = { + 64A9006F293E3DA3009B54DA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -810,16 +715,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = CF264WE69M; - ENABLE_HARDENED_RUNTIME = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -833,26 +733,21 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../spidermonkey"; - LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/../spidermonkey"; MACOSX_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; - WARNING_CFLAGS = "-Wno-shift-negative-value"; }; name = Debug; }; - 648AF6EA27CFEF79009327DE /* Release */ = { + 64A90070293E3DA3009B54DA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -878,16 +773,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = CF264WE69M; - ENABLE_HARDENED_RUNTIME = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -895,13 +785,47 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../spidermonkey"; - LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/../spidermonkey"; MACOSX_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + }; + name = Release; + }; + 64A90072293E3DA3009B54DA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = CF264WE69M; + ENABLE_HARDENED_RUNTIME = YES; + GCC_CHAR_IS_UNSIGNED_CHAR = YES; + GCC_C_LANGUAGE_STANDARD = c11; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + USER_HEADER_SEARCH_PATHS = ( + ../../../source, + ../../../spidermonkey, + ); + WARNING_CFLAGS = "-Wno-shift-negative-value"; + }; + name = Debug; + }; + 64A90073293E3DA3009B54DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = CF264WE69M; + ENABLE_HARDENED_RUNTIME = YES; + GCC_CHAR_IS_UNSIGNED_CHAR = YES; + GCC_C_LANGUAGE_STANDARD = c11; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + USER_HEADER_SEARCH_PATHS = ( + ../../../source, + ../../../spidermonkey, + ); WARNING_CFLAGS = "-Wno-shift-negative-value"; }; name = Release; @@ -909,25 +833,25 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 648AF6DD27CFEEC5009327DE /* Build configuration list for PBXProject "uox3" */ = { + 64A90065293E3DA3009B54DA /* Build configuration list for PBXProject "uox3" */ = { isa = XCConfigurationList; buildConfigurations = ( - 648AF6DE27CFEEC5009327DE /* Debug */, - 648AF6DF27CFEEC5009327DE /* Release */, + 64A9006F293E3DA3009B54DA /* Debug */, + 64A90070293E3DA3009B54DA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 648AF6EB27CFEF79009327DE /* Build configuration list for PBXNativeTarget "uox3" */ = { + 64A90071293E3DA3009B54DA /* Build configuration list for PBXNativeTarget "uox3" */ = { isa = XCConfigurationList; buildConfigurations = ( - 648AF6E927CFEF79009327DE /* Debug */, - 648AF6EA27CFEF79009327DE /* Release */, + 64A90072293E3DA3009B54DA /* Debug */, + 64A90073293E3DA3009B54DA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 648AF6DA27CFEEC5009327DE /* Project object */; + rootObject = 64A90062293E3DA3009B54DA /* Project object */; } diff --git a/make/XCode/uox3.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/make/XCode/uox3.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/make/XCode/uox3.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/make/XCode/uox3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/make/XCode/uox3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/make/XCode/uox3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/make/XCode/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme b/make/XCode/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme index 8a032dba6..1330b5053 100644 --- a/make/XCode/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme +++ b/make/XCode/uox3.xcodeproj/xcshareddata/xcschemes/uox3.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -41,27 +41,18 @@ debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES" + viewDebuggingEnabled = "No" consoleMode = "1"> - - - - - - diff --git a/make/XCode/uox3.xcworkspace/contents.xcworkspacedata b/make/XCode/uox3.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..4c3329576 --- /dev/null +++ b/make/XCode/uox3.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/make/XCode/uox3.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/make/XCode/uox3.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/make/XCode/uox3.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/make/cmake/CMakeLists.txt b/make/cmake/CMakeLists.txt index 38ba37fb7..a04e33eaa 100644 --- a/make/cmake/CMakeLists.txt +++ b/make/cmake/CMakeLists.txt @@ -1,102 +1,244 @@ -add_library(uox - STATIC - CGump.cpp - boats.cpp - cSocket.cpp - items.cpp - speech.cpp - CJSEngine.cpp - books.cpp - cSpawnRegion.cpp - jail.cpp - ssection.cpp - CJSMapping.cpp - cAccountClass.cpp - cThreadQueue.cpp - lineofsight.cpp - targeting.cpp - CPacketReceive.cpp - cBaseobject.cpp - cVersionClass.cpp - magic.cpp - CPacketSend.cpp - cChar.cpp - cWeather.cpp - mapstuff.cpp - townregion.cpp - CResponse.cpp - cConsole.cpp - calcfuncs.cpp - movement.cpp - trade.cpp - Dictionary.cpp - cDice.cpp - cmdtable.cpp - msgboard.cpp - uox3.cpp - JSEncapsulate.cpp - cGuild.cpp - combat.cpp - network.cpp - cHTMLSystem.cpp - commands.cpp - npcs.cpp - vendor.cpp - ObjectFactory.cpp - cItem.cpp - cPlayerAction.cpp - pcmanage.cpp - weight.cpp - PartySystem.cpp - cMultiObj.cpp - dist.cpp - quantityfuncs.cpp - wholist.cpp - SEFunctions.cpp - effect.cpp - queue.cpp - worldmain.cpp - UOXJSMethods.cpp - cRaces.cpp - fileio.cpp - regions.cpp - UOXJSPropertyFuncs.cpp - cScript.cpp - findfuncs.cpp - scriptc.cpp - ai.cpp - cServerData.cpp - gumps.cpp - skills.cpp - archive.cpp - cServerDefinitions.cpp - house.cpp - sound.cpp - StringUtility.cpp - UOPData.cpp - MultiMul.cpp - IP4Address.cpp - TimeUtility.cpp - EventTimer.cpp - osunique.cpp -) +cmake_minimum_required(VERSION 3.18) +project(uox3 VERSION 0.1 LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 17) -target_include_directories(uox - PUBLIC - ${PROJECT_SOURCE_DIR}/spidermonkey - ${PROJECT_SOURCE_DIR}/zlib +# ************************************************************************* +# The basic executable we are making +# ************************************************************************* + +add_executable(uox3 + ../../source/ai.cpp + ../../source/archive.cpp + ../../source/boats.cpp + ../../source/books.cpp + ../../source/cAccountClass.cpp + ../../source/calcfuncs.cpp + ../../source/cBaseobject.cpp + ../../source/cChar.cpp + ../../source/cConsole.cpp + ../../source/cDice.cpp + ../../source/cGuild.cpp + ../../source/CGump.cpp + ../../source/cHTMLSystem.cpp + ../../source/cItem.cpp + ../../source/CJSEngine.cpp + ../../source/CJSMapping.cpp + ../../source/cmdtable.cpp + ../../source/cMultiObj.cpp + ../../source/combat.cpp + ../../source/commands.cpp + ../../source/CPacketReceive.cpp + ../../source/CPacketSend.cpp + ../../source/cPlayerAction.cpp + ../../source/cRaces.cpp + ../../source/CResponse.cpp + ../../source/cScript.cpp + ../../source/cServerData.cpp + ../../source/cServerDefinitions.cpp + ../../source/cSocket.cpp + ../../source/cSpawnRegion.cpp + ../../source/cThreadQueue.cpp + ../../source/cVersionClass.cpp + ../../source/cWeather.cpp + ../../source/Dictionary.cpp + ../../source/dist.cpp + ../../source/effect.cpp + ../../source/EventTimer.cpp + ../../source/fileio.cpp + ../../source/findfuncs.cpp + ../../source/gumps.cpp + ../../source/house.cpp + ../../source/IP4Address.cpp + ../../source/items.cpp + ../../source/jail.cpp + ../../source/JSEncapsulate.cpp + ../../source/lineofsight.cpp + ../../source/magic.cpp + ../../source/mapstuff.cpp + ../../source/movement.cpp + ../../source/msgboard.cpp + ../../source/MultiMul.cpp + ../../source/network.cpp + ../../source/npcs.cpp + ../../source/ObjectFactory.cpp + ../../source/PartySystem.cpp + ../../source/pcmanage.cpp + ../../source/quantityfuncs.cpp + ../../source/queue.cpp + ../../source/regions.cpp + ../../source/scriptc.cpp + ../../source/SEFunctions.cpp + ../../source/skills.cpp + ../../source/sound.cpp + ../../source/speech.cpp + ../../source/ssection.cpp + ../../source/osunique.cpp + ../../source/StringUtility.cpp + ../../source/targeting.cpp + ../../source/townregion.cpp + ../../source/trade.cpp + ../../source/UOPData.cpp + ../../source/uox3.cpp + ../../source/UOXJSMethods.cpp + ../../source/UOXJSPropertyFuncs.cpp + ../../source/vendor.cpp + ../../source/weight.cpp + ../../source/wholist.cpp + ../../source/worldmain.cpp + ../../source/TimeUtility.cpp + ../../source/osunique.hpp + ../../source/books.h + ../../source/cAccountClass.h + ../../source/cBaseObject.h + ../../source/cChar.h + ../../source/cConsole.h + ../../source/cdice.h + ../../source/cEffects.h + ../../source/cGuild.h + ../../source/cHTMLSystem.h + ../../source/cItem.h + ../../source/CJSEngine.h + ../../source/CJSMapping.h + ../../source/classes.h + ../../source/cMagic.h + ../../source/cmdtable.h + ../../source/cMultiObj.h + ../../source/combat.h + ../../source/commands.h + ../../source/ConfigOS.h + ../../source/CPacketReceive.h + ../../source/CPacketSend.h + ../../source/cRaces.h + ../../source/CResponse.h + ../../source/cScript.h + ../../source/cServerData.h + ../../source/cServerDefinitions.h + ../../source/cSkillClass.h + ../../source/cSocket.h + ../../source/cSpawnRegion.h + ../../source/cThreadQueue.h + ../../source/cVersionClass.h + ../../source/cWeather.hpp + ../../source/Dictionary.h + ../../source/enums.h + ../../source/EventTimer.hpp + ../../source/funcdecl.h + ../../source/GenericList.h + ../../source/gump.h + ../../source/IP4Address.hpp + ../../source/jail.h + ../../source/JSEncapsulate.h + ../../source/magic.h + ../../source/mapclasses.h + ../../source/mapstuff.h + ../../source/movement.h + ../../source/msgboard.h + ../../source/MultiMul.hpp + ../../source/network.h + ../../source/ObjectFactory.h + ../../source/PageVector.h + ../../source/PartySystem.h + ../../source/power.h + ../../source/Prerequisites.h + ../../source/regions.h + ../../source/scriptc.h + ../../source/SEFunctions.h + ../../source/skills.h + ../../source/speech.h + ../../source/ssection.h + ../../source/StringUtility.hpp + ../../source/teffect.h + ../../source/townregion.h + ../../source/typedefs.h + ../../source/UOPData.hpp + ../../source/uox3.h + ../../source/UOXJSClasses.h + ../../source/UOXJSMethods.h + ../../source/UOXJSPropertyEnums.h + ../../source/UOXJSPropertyFuncs.h + ../..//source/UOXJSPropertySpecs.h + ../../source/UOXStdHeaders.h + ../../source/uoxstruct.h + ../../source/weight.h + ../../source/wholist.h + ../../source/worldmain.h + ../../source/TimeUtility.hpp + $<$:${PROJECT_SOURCE_DIR}/../../assets/uox3.rc> ) -target_compile_definitions(uox - PRIVATE +# ************************************************************************* +# Platform specific settings +# ************************************************************************* + +if (WIN32) +set (CMAKE_RC_STANDARD_INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR}/../../assets/) + +target_compile_definitions(uox3 PRIVATE + _WINDOWS + EXPORT_JS_API + _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING _CRT_NO_VA_START_VALIDATION + _CRT_SECURE_NO_DEPRECATE + _CRT_NONSTDC_NO_DEPRECATE + _CONSOLE + $<$:NDEBUG> + $<$:_DEBUG> $<$:_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH> - $<$:EXPORT_JS_API> -) + ) + + target_compile_options( uox3 PRIVATE + /J + $<$:/O2> + ) +else() + + target_compile_definitions( uox3 PRIVATE + EXPORT_JS_API + $<$:_DEBUG> + ) + + target_compile_options( uox3 PRIVATE + -funsigned-char + -Wno-shift-negative-value + ) + if (APPLE) + target_compile_options( uox3 PRIVATE + $<$:-Os> + ) + else() + target_compile_options(uox3 PRIVATE + $<$:-O2> + -Wno-attributes + ) + endif(APPLE) +endif(WIN32) -target_link_libraries(uox + + +# ************************************************************************* +# the directories we need on the include path +# ************************************************************************* + +target_include_directories(uox3 PUBLIC - js32 - zlibstatic - $<$:ws2_32> + ${PROJECT_SOURCE_DIR}/../../source + ${PROJECT_SOURCE_DIR}/../../spidermonkey + ${PROJECT_SOURCE_DIR}/../../zlib ) + +# ************************************************************************* +# The libraries we need +# ************************************************************************* +target_link_libraries(uox3 PRIVATE + jscript + zlib + $<$:ws2_32> + $<$:Kernel32> + $<$:pthread> +) + +# ************************************************************************* +# The items we need built first +# ************************************************************************* +add_subdirectory(${PROJECT_SOURCE_DIR}/../../spidermonkey/make/cmake subproject/jscript) +add_subdirectory(${PROJECT_SOURCE_DIR}/../../zlib/make/cmake subproject/zlib) \ No newline at end of file diff --git a/spidermonkey/jsautocfg.h b/spidermonkey/jsautocfg.h new file mode 100644 index 000000000..78ed4bda8 --- /dev/null +++ b/spidermonkey/jsautocfg.h @@ -0,0 +1,52 @@ +#ifndef js_cpucfg___ +#define js_cpucfg___ + +/* AUTOMATICALLY GENERATED - DO NOT EDIT */ + +#define IS_LITTLE_ENDIAN 1 +#undef IS_BIG_ENDIAN + +#define JS_BYTES_PER_BYTE 1L +#define JS_BYTES_PER_SHORT 2L +#define JS_BYTES_PER_INT 4L +#define JS_BYTES_PER_INT64 8L +#define JS_BYTES_PER_LONG 8L +#define JS_BYTES_PER_FLOAT 4L +#define JS_BYTES_PER_DOUBLE 8L +#define JS_BYTES_PER_WORD 8L +#define JS_BYTES_PER_DWORD 8L + +#define JS_BITS_PER_BYTE 8L +#define JS_BITS_PER_SHORT 16L +#define JS_BITS_PER_INT 32L +#define JS_BITS_PER_INT64 64L +#define JS_BITS_PER_LONG 64L +#define JS_BITS_PER_FLOAT 32L +#define JS_BITS_PER_DOUBLE 64L +#define JS_BITS_PER_WORD 64L + +#define JS_BITS_PER_BYTE_LOG2 3L +#define JS_BITS_PER_SHORT_LOG2 4L +#define JS_BITS_PER_INT_LOG2 5L +#define JS_BITS_PER_INT64_LOG2 6L +#define JS_BITS_PER_LONG_LOG2 6L +#define JS_BITS_PER_FLOAT_LOG2 5L +#define JS_BITS_PER_DOUBLE_LOG2 6L +#define JS_BITS_PER_WORD_LOG2 6L + +#define JS_ALIGN_OF_SHORT 2L +#define JS_ALIGN_OF_INT 4L +#define JS_ALIGN_OF_LONG 8L +#define JS_ALIGN_OF_INT64 8L +#define JS_ALIGN_OF_FLOAT 4L +#define JS_ALIGN_OF_DOUBLE 8L +#define JS_ALIGN_OF_POINTER 8L +#define JS_ALIGN_OF_WORD 8L + +#define JS_BYTES_PER_WORD_LOG2 3L +#define JS_BYTES_PER_DWORD_LOG2 3L +#define JS_WORDS_PER_DWORD_LOG2 0L + +#define JS_STACK_GROWTH_DIRECTION (-1) + +#endif /* js_cpucfg___ */ diff --git a/spidermonkey/make/Spidermonkey.txt b/spidermonkey/make/Spidermonkey.txt new file mode 100644 index 000000000..fdb873183 --- /dev/null +++ b/spidermonkey/make/Spidermonkey.txt @@ -0,0 +1,5 @@ +Spidermonkey distribution consists of three components: + +1. fdlibm (math library) +2. jscript (referenced in the distribution as js32, this is the actual interpreter) +3. jskwgen (Command line tool to interactively do javascript). This is not used by UOX3 \ No newline at end of file diff --git a/spidermonkey/make/VS2017/fdlibm/fdlibm.sln b/spidermonkey/make/VS2017/fdlibm/fdlibm.sln new file mode 100644 index 000000000..389e0183b --- /dev/null +++ b/spidermonkey/make/VS2017/fdlibm/fdlibm.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33122.133 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "fdlibm.vcxproj", "{DEF425F3-E969-4696-AB8C-8D0D7EAEF868}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.ActiveCfg = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.Build.0 = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.Build.0 = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.ActiveCfg = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.Build.0 = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.ActiveCfg = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A06B0342-E2EF-455C-9017-49016F24C32E} + EndGlobalSection +EndGlobal diff --git a/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj b/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj index 6a95ca5ed..708937e8c 100644 --- a/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj +++ b/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj @@ -1,154 +1,182 @@ - + Debug Win32 - - Debug - x64 - Release Win32 + + Debug + x64 + Release x64 - {0E587247-C1EF-4111-8E0B-9199DA785C25} - fdlibm + 16.0 Win32Proj + {def425f3-e969-4696-ab8c-8d0d7eaef868} + fdlibm 8.1 - + StaticLibrary + true v141 Unicode - true - + StaticLibrary + false v141 - Unicode true + Unicode - + StaticLibrary + true v141 Unicode - + StaticLibrary + false v141 + true Unicode - + + + - + - + - + - - <_ProjectFileVersion>15.0.28307.799 - - - .\Debug\x86\ - .\Debug\x86\ - - - .\Debug\x64\ - .\Debug\x64\ - - - .\Release\x86\ - .\Release\x86\ - - - .\Release\x64\ - .\Release\x64\ - - Disabled - WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level3 - ProgramDatabase - false + true + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreaded + + + + true + - + - Disabled - WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_LIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - - Level3 - ProgramDatabase - true + true + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreaded + + + + true + true + + + true + - + - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;NDEBUG;XP_WIN;WIN32;%(PreprocessorDefinitions) - MultiThreadedDLL - Level3 - - true + true + _DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreaded + + + + true + - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;NDEBUG;XP_WIN;WIN32;%(PreprocessorDefinitions) - MultiThreadedDLL - - Level3 - - - true + true + true + true + NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreaded + + + + true + true + + + true + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + diff --git a/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj.filters b/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj.filters index 312ffd4bb..db18936c3 100644 --- a/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj.filters +++ b/spidermonkey/make/VS2017/fdlibm/fdlibm.vcxproj.filters @@ -3,66 +3,66 @@ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Header Files diff --git a/spidermonkey/make/VS2017/jscript/jscript.sln b/spidermonkey/make/VS2017/jscript/jscript.sln index 7ccd3df64..b705ba3fd 100644 --- a/spidermonkey/make/VS2017/jscript/jscript.sln +++ b/spidermonkey/make/VS2017/jscript/jscript.sln @@ -1,50 +1,41 @@ + Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.1082 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33122.133 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "js32", "js32.vcxproj", "{BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jscript", "jscript.vcxproj", "{2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jskwgen", "jskwgen.vcxproj", "{2F2FAA80-4ADC-433C-A682-B667F56D6881}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "fdlibm\fdlibm.vcxproj", "{0E587247-C1EF-4111-8E0B-9199DA785C25}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "..\fdlibm\fdlibm.vcxproj", "{DEF425F3-E969-4696-AB8C-8D0D7EAEF868}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 + Debug|x86 = Debug|x86 Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Debug|Win32.ActiveCfg = Debug|Win32 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Debug|Win32.Build.0 = Debug|Win32 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Debug|x64.ActiveCfg = Debug|x64 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Debug|x64.Build.0 = Debug|x64 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Release|Win32.ActiveCfg = Release|Win32 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Release|Win32.Build.0 = Release|Win32 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Release|x64.ActiveCfg = Release|x64 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08}.Release|x64.Build.0 = Release|x64 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Debug|Win32.Build.0 = Debug|Win32 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Debug|x64.ActiveCfg = Debug|x64 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Debug|x64.Build.0 = Debug|x64 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Release|Win32.ActiveCfg = Release|Win32 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Release|Win32.Build.0 = Release|Win32 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Release|x64.ActiveCfg = Release|x64 - {2F2FAA80-4ADC-433C-A682-B667F56D6881}.Release|x64.Build.0 = Release|x64 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Debug|Win32.Build.0 = Debug|Win32 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Debug|x64.ActiveCfg = Debug|x64 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Debug|x64.Build.0 = Debug|x64 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Release|Win32.ActiveCfg = Release|Win32 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Release|Win32.Build.0 = Release|Win32 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Release|x64.ActiveCfg = Release|x64 - {0E587247-C1EF-4111-8E0B-9199DA785C25}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.ActiveCfg = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.Build.0 = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.ActiveCfg = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.Build.0 = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.ActiveCfg = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.ActiveCfg = Release|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.Build.0 = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.ActiveCfg = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.Build.0 = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.Build.0 = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.ActiveCfg = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.Build.0 = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.ActiveCfg = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {82593042-816C-4CC6-94FC-DACA20ED87C1} + SolutionGuid = {84C26C69-D33A-4ECD-A3EF-71AE6CB24595} EndGlobalSection EndGlobal diff --git a/spidermonkey/make/VS2017/jscript/jscript.vcxproj b/spidermonkey/make/VS2017/jscript/jscript.vcxproj index 9ad0cf4f5..c05e87804 100644 --- a/spidermonkey/make/VS2017/jscript/jscript.vcxproj +++ b/spidermonkey/make/VS2017/jscript/jscript.vcxproj @@ -1,213 +1,257 @@ - + Debug Win32 - - Debug - x64 - Release Win32 + + Debug + x64 + Release x64 - {BD11B616-0F02-4DD1-B3F9-D0A5F718AA08} - js32 + 16.0 + Win32Proj + {2af3a5ea-0cec-4d24-80f7-05e0b8b300c5} + jscript 8.1 - + StaticLibrary + true v141 + Unicode - + StaticLibrary + false v141 + true + Unicode - - DynamicLibrary + + StaticLibrary + true v141 + Unicode - + StaticLibrary + false v141 + true + Unicode - + + + - + - + - + - - <_ProjectFileVersion>15.0.28307.799 - - - .\Debug\x86\ - .\Debug\x86\ - - - .\Debug\x64\ - .\Debug\x64\ - - - .\Release\x86\ - .\Release\x86\ - - - .\Release\x64\ - .\Release\x64\ - - Disabled - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_WINDOWS;_X86_=1;DEBUG;EXPORT_JS_API;JSFILE;WIN32;XP_WIN;%(PreprocessorDefinitions) - MultiThreadedDebug Level3 - ProgramDatabase + true + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true + NotUsing + + stdcpp17 + stdc11 + true + 4047;4703;4267;4146;4244 + MultiThreadedDebug - $(OutDir)$(ProjectName).dll + + true - winmm.lib;%(AdditionalDependencies) + + winmm.lib + - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;NDEBUG;WIN32;XP_WIN;%(PreprocessorDefinitions) Level3 - Speed + true + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true + NotUsing + + stdcpp17 + stdc11 true + 4047;4703;4267;4146;4244 + Speed MultiThreaded - winmm.lib;%(AdditionalDependencies) - C:\Storage\src\c++\SpiderMonkey\Release;%(AdditionalLibraryDirectories) - true + + false + true + true + + winmm.lib + true + + + + + Level3 + true + _DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true + NotUsing + + stdcpp17 + stdc11 + true + 4047;4703;4267;4146;4244;4334;4090;4311 + MultiThreadedDebug + + + + + true + + + winmm.lib + - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;NDEBUG;WIN32;XP_WIN;%(PreprocessorDefinitions) Level3 - Speed + true + true + true + NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true + NotUsing + + stdcpp17 + stdc11 true + 4047;4703;4267;4146;4244;4334;4090;4311 MultiThreaded - winmm.lib;%(AdditionalDependencies) - C:\Storage\src\c++\SpiderMonkey\Release;%(AdditionalLibraryDirectories) - true + + false + true + true + + winmm.lib + true + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - {0e587247-c1ef-4111-8e0b-9199da785c25} - false - - - {2f2faa80-4adc-433c-a682-b667f56d6881} - false - + diff --git a/spidermonkey/make/VS2017/jscript/jscript.vcxproj.filters b/spidermonkey/make/VS2017/jscript/jscript.vcxproj.filters index d93b86455..973badb26 100644 --- a/spidermonkey/make/VS2017/jscript/jscript.vcxproj.filters +++ b/spidermonkey/make/VS2017/jscript/jscript.vcxproj.filters @@ -3,241 +3,241 @@ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + \ No newline at end of file diff --git a/spidermonkey/make/VS2017/jskwgen/jskwgen.sln b/spidermonkey/make/VS2017/jskwgen/jskwgen.sln new file mode 100644 index 000000000..5a6551bff --- /dev/null +++ b/spidermonkey/make/VS2017/jskwgen/jskwgen.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33122.133 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jskwgen", "jskwgen.vcxproj", "{F90F099A-C93E-4AA6-B98A-D0D50C962D6A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "..\fdlibm\fdlibm.vcxproj", "{DEF425F3-E969-4696-AB8C-8D0D7EAEF868}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jscript", "..\jscript\jscript.vcxproj", "{2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x64.ActiveCfg = Debug|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x64.Build.0 = Debug|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x86.ActiveCfg = Debug|Win32 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x86.Build.0 = Debug|Win32 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x64.ActiveCfg = Release|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x64.Build.0 = Release|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x86.ActiveCfg = Release|Win32 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x86.Build.0 = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.ActiveCfg = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.Build.0 = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.Build.0 = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.ActiveCfg = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.Build.0 = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.ActiveCfg = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.Build.0 = Release|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.ActiveCfg = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.Build.0 = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.ActiveCfg = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.Build.0 = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.ActiveCfg = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.ActiveCfg = Release|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D38902BF-7935-4951-A5E2-8D9D13346915} + EndGlobalSection +EndGlobal diff --git a/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj b/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj index 380351e1e..e98357481 100644 --- a/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj +++ b/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj @@ -1,132 +1,164 @@ - + Debug Win32 - - Debug - x64 - Release Win32 + + Debug + x64 + Release x64 - {2F2FAA80-4ADC-433C-A682-B667F56D6881} + 16.0 + Win32Proj + {f90f099a-c93e-4aa6-b98a-d0d50c962d6a} jskwgen 8.1 - + Application - v141 + true + v143 + Unicode - + Application - v141 + false + v143 + true + Unicode - + Application + true v141 + Unicode - + Application + false v141 + true + Unicode - + + + - + - + - + - - <_ProjectFileVersion>15.0.28307.799 - - - $(SolutionDir)Debug\x86\ - $(SolutionDir)Debug\x86\ - - - .\Debug\x64\ - .\Debug\x64\ - - - .\Release\x86\ - .\Release\x86\ - - - .\Release\x64\ - .\Release\x64\ - - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) + Level3 + true + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 + true + + Console true - - $(OutDir)$(ProjectName).exe $(OutDir)jsautokw.h - - + - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 true + + Console + false + true true - - .\Debug\x64\$(ProjectName).exe .\Debug\x64\jsautokw.h - - + - _CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;NDEBUG;WIN32;XP_WIN;%(PreprocessorDefinitions) Level3 + true + _DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 true + - - .\Release\x86\$(ProjectName).exe .\Release\x86\jsautokw.h - + + Console + true + - _CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;NDEBUG;WIN32;XP_WIN;%(PreprocessorDefinitions) Level3 + true + true + true + NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 true + - - .\Release\x64\$(ProjectName).exe .\Release\x64\jsautokw.h - + + Console + false + true + true + - + + + + + - - + - + + {def425f3-e969-4696-ab8c-8d0d7eaef868} + + + {2af3a5ea-0cec-4d24-80f7-05e0b8b300c5} + diff --git a/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj.filters b/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj.filters index 8cb0d0b1a..35f5cc355 100644 --- a/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj.filters +++ b/spidermonkey/make/VS2017/jskwgen/jskwgen.vcxproj.filters @@ -3,31 +3,31 @@ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - + Source Files - + Header Files - + Header Files - + \ No newline at end of file diff --git a/spidermonkey/make/VS2022/fdlibm/fdlibm.sln b/spidermonkey/make/VS2022/fdlibm/fdlibm.sln new file mode 100644 index 000000000..389e0183b --- /dev/null +++ b/spidermonkey/make/VS2022/fdlibm/fdlibm.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33122.133 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "fdlibm.vcxproj", "{DEF425F3-E969-4696-AB8C-8D0D7EAEF868}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.ActiveCfg = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.Build.0 = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.Build.0 = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.ActiveCfg = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.Build.0 = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.ActiveCfg = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A06B0342-E2EF-455C-9017-49016F24C32E} + EndGlobalSection +EndGlobal diff --git a/spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj b/spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj new file mode 100644 index 000000000..19052045a --- /dev/null +++ b/spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj @@ -0,0 +1,184 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {def425f3-e969-4696-ab8c-8d0d7eaef868} + fdlibm + 10.0 + + + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + false + v143 + true + Unicode + + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreadedDebug + + + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreaded + + + + + true + true + + + true + + + + + Level3 + true + _DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreadedDebug + + + + + true + + + + + Level3 + true + true + true + NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_IEEE_LIBM;_LIB;_WINDOWS;_X86_=1;;XP_WIN + true + NotUsing + + + stdcpp17 + stdc11 + MultiThreaded + + + + + true + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj.filters b/spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj.filters new file mode 100644 index 000000000..db18936c3 --- /dev/null +++ b/spidermonkey/make/VS2022/fdlibm/fdlibm.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/spidermonkey/make/VS2022/jscript/jscript.sln b/spidermonkey/make/VS2022/jscript/jscript.sln index 1d9f6b6ef..b705ba3fd 100644 --- a/spidermonkey/make/VS2022/jscript/jscript.sln +++ b/spidermonkey/make/VS2022/jscript/jscript.sln @@ -1,25 +1,41 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.0.32112.339 +VisualStudioVersion = 17.4.33122.133 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsengine", "jsengine.vcxproj", "{4366F707-C296-4510-85AA-A61DD77DE34B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jscript", "jscript.vcxproj", "{2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "..\fdlibm\fdlibm.vcxproj", "{DEF425F3-E969-4696-AB8C-8D0D7EAEF868}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4366F707-C296-4510-85AA-A61DD77DE34B}.Debug|x64.ActiveCfg = Debug|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Debug|x64.Build.0 = Debug|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Release|x64.ActiveCfg = Release|x64 - {4366F707-C296-4510-85AA-A61DD77DE34B}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.ActiveCfg = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.Build.0 = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.ActiveCfg = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.Build.0 = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.ActiveCfg = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.ActiveCfg = Release|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.Build.0 = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.ActiveCfg = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.Build.0 = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.Build.0 = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.ActiveCfg = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.Build.0 = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.ActiveCfg = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {418FA150-25A2-43A4-9A91-550E18C1F4E5} + SolutionGuid = {84C26C69-D33A-4ECD-A3EF-71AE6CB24595} EndGlobalSection EndGlobal diff --git a/spidermonkey/make/VS2022/jscript/jscript.vcxproj b/spidermonkey/make/VS2022/jscript/jscript.vcxproj index 299886f7c..6d1883add 100644 --- a/spidermonkey/make/VS2022/jscript/jscript.vcxproj +++ b/spidermonkey/make/VS2022/jscript/jscript.vcxproj @@ -1,6 +1,14 @@ + + Debug + Win32 + + + Release + Win32 + Debug x64 @@ -10,90 +18,27 @@ x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16.0 Win32Proj - {4366f707-c296-4510-85aa-a61dd77de34b} - jsengine + {2af3a5ea-0cec-4d24-80f7-05e0b8b300c5} + jscript 10.0 + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + false + v143 + true + Unicode + StaticLibrary true @@ -104,6 +49,7 @@ StaticLibrary false v143 + true Unicode @@ -111,6 +57,12 @@ + + + + + + @@ -118,29 +70,74 @@ - - true - - - false - - + - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;WIN32;_DEBUG;XP_WIN;_LIB;%(PreprocessorDefinitions) + Level3 + true + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true NotUsing + stdcpp17 stdc11 - ..\ - Neither + true + 4047;4703;4267;4146;4244 MultiThreadedDebug - ProgramDatabase + + + + + true + + + winmm.lib + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true + NotUsing + + stdcpp17 + stdc11 true - 4090;5105;4047;4311 + 4047;4703;4267;4146;4244 + MultiThreaded false + true + true + + + winmm.lib + true + + + + + Level3 + true + _DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true + NotUsing + + stdcpp17 + stdc11 + true + 4047;4703;4267;4146;4244;4334;4090;4311 + MultiThreadedDebug + + + + true @@ -149,27 +146,112 @@ - _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;WIN32;XP_WIN;NDEBUG;_LIB;%(PreprocessorDefinitions) + Level3 + true + true + true + NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINDOWS;_X86_=1;EXPORT_JS_API;JSFILE;XP_WIN + true NotUsing + stdcpp17 stdc11 - ..\ true - Speed + 4047;4703;4267;4146;4244;4334;4090;4311 MultiThreaded - 4090;5105;4047;4311 false true - true + false winmm.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spidermonkey/make/VS2022/jscript/jscript.vcxproj.filters b/spidermonkey/make/VS2022/jscript/jscript.vcxproj.filters index b843d90d4..973badb26 100644 --- a/spidermonkey/make/VS2022/jscript/jscript.vcxproj.filters +++ b/spidermonkey/make/VS2022/jscript/jscript.vcxproj.filters @@ -15,223 +15,229 @@ - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + + Header Files + + Header Files - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - + \ No newline at end of file diff --git a/spidermonkey/make/VS2022/jskwgen/jskwgen.sln b/spidermonkey/make/VS2022/jskwgen/jskwgen.sln new file mode 100644 index 000000000..5a6551bff --- /dev/null +++ b/spidermonkey/make/VS2022/jskwgen/jskwgen.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33122.133 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jskwgen", "jskwgen.vcxproj", "{F90F099A-C93E-4AA6-B98A-D0D50C962D6A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fdlibm", "..\fdlibm\fdlibm.vcxproj", "{DEF425F3-E969-4696-AB8C-8D0D7EAEF868}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jscript", "..\jscript\jscript.vcxproj", "{2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x64.ActiveCfg = Debug|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x64.Build.0 = Debug|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x86.ActiveCfg = Debug|Win32 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Debug|x86.Build.0 = Debug|Win32 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x64.ActiveCfg = Release|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x64.Build.0 = Release|x64 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x86.ActiveCfg = Release|Win32 + {F90F099A-C93E-4AA6-B98A-D0D50C962D6A}.Release|x86.Build.0 = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.ActiveCfg = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x64.Build.0 = Debug|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Debug|x86.Build.0 = Debug|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.ActiveCfg = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x64.Build.0 = Release|x64 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.ActiveCfg = Release|Win32 + {DEF425F3-E969-4696-AB8C-8D0D7EAEF868}.Release|x86.Build.0 = Release|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.ActiveCfg = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x64.Build.0 = Debug|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.ActiveCfg = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Debug|x86.Build.0 = Debug|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.ActiveCfg = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x64.Build.0 = Release|x64 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.ActiveCfg = Release|Win32 + {2AF3A5EA-0CEC-4D24-80F7-05E0B8B300C5}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D38902BF-7935-4951-A5E2-8D9D13346915} + EndGlobalSection +EndGlobal diff --git a/spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj b/spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj new file mode 100644 index 000000000..fcb3f4ffb --- /dev/null +++ b/spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj @@ -0,0 +1,166 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {f90f099a-c93e-4aa6-b98a-d0d50c962d6a} + jskwgen + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 + true + + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 + true + + + + Console + false + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 + true + + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;JSFILE;XP_WIN + true + stdcpp17 + stdc11 + true + + + + Console + false + true + true + + + + + + + + + + + + + + + {def425f3-e969-4696-ab8c-8d0d7eaef868} + + + {2af3a5ea-0cec-4d24-80f7-05e0b8b300c5} + + + + + + \ No newline at end of file diff --git a/spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj.filters b/spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj.filters new file mode 100644 index 000000000..35f5cc355 --- /dev/null +++ b/spidermonkey/make/VS2022/jskwgen/jskwgen.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/spidermonkey/make/cmake/CMakeLists.txt b/spidermonkey/make/cmake/CMakeLists.txt new file mode 100644 index 000000000..3f78e88ec --- /dev/null +++ b/spidermonkey/make/cmake/CMakeLists.txt @@ -0,0 +1,152 @@ +cmake_minimum_required(VERSION 3.18) +project(jscript VERSION 1.7 LANGUAGES C) + +add_library(jscript STATIC + ../../jsapi.c + ../../jsarena.c + ../../jsarray.c + ../../jsatom.c + ../../jsbool.c + ../../jscntxt.c + ../../jsdate.c + ../../jsdbgapi.c + ../../jsdhash.c + ../../jsdtoa.c + ../../jsemit.c + ../../jsexn.c + ../../jsfun.c + ../../jsgc.c + ../../jshash.c + ../../jsinterp.c + ../../jsiter.c + ../../jslock.c + ../../jslog2.c + ../../jslong.c + ../../jsmath.c + ../../jsnum.c + ../../jsobj.c + ../../jsopcode.c + ../../jsparse.c + ../../jsprf.c + ../../jsregexp.c + ../../jsscan.c + ../../jsscope.c + ../../jsscript.c + ../../jsstr.c + ../../jsutil.c + ../../jsxdrapi.c + ../../jsxml.c + ../../prmjtime.c + ../../jsapi.h + ../../jsarena.h + ../../jsarray.h + ../../jsatom.h + ../../jsbool.h + ../../jscntxt.h + ../../jsdate.h + ../../jsdbgapi.h + ../../jsdhash.h + ../../jsdtoa.h + ../../jsemit.h + ../../jsexn.h + ../../jsfun.h + ../../jsgc.h + ../../jshash.h + ../../jsinterp.h + ../../jsiter.h + ../../jslock.h + ../../jslong.h + ../../jsmath.h + ../../jsnum.h + ../../jsobj.h + ../../jsopcode.h + ../../jsparse.h + ../../jsprf.h + ../../jsprvtd.h + ../../jspubtd.h + ../../jsregexp.h + ../../jsscan.h + ../../jsscope.h + ../../jsscript.h + ../../jsstddef.h + ../../jsstr.h + ../../jstypes.h + ../../jsutil.h + ../../jsxdrapi.h + ../../jsxml.h + ../../prmjtime.h + ../../jsopcode.tbl +) + +if (WIN32) + + target_compile_definitions( jscript PRIVATE + _LIB + _CRT_SECURE_NO_DEPRECATE + _CRT_NONSTDC_NO_DEPRECATE + _WINDOWS + _X86_=1 + EXPORT_JS_API + JSFILE + XP_WIN + ) + + target_compile_options( jscript PRIVATE + /W3 + /sdl- + /wd4244 + /wd4267 + /wd4047 + /wd4146 + /wd4334 + /wd4311 + /WX- + $<$:/O2> + ) +# ************************************************************************* +# The libraries we need +# ************************************************************************* +target_link_libraries(jscript PRIVATE + $<$:winmm> +) + + +else() + + target_compile_definitions( jscript PRIVATE + XP_UNIX + EXPORT_JS_API + HAVE_VA_LIST_AS_ARRAY + SVR4 + SYSV + POSIX_SOURCE + _DEFAULT_SOURCE + HAVE_LOCALTIME_R + ) + + target_compile_options( jscript PRIVATE + + -Wno-shift-negative-value + -Wno-implicit-function-declaration + -Wno-strict-prototypes + -Wno-logical-not-parentheses + -Wno-int-to-void-pointer-cast + -Wno-pointer-to-int-cast + -Wno-switch + -Wno-incompatible-pointer-types + -Wno-non-literal-null-conversion + -Wno-tautological-constant-out-of-range-compare + ) + if (APPLE) + target_compile_options( jscript PRIVATE + $<$:-Os> + ) + else() + target_compile_options(jscript PRIVATE + $<$:-O2> + ) + endif() +endif(WIN32) + + + diff --git a/zlib/README.md b/zlib/README.md index 19b9d1134..d22e2a79b 100644 --- a/zlib/README.md +++ b/zlib/README.md @@ -1,21 +1,52 @@ # zlib-1.2.11 configured for UOX3 -Herein are configured a minimum set of files required to compile a static library of zlib-1-2.11 on Windows, Linux and macOS, to be linked with [Ultima Offline eXperiment 3](https://github.com/UOX3DevTeam/UOX3/). Extraneous files and folders not required for this have been removed from this configuration; for the full, official zlib project complete with compilation solutions for other platforms and third party contributions, visit https://github.com/madler/zlib +Herein are configured a minimum set of files required to compile a static library of zlib on Windows, Linux/FreeBSD and macOS, for linking with Ultima Offline eXperiment 3 and utilized to access Ultima Online data files and packets. Build setups can be found in the make/ folder, but extraneous build files and folders have been removed from this configuration. For the full, official zlib project complete with compilation solutions for other platforms and third party contributions, visit https://github.com/madler/zlib For detailed instructions on compiling and using this zlib configuration with UOX3, check out https://github.com/UOX3DevTeam/UOX3. Alternatively, follow the below instructions at your own peril:
    - Windows 10 (and 7/8?) - - To compile on Windows, open zlib.sln (VS2017 or newer) in the root zlib folder, choose your build type (release/debug, x64/x86) and go to Build -> Build zlib-static - + Windows + + ### Visual Studio 2017/2022 + 1. Open zlib.sln in the *make/[VS2017/VS2022]/* folder + 2. Choose *Release/Debug* build type from dropdown menu + 3. Go *Build -> Build zlib-static* + + ### CMake + 1. Open Developer Command Prompt for VS2017 or Developer Powershell for VS2022 + 2. Traverse to the make/cmake folder, and enter the following commands: + 3. `mkdir build` + 4. `cd build` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"NMake Makefiles"` + 6. `cmake --build . --config Release`
    +--- +
    - Linux/macOS + Linux/FreeBSD + + ### CMake + 1. Open a new Terminal + 2. Traverse to the make/cmake folder, and enter the following commands: + 3. `mkdir build` + 4. `cd build` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release` + 6. `cmake --build . --config Release` + +
    - To compile on Linux/macOS, open a new terminal window, navigate to the root zlib directory, and use the following commands: -./configure -make +--- +
    + macOS + + ### CMake + 1. Open a new Terminal + 2. Traverse to the make/cmake folder, and enter the following commands: + 3. `mkdir build` + 4. `cd build` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles"` + 6. `cmake --build . --config Release` +
    \ No newline at end of file diff --git a/zlib/make/VS2017/zlib.sln b/zlib/make/VS2017/zlib.sln index aa6029c86..6bd668ebd 100644 --- a/zlib/make/VS2017/zlib.sln +++ b/zlib/make/VS2017/zlib.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26228.4 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib-static", "zlib-static\zlib-static.vcxproj", "{B56D17BC-072B-42F3-844A-870A07AFBAAA}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcxproj", "{B56D17BC-072B-42F3-844A-870A07AFBAAA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/zlib/make/VS2017/zlib.vcxproj b/zlib/make/VS2017/zlib.vcxproj index 24e7954e3..460945c66 100644 --- a/zlib/make/VS2017/zlib.vcxproj +++ b/zlib/make/VS2017/zlib.vcxproj @@ -131,34 +131,34 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/zlib/make/VS2017/zlib.vcxproj.filters b/zlib/make/VS2017/zlib.vcxproj.filters index 77209ddd6..e1906bb87 100644 --- a/zlib/make/VS2017/zlib.vcxproj.filters +++ b/zlib/make/VS2017/zlib.vcxproj.filters @@ -15,84 +15,84 @@
    - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files diff --git a/zlib/make/VS2022/zlib.sln b/zlib/make/VS2022/zlib.sln index 52c7a96e5..ff3b53abc 100644 --- a/zlib/make/VS2022/zlib.sln +++ b/zlib/make/VS2022/zlib.sln @@ -1,25 +1,31 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.0.32112.339 +VisualStudioVersion = 17.4.33122.133 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcxproj", "{7DDBF2DC-F199-4F38-B56D-C75270C3922D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcxproj", "{091529FD-5075-45F1-9D96-5708B3AB7C2B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Debug|x64.ActiveCfg = Debug|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Debug|x64.Build.0 = Debug|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Release|x64.ActiveCfg = Release|x64 - {7DDBF2DC-F199-4F38-B56D-C75270C3922D}.Release|x64.Build.0 = Release|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Debug|x64.ActiveCfg = Debug|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Debug|x64.Build.0 = Debug|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Debug|x86.ActiveCfg = Debug|Win32 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Debug|x86.Build.0 = Debug|Win32 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Release|x64.ActiveCfg = Release|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Release|x64.Build.0 = Release|x64 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Release|x86.ActiveCfg = Release|Win32 + {091529FD-5075-45F1-9D96-5708B3AB7C2B}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7E286C55-7CB3-45F6-9EB3-204552ABAE75} + SolutionGuid = {0614A13A-089E-40B8-B413-350C21671685} EndGlobalSection EndGlobal diff --git a/zlib/make/VS2022/zlib.vcxproj b/zlib/make/VS2022/zlib.vcxproj index 4f3c05c1a..6e9a4c9af 100644 --- a/zlib/make/VS2022/zlib.vcxproj +++ b/zlib/make/VS2022/zlib.vcxproj @@ -1,6 +1,14 @@ + + Debug + Win32 + + + Release + Win32 + Debug x64 @@ -10,49 +18,32 @@ x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16.0 Win32Proj - {7ddbf2dc-f199-4f38-b56d-c75270c3922d} + {091529fd-5075-45f1-9d96-5708b3ab7c2b} zlib 10.0 + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + false + v143 + true + Unicode + StaticLibrary true v143 - NotSet + Unicode StaticLibrary @@ -66,34 +57,80 @@ + + + + + + - - true - - - false - - + + Level3 - Disabled true - WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_LIB;%(PreprocessorDefinitions) - Default + WIN32;_DEBUG;_LIB;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE + true NotUsing - pch.h + + stdcpp17 stdc11 - ..\ + true MultiThreadedDebug - true - ProgramDatabase + + + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE + true + NotUsing + + + stdcpp17 + stdc11 + true + MultiThreaded + + + + + true + true + true + + + true + + + + + Level3 + true + _DEBUG;_LIB;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE + true + NotUsing + + + stdcpp17 + stdc11 + true 4267 + MultiThreadedDebug @@ -104,29 +141,61 @@ Level3 - MaxSpeed true true true - WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;_LIB;%(PreprocessorDefinitions) - Default + NDEBUG;_LIB;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE + true NotUsing - pch.h + + stdcpp17 stdc11 - ..\ - true - MultiThreaded + true 4267 + MultiThreaded - true + false true true + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zlib/make/VS2022/zlib.vcxproj.filters b/zlib/make/VS2022/zlib.vcxproj.filters index 3f7feda68..aa831d34b 100644 --- a/zlib/make/VS2022/zlib.vcxproj.filters +++ b/zlib/make/VS2022/zlib.vcxproj.filters @@ -15,85 +15,85 @@
    - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + \ No newline at end of file diff --git a/zlib/make/XCode/Why-No-Project.txt b/zlib/make/XCode/Why-No-Project.txt new file mode 100644 index 000000000..fdc328871 --- /dev/null +++ b/zlib/make/XCode/Why-No-Project.txt @@ -0,0 +1,2 @@ +XCode uses the zlib that comes with macOS. No reason to build +a separate project. \ No newline at end of file diff --git a/zlib/make/cmake/CMakeLists.txt b/zlib/make/cmake/CMakeLists.txt index 0fe939df6..b10a668e7 100644 --- a/zlib/make/cmake/CMakeLists.txt +++ b/zlib/make/cmake/CMakeLists.txt @@ -1,249 +1,74 @@ -cmake_minimum_required(VERSION 2.4.4) -set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) - -project(zlib C) - -set(VERSION "1.2.11") - -option(ASM686 "Enable building i686 assembly implementation") -option(AMD64 "Enable building amd64 assembly implementation") - -set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") -set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") -set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") -set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages") -set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") - -include(CheckTypeSize) -include(CheckFunctionExists) -include(CheckIncludeFile) -include(CheckCSourceCompiles) -enable_testing() - -check_include_file(sys/types.h HAVE_SYS_TYPES_H) -check_include_file(stdint.h HAVE_STDINT_H) -check_include_file(stddef.h HAVE_STDDEF_H) - -# -# Check to see if we have large file support -# -set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) -# We add these other definitions here because CheckTypeSize.cmake -# in CMake 2.4.x does not automatically do so and we want -# compatibility with CMake 2.4.x. -if(HAVE_SYS_TYPES_H) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) -endif() -if(HAVE_STDINT_H) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) -endif() -if(HAVE_STDDEF_H) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) -endif() -check_type_size(off64_t OFF64_T) -if(HAVE_OFF64_T) - add_definitions(-D_LARGEFILE64_SOURCE=1) -endif() -set(CMAKE_REQUIRED_DEFINITIONS) # clear variable - -# -# Check for fseeko -# -check_function_exists(fseeko HAVE_FSEEKO) -if(NOT HAVE_FSEEKO) - add_definitions(-DNO_FSEEKO) -endif() - -# -# Check for unistd.h -# -check_include_file(unistd.h Z_HAVE_UNISTD_H) - -if(MSVC) - set(CMAKE_DEBUG_POSTFIX "d") - add_definitions(-D_CRT_SECURE_NO_DEPRECATE) - add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -endif() - -if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) - # If we're doing an out of source build and the user has a zconf.h - # in their source tree... - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) - message(STATUS "Renaming") - message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h") - message(STATUS "to 'zconf.h.included' because this file is included with zlib") - message(STATUS "but CMake generates it automatically in the build directory.") - file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) - endif() -endif() - -set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein - ${ZLIB_PC} @ONLY) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein - ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) -include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) - - -#============================================================================ -# zlib -#============================================================================ - -set(ZLIB_PUBLIC_HDRS - ${CMAKE_CURRENT_BINARY_DIR}/zconf.h - zlib.h -) -set(ZLIB_PRIVATE_HDRS - crc32.h - deflate.h - gzguts.h - inffast.h - inffixed.h - inflate.h - inftrees.h - trees.h - zutil.h +cmake_minimum_required(VERSION 3.18) +project(zlib VERSION 1 LANGUAGES C) + +add_library(zlib STATIC + ../../adler32.c + ../../compress.c + ../../crc32.c + ../../deflate.c + ../../gzclose.c + ../../gzlib.c + ../../gzread.c + ../../gzwrite.c + ../../infback.c + ../../inffast.c + ../../inflate.c + ../../inftrees.c + ../../trees.c + ../../uncompr.c + ../../zutil.c + ../../crc32.h + ../../deflate.h + ../../gzguts.h + ../../inffast.h + ../../inffixed.h + ../../inflate.h + ../../inftrees.h + ../../trees.h + ../../zconf.h + ../../zlib.h + ../../zutil.h ) -set(ZLIB_SRCS - adler32.c - compress.c - crc32.c - deflate.c - gzclose.c - gzlib.c - gzread.c - gzwrite.c - inflate.c - infback.c - inftrees.c - inffast.c - trees.c - uncompr.c - zutil.c -) - -if(NOT MINGW) - set(ZLIB_DLL_SRCS - win32/zlib1.rc # If present will override custom build rule below. - ) -endif() - -if(CMAKE_COMPILER_IS_GNUCC) - if(ASM686) - set(ZLIB_ASMS contrib/asm686/match.S) - elseif (AMD64) - set(ZLIB_ASMS contrib/amd64/amd64-match.S) - endif () - - if(ZLIB_ASMS) - add_definitions(-DASMV) - set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE) - endif() -endif() -if(MSVC) - if(ASM686) - ENABLE_LANGUAGE(ASM_MASM) - set(ZLIB_ASMS - contrib/masmx86/inffas32.asm - contrib/masmx86/match686.asm +if (WIN32) + + target_compile_definitions(zlib PRIVATE + _LIB + _WINDOWS + _CRT_SECURE_NO_DEPRECATE + _CRT_NONSTDC_NO_DEPRECATE + ) + + target_compile_options( zlib PRIVATE + /W3 + /sdl- + /wd4244 + /wd4267 + /wd4047 + /wd4146 + /wd4334 + /wd4311 + /WX- + $<$:/O2> + ) + +else() + + target_compile_definitions( zlib PRIVATE + ) + + target_compile_options( zlib PRIVATE + -Wno-implicit-function-declaration + ) + if (APPLE) + target_compile_options( zlib PRIVATE + $<$:-Os> ) - elseif (AMD64) - ENABLE_LANGUAGE(ASM_MASM) - set(ZLIB_ASMS - contrib/masmx64/gvmat64.asm - contrib/masmx64/inffasx64.asm + else() + target_compile_options(zlib PRIVATE + $<$:-O2> ) - endif() - - if(ZLIB_ASMS) - add_definitions(-DASMV -DASMINF) - endif() -endif() - -# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION -file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) -string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" - "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) - -if(MINGW) - # This gets us DLL resource information when compiling on MinGW. - if(NOT CMAKE_RC_COMPILER) - set(CMAKE_RC_COMPILER windres.exe) - endif() - - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj - COMMAND ${CMAKE_RC_COMPILER} - -D GCC_WINDRES - -I ${CMAKE_CURRENT_SOURCE_DIR} - -I ${CMAKE_CURRENT_BINARY_DIR} - -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj - -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) - set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) -endif(MINGW) - -add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) -set_target_properties(zlib PROPERTIES SOVERSION 1) - -if(NOT CYGWIN) - # This property causes shared libraries on Linux to have the full version - # encoded into their final filename. We disable this on Cygwin because - # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll - # seems to be the default. - # - # This has no effect with MSVC, on that platform the version info for - # the DLL comes from the resource file win32/zlib1.rc - set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) -endif() - -if(UNIX) - # On unix-like platforms the library is almost always called libz - set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) - if(NOT APPLE) - set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") - endif() -elseif(BUILD_SHARED_LIBS AND WIN32) - # Creates zlib1.dll when building shared library version - set_target_properties(zlib PROPERTIES SUFFIX "1.dll") -endif() - -if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) - install(TARGETS zlib zlibstatic - RUNTIME DESTINATION "${INSTALL_BIN_DIR}" - ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" - LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) -endif() -if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) - install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") -endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) - install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3") -endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) - install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") -endif() - -#============================================================================ -# Example binaries -#============================================================================ - -add_executable(example test/example.c) -target_link_libraries(example zlib) -add_test(example example) - -add_executable(minigzip test/minigzip.c) -target_link_libraries(minigzip zlib) + endif(APPLE) +endif(WIN32) -if(HAVE_OFF64_T) - add_executable(example64 test/example.c) - target_link_libraries(example64 zlib) - set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - add_test(example64 example64) - add_executable(minigzip64 test/minigzip.c) - target_link_libraries(minigzip64 zlib) - set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") -endif() From 9feccf8ccfd1d190bac9b2576a9800703122154d Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 07:57:53 +0800 Subject: [PATCH 11/24] Removed unneeded files Co-Authored-By: Charles Kerr --- .github/workflows/windows_x86_build.yml | 26 - CMakeLists.txt | 19 - CMakeSettings.json | 53 - dlls/js32.dll | Bin 1547776 -> 0 bytes make/VS2022/readme-vs2022.txt | 73 -- source/resource.h | 17 - spidermonkey/CMakeLists.txt | 55 - .../jscript/jscript.xcodeproj/project.pbxproj | 1140 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + xcode.txt | 42 - zlib/make/VS2017/zlib.vcxproj.user | 4 - 12 files changed, 1155 insertions(+), 289 deletions(-) delete mode 100644 .github/workflows/windows_x86_build.yml delete mode 100644 CMakeLists.txt delete mode 100644 CMakeSettings.json delete mode 100644 dlls/js32.dll delete mode 100644 make/VS2022/readme-vs2022.txt delete mode 100644 source/resource.h delete mode 100644 spidermonkey/CMakeLists.txt create mode 100644 spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.pbxproj create mode 100644 spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 xcode.txt delete mode 100644 zlib/make/VS2017/zlib.vcxproj.user diff --git a/.github/workflows/windows_x86_build.yml b/.github/workflows/windows_x86_build.yml deleted file mode 100644 index 2b18ffb9d..000000000 --- a/.github/workflows/windows_x86_build.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Windows x86 Build -on: - push: - paths-ignore: - - '**.js' - - '**.dfn' - - '**.scp' - pull_request: - paths-ignore: - - '**.js' - - '**.dfn' - - '**.scp' -jobs: - build: - runs-on: windows-latest - steps: - - name: checkout - uses: actions/checkout@v2 - - name: setupt msvc console - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: x86 - - name: cmake and build - run: | - cmake -G "NMake Makefiles" . - nmake diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index c2eceb79a..000000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.12.3) - -project(UOX3 CXX C) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_FLAGS_RELEASE "-O2") - -add_executable(uox3 - source/uox3.cpp - source/uox3.rc -) - -target_link_libraries(uox3 uox) - -add_subdirectory(source) -add_subdirectory(spidermonkey) -add_subdirectory(zlib) \ No newline at end of file diff --git a/CMakeSettings.json b/CMakeSettings.json deleted file mode 100644 index b2f65a37c..000000000 --- a/CMakeSettings.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - - { - "name": "x86-Debug", - "generator": "Ninja", - "configurationType": "Debug", - "buildRoot": "${projectDir}\\out\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "msvc_x86" ], - "variables": [] - }, - { - "name": "x64-Debug", - "generator": "Ninja", - "configurationType": "Debug", - "buildRoot": "${projectDir}\\out\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "", - "inheritEnvironments": [ "msvc_x64_x64" ], - "variables": [] - }, - { - "name": "x86-Release", - "generator": "Ninja", - "configurationType": "Release", - "buildRoot": "${projectDir}\\out\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "msvc_x86" ], - "variables": [] - }, - { - "name": "x64-Release", - "generator": "Ninja", - "configurationType": "Release", - "buildRoot": "${projectDir}\\out\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "", - "inheritEnvironments": [ "msvc_x64_x64" ], - "variables": [] - } - ] -} \ No newline at end of file diff --git a/dlls/js32.dll b/dlls/js32.dll deleted file mode 100644 index ffb445ace77df5dbf1b59d6889a546305c50f627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1547776 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%0A`rknOwq-jSn$5wQ0 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

    ikrzj;_!MP~3 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

    Dm7U<_&|v9j`g4@%F_yN2N$`FQ!5< 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 diff --git a/make/VS2022/readme-vs2022.txt b/make/VS2022/readme-vs2022.txt deleted file mode 100644 index a47e72275..000000000 --- a/make/VS2022/readme-vs2022.txt +++ /dev/null @@ -1,73 +0,0 @@ -This project is setup to run from the directory you cloned UOX3 into: - - -Yourdirectory <========= This directory is where the project will set the working directory as - | - | - --UOX3 (git version of uox) - -It does that to allow you to put yor uox.ini file in that directory and create a directory (data) -for uox3 to use, without corrupte the files in the git resporistory. - -For instance: - -Yourdirectory - | - | - ----UOX3 - | - | - | - -uoxdata - | - | - ---access - | - --accounts - | - | - --archives - | - | - --books - | - | - --html - | - | - --jsdata - | - | - --logs - | - | - --msgboards - | - | - --shared - -And this in your uox.ini file (locations in Yourdirectory): -[directories] -{ -DIRECTORY=./ -DATADIRECTORY=C:/Program Files (x86)/Electronic Arts/Ultima Online Classic/ -DEFSDIRECTORY=UOX3/data/dfndata/ -BOOKSDIRECTORY=uoxdata/books/ -ACTSDIRECTORY=uoxdata/accounts/ -SCRIPTSDIRECTORY=UOX3/data/js/ -SCRIPTDATADIRECTORY=uoxdata/jsdata/ -BACKUPDIRECTORY=uoxdata/archives/ -MSGBOARDDIRECTORY=uoxdata/msgboards/ -SHAREDDIRECTORY=uoxdata/shared/ -ACCESSDIRECTORY=uoxdata/access/ -HTMLDIRECTORY=uoxdata/html/ -LOGSDIRECTORY=uoxdata/logs/ -DICTIONARYDIRECTORY=UOX3/data/dictionaries/ -} - -results in running out of the git repo, without corrupt int. - -One should copy the accounts.adm from the UOX3\data\accounts directory into the uoxdata\accounts -and the UOX3\data\js\jsdata worldtemplates folder into the uoxdata\jsdata folder. - -This is just examples, mainly for allowing one to run from the git repo without corrupting it. \ No newline at end of file diff --git a/source/resource.h b/source/resource.h deleted file mode 100644 index 2203bbdd0..000000000 --- a/source/resource.h +++ /dev/null @@ -1,17 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by uox3.rc -// -#define VS_VERSION_INFO 1 -#define IDI_MAINFRAME 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 104 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/spidermonkey/CMakeLists.txt b/spidermonkey/CMakeLists.txt deleted file mode 100644 index 350b5f489..000000000 --- a/spidermonkey/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -add_library(js32 - STATIC - jsapi.c - jsarena.c - jsarray.c - jsatom.c - jsbool.c - jscntxt.c - jsdate.c - jsdbgapi.c - jsdhash.c - jsdtoa.c - jsemit.c - jsexn.c - jsfun.c - jsgc.c - jshash.c - jsinterp.c - jsiter.c - jslock.c - jslog2.c - jslong.c - jsmath.c - jsnum.c - jsobj.c - jsopcode.c - jsparse.c - jsprf.c - jsregexp.c - jsscan.c - jsscope.c - jsscript.c - jsstr.c - jsutil.c - jsxdrapi.c - jsxml.c - prmjtime.c -) - - - -target_compile_definitions(js32 - PRIVATE - _X86_ - $<$:XP_WIN> - $<$:JSFILE> - $<$:EXPORT_JS_API> -) - - - -set_target_properties(js32 - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} -) diff --git a/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.pbxproj b/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.pbxproj new file mode 100644 index 000000000..337e5ef6c --- /dev/null +++ b/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.pbxproj @@ -0,0 +1,1140 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 64A90006293E37E0009B54DA /* jsapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEE4293E37DF009B54DA /* jsapi.c */; }; + 64A90007293E37E0009B54DA /* jsapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEE5293E37DF009B54DA /* jsapi.h */; }; + 64A90008293E37E0009B54DA /* jsarena.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEE6293E37DF009B54DA /* jsarena.c */; }; + 64A90009293E37E0009B54DA /* jsarena.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEE7293E37DF009B54DA /* jsarena.h */; }; + 64A9000A293E37E0009B54DA /* jsarray.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEE8293E37DF009B54DA /* jsarray.c */; }; + 64A9000B293E37E0009B54DA /* jsarray.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEE9293E37DF009B54DA /* jsarray.h */; }; + 64A9000C293E37E0009B54DA /* jsatom.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEEA293E37DF009B54DA /* jsatom.c */; }; + 64A9000D293E37E0009B54DA /* jsatom.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEEB293E37DF009B54DA /* jsatom.h */; }; + 64A9000E293E37E0009B54DA /* jsautocfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEEC293E37DF009B54DA /* jsautocfg.h */; }; + 64A9000F293E37E0009B54DA /* jsautokw.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEED293E37DF009B54DA /* jsautokw.h */; }; + 64A90010293E37E0009B54DA /* jsbit.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEEE293E37DF009B54DA /* jsbit.h */; }; + 64A90011293E37E0009B54DA /* jsbool.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEEF293E37DF009B54DA /* jsbool.c */; }; + 64A90012293E37E0009B54DA /* jsbool.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEF0293E37DF009B54DA /* jsbool.h */; }; + 64A90013293E37E0009B54DA /* jsclist.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEF1293E37DF009B54DA /* jsclist.h */; }; + 64A90014293E37E0009B54DA /* jscntxt.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEF2293E37DF009B54DA /* jscntxt.c */; }; + 64A90015293E37E0009B54DA /* jscntxt.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEF3293E37DF009B54DA /* jscntxt.h */; }; + 64A90016293E37E0009B54DA /* jscompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEF4293E37DF009B54DA /* jscompat.h */; }; + 64A90017293E37E0009B54DA /* jsconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEF5293E37DF009B54DA /* jsconfig.h */; }; + 64A90018293E37E0009B54DA /* jscpucfg.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEF7293E37DF009B54DA /* jscpucfg.c */; }; + 64A90019293E37E0009B54DA /* jscpucfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEF8293E37DF009B54DA /* jscpucfg.h */; }; + 64A9001A293E37E0009B54DA /* jsdate.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEF9293E37DF009B54DA /* jsdate.c */; }; + 64A9001B293E37E0009B54DA /* jsdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEFA293E37DF009B54DA /* jsdate.h */; }; + 64A9001C293E37E0009B54DA /* jsdbgapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEFB293E37DF009B54DA /* jsdbgapi.c */; }; + 64A9001D293E37E0009B54DA /* jsdbgapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEFC293E37DF009B54DA /* jsdbgapi.h */; }; + 64A9001E293E37E0009B54DA /* jsdhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEFD293E37DF009B54DA /* jsdhash.c */; }; + 64A9001F293E37E0009B54DA /* jsdhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FEFE293E37DF009B54DA /* jsdhash.h */; }; + 64A90020293E37E0009B54DA /* jsdtoa.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FEFF293E37DF009B54DA /* jsdtoa.c */; }; + 64A90021293E37E0009B54DA /* jsdtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF00293E37DF009B54DA /* jsdtoa.h */; }; + 64A90022293E37E0009B54DA /* jsemit.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF01293E37DF009B54DA /* jsemit.c */; }; + 64A90023293E37E0009B54DA /* jsemit.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF02293E37DF009B54DA /* jsemit.h */; }; + 64A90024293E37E0009B54DA /* jsexn.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF03293E37DF009B54DA /* jsexn.c */; }; + 64A90025293E37E0009B54DA /* jsexn.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF04293E37DF009B54DA /* jsexn.h */; }; + 64A90026293E37E0009B54DA /* jsfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF05293E37DF009B54DA /* jsfile.c */; }; + 64A90027293E37E0009B54DA /* jsfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF06293E37DF009B54DA /* jsfile.h */; }; + 64A90028293E37E0009B54DA /* jsfun.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF08293E37DF009B54DA /* jsfun.c */; }; + 64A90029293E37E0009B54DA /* jsfun.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF09293E37DF009B54DA /* jsfun.h */; }; + 64A9002A293E37E0009B54DA /* jsgc.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF0A293E37DF009B54DA /* jsgc.c */; }; + 64A9002B293E37E0009B54DA /* jsgc.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF0B293E37DF009B54DA /* jsgc.h */; }; + 64A9002C293E37E0009B54DA /* jshash.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF0C293E37DF009B54DA /* jshash.c */; }; + 64A9002D293E37E0009B54DA /* jshash.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF0D293E37DF009B54DA /* jshash.h */; }; + 64A9002E293E37E0009B54DA /* jsinterp.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF0F293E37DF009B54DA /* jsinterp.c */; }; + 64A9002F293E37E0009B54DA /* jsinterp.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF10293E37DF009B54DA /* jsinterp.h */; }; + 64A90030293E37E0009B54DA /* jsiter.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF11293E37DF009B54DA /* jsiter.c */; }; + 64A90031293E37E0009B54DA /* jsiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF12293E37DF009B54DA /* jsiter.h */; }; + 64A90032293E37E0009B54DA /* jskwgen.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF14293E37DF009B54DA /* jskwgen.c */; }; + 64A90033293E37E0009B54DA /* jslibmath.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF17293E37DF009B54DA /* jslibmath.h */; }; + 64A90034293E37E0009B54DA /* jslock.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF18293E37DF009B54DA /* jslock.c */; }; + 64A90035293E37E0009B54DA /* jslock.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF19293E37DF009B54DA /* jslock.h */; }; + 64A90037293E37E0009B54DA /* jslog2.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF1B293E37DF009B54DA /* jslog2.c */; }; + 64A90038293E37E0009B54DA /* jslong.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF1C293E37DF009B54DA /* jslong.c */; }; + 64A90039293E37E0009B54DA /* jslong.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF1D293E37DF009B54DA /* jslong.h */; }; + 64A9003A293E37E0009B54DA /* jsmath.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF1E293E37DF009B54DA /* jsmath.c */; }; + 64A9003B293E37E0009B54DA /* jsmath.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF1F293E37DF009B54DA /* jsmath.h */; }; + 64A9003C293E37E0009B54DA /* jsnum.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF20293E37DF009B54DA /* jsnum.c */; }; + 64A9003D293E37E0009B54DA /* jsnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF21293E37DF009B54DA /* jsnum.h */; }; + 64A9003E293E37E0009B54DA /* jsobj.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF22293E37DF009B54DA /* jsobj.c */; }; + 64A9003F293E37E0009B54DA /* jsobj.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF23293E37DF009B54DA /* jsobj.h */; }; + 64A90040293E37E0009B54DA /* jsopcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF24293E37DF009B54DA /* jsopcode.c */; }; + 64A90041293E37E0009B54DA /* jsopcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF25293E37DF009B54DA /* jsopcode.h */; }; + 64A90042293E37E0009B54DA /* jsosdep.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF28293E37DF009B54DA /* jsosdep.h */; }; + 64A90043293E37E0009B54DA /* jsotypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF29293E37DF009B54DA /* jsotypes.h */; }; + 64A90044293E37E0009B54DA /* jsparse.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF2A293E37DF009B54DA /* jsparse.c */; }; + 64A90045293E37E0009B54DA /* jsparse.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF2B293E37DF009B54DA /* jsparse.h */; }; + 64A90046293E37E0009B54DA /* jsprf.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF2C293E37DF009B54DA /* jsprf.c */; }; + 64A90047293E37E0009B54DA /* jsprf.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF2D293E37DF009B54DA /* jsprf.h */; }; + 64A90048293E37E0009B54DA /* jsprvtd.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF2F293E37DF009B54DA /* jsprvtd.h */; }; + 64A90049293E37E0009B54DA /* jspubtd.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF30293E37DF009B54DA /* jspubtd.h */; }; + 64A9004A293E37E0009B54DA /* jsregexp.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF31293E37DF009B54DA /* jsregexp.c */; }; + 64A9004B293E37E0009B54DA /* jsregexp.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF32293E37DF009B54DA /* jsregexp.h */; }; + 64A9004C293E37E0009B54DA /* jsscan.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF33293E37DF009B54DA /* jsscan.c */; }; + 64A9004D293E37E0009B54DA /* jsscan.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF34293E37DF009B54DA /* jsscan.h */; }; + 64A9004E293E37E0009B54DA /* jsscope.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF35293E37DF009B54DA /* jsscope.c */; }; + 64A9004F293E37E0009B54DA /* jsscope.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF36293E37DF009B54DA /* jsscope.h */; }; + 64A90050293E37E0009B54DA /* jsscript.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF37293E37DF009B54DA /* jsscript.c */; }; + 64A90051293E37E0009B54DA /* jsscript.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF38293E37DF009B54DA /* jsscript.h */; }; + 64A90052293E37E0009B54DA /* jsstddef.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF3A293E37DF009B54DA /* jsstddef.h */; }; + 64A90053293E37E0009B54DA /* jsstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF3B293E37DF009B54DA /* jsstr.c */; }; + 64A90054293E37E0009B54DA /* jsstr.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF3C293E37DF009B54DA /* jsstr.h */; }; + 64A90055293E37E0009B54DA /* jstypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF3D293E37DF009B54DA /* jstypes.h */; }; + 64A90056293E37E0009B54DA /* jsutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF3E293E37DF009B54DA /* jsutil.c */; }; + 64A90057293E37E0009B54DA /* jsutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF3F293E37DF009B54DA /* jsutil.h */; }; + 64A90058293E37E0009B54DA /* jsxdrapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF40293E37DF009B54DA /* jsxdrapi.c */; }; + 64A90059293E37E0009B54DA /* jsxdrapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF41293E37DF009B54DA /* jsxdrapi.h */; }; + 64A9005A293E37E0009B54DA /* jsxml.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FF42293E37DF009B54DA /* jsxml.c */; }; + 64A9005B293E37E0009B54DA /* jsxml.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FF43293E37DF009B54DA /* jsxml.h */; }; + 64A9005D293E37E0009B54DA /* prmjtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 64A9FFA0293E37E0009B54DA /* prmjtime.c */; }; + 64A9005E293E37E0009B54DA /* prmjtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A9FFA1293E37E0009B54DA /* prmjtime.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 64A9FE47293E37BC009B54DA /* libjscript.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjscript.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 64A9FEE4293E37DF009B54DA /* jsapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsapi.c; sourceTree = ""; }; + 64A9FEE5293E37DF009B54DA /* jsapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsapi.h; sourceTree = ""; }; + 64A9FEE6293E37DF009B54DA /* jsarena.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsarena.c; sourceTree = ""; }; + 64A9FEE7293E37DF009B54DA /* jsarena.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsarena.h; sourceTree = ""; }; + 64A9FEE8293E37DF009B54DA /* jsarray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsarray.c; sourceTree = ""; }; + 64A9FEE9293E37DF009B54DA /* jsarray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsarray.h; sourceTree = ""; }; + 64A9FEEA293E37DF009B54DA /* jsatom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsatom.c; sourceTree = ""; }; + 64A9FEEB293E37DF009B54DA /* jsatom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsatom.h; sourceTree = ""; }; + 64A9FEEC293E37DF009B54DA /* jsautocfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsautocfg.h; sourceTree = ""; }; + 64A9FEED293E37DF009B54DA /* jsautokw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsautokw.h; sourceTree = ""; }; + 64A9FEEE293E37DF009B54DA /* jsbit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsbit.h; sourceTree = ""; }; + 64A9FEEF293E37DF009B54DA /* jsbool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsbool.c; sourceTree = ""; }; + 64A9FEF0293E37DF009B54DA /* jsbool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsbool.h; sourceTree = ""; }; + 64A9FEF1293E37DF009B54DA /* jsclist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsclist.h; sourceTree = ""; }; + 64A9FEF2293E37DF009B54DA /* jscntxt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jscntxt.c; sourceTree = ""; }; + 64A9FEF3293E37DF009B54DA /* jscntxt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jscntxt.h; sourceTree = ""; }; + 64A9FEF4293E37DF009B54DA /* jscompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jscompat.h; sourceTree = ""; }; + 64A9FEF5293E37DF009B54DA /* jsconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsconfig.h; sourceTree = ""; }; + 64A9FEF7293E37DF009B54DA /* jscpucfg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jscpucfg.c; sourceTree = ""; }; + 64A9FEF8293E37DF009B54DA /* jscpucfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jscpucfg.h; sourceTree = ""; }; + 64A9FEF9293E37DF009B54DA /* jsdate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsdate.c; sourceTree = ""; }; + 64A9FEFA293E37DF009B54DA /* jsdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsdate.h; sourceTree = ""; }; + 64A9FEFB293E37DF009B54DA /* jsdbgapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsdbgapi.c; sourceTree = ""; }; + 64A9FEFC293E37DF009B54DA /* jsdbgapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsdbgapi.h; sourceTree = ""; }; + 64A9FEFD293E37DF009B54DA /* jsdhash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsdhash.c; sourceTree = ""; }; + 64A9FEFE293E37DF009B54DA /* jsdhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsdhash.h; sourceTree = ""; }; + 64A9FEFF293E37DF009B54DA /* jsdtoa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsdtoa.c; sourceTree = ""; }; + 64A9FF00293E37DF009B54DA /* jsdtoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsdtoa.h; sourceTree = ""; }; + 64A9FF01293E37DF009B54DA /* jsemit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsemit.c; sourceTree = ""; }; + 64A9FF02293E37DF009B54DA /* jsemit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsemit.h; sourceTree = ""; }; + 64A9FF03293E37DF009B54DA /* jsexn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsexn.c; sourceTree = ""; }; + 64A9FF04293E37DF009B54DA /* jsexn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsexn.h; sourceTree = ""; }; + 64A9FF05293E37DF009B54DA /* jsfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsfile.c; sourceTree = ""; }; + 64A9FF06293E37DF009B54DA /* jsfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsfile.h; sourceTree = ""; }; + 64A9FF08293E37DF009B54DA /* jsfun.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsfun.c; sourceTree = ""; }; + 64A9FF09293E37DF009B54DA /* jsfun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsfun.h; sourceTree = ""; }; + 64A9FF0A293E37DF009B54DA /* jsgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsgc.c; sourceTree = ""; }; + 64A9FF0B293E37DF009B54DA /* jsgc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsgc.h; sourceTree = ""; }; + 64A9FF0C293E37DF009B54DA /* jshash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jshash.c; sourceTree = ""; }; + 64A9FF0D293E37DF009B54DA /* jshash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jshash.h; sourceTree = ""; }; + 64A9FF0F293E37DF009B54DA /* jsinterp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsinterp.c; sourceTree = ""; }; + 64A9FF10293E37DF009B54DA /* jsinterp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsinterp.h; sourceTree = ""; }; + 64A9FF11293E37DF009B54DA /* jsiter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsiter.c; sourceTree = ""; }; + 64A9FF12293E37DF009B54DA /* jsiter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsiter.h; sourceTree = ""; }; + 64A9FF13293E37DF009B54DA /* jskeyword.tbl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jskeyword.tbl; sourceTree = ""; }; + 64A9FF14293E37DF009B54DA /* jskwgen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jskwgen.c; sourceTree = ""; }; + 64A9FF17293E37DF009B54DA /* jslibmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jslibmath.h; sourceTree = ""; }; + 64A9FF18293E37DF009B54DA /* jslock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jslock.c; sourceTree = ""; }; + 64A9FF19293E37DF009B54DA /* jslock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jslock.h; sourceTree = ""; }; + 64A9FF1B293E37DF009B54DA /* jslog2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jslog2.c; sourceTree = ""; }; + 64A9FF1C293E37DF009B54DA /* jslong.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jslong.c; sourceTree = ""; }; + 64A9FF1D293E37DF009B54DA /* jslong.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jslong.h; sourceTree = ""; }; + 64A9FF1E293E37DF009B54DA /* jsmath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsmath.c; sourceTree = ""; }; + 64A9FF1F293E37DF009B54DA /* jsmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsmath.h; sourceTree = ""; }; + 64A9FF20293E37DF009B54DA /* jsnum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsnum.c; sourceTree = ""; }; + 64A9FF21293E37DF009B54DA /* jsnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsnum.h; sourceTree = ""; }; + 64A9FF22293E37DF009B54DA /* jsobj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsobj.c; sourceTree = ""; }; + 64A9FF23293E37DF009B54DA /* jsobj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsobj.h; sourceTree = ""; }; + 64A9FF24293E37DF009B54DA /* jsopcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsopcode.c; sourceTree = ""; }; + 64A9FF25293E37DF009B54DA /* jsopcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsopcode.h; sourceTree = ""; }; + 64A9FF26293E37DF009B54DA /* jsopcode.tbl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsopcode.tbl; sourceTree = ""; }; + 64A9FF28293E37DF009B54DA /* jsosdep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsosdep.h; sourceTree = ""; }; + 64A9FF29293E37DF009B54DA /* jsotypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsotypes.h; sourceTree = ""; }; + 64A9FF2A293E37DF009B54DA /* jsparse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsparse.c; sourceTree = ""; }; + 64A9FF2B293E37DF009B54DA /* jsparse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsparse.h; sourceTree = ""; }; + 64A9FF2C293E37DF009B54DA /* jsprf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsprf.c; sourceTree = ""; }; + 64A9FF2D293E37DF009B54DA /* jsprf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsprf.h; sourceTree = ""; }; + 64A9FF2E293E37DF009B54DA /* jsproto.tbl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsproto.tbl; sourceTree = ""; }; + 64A9FF2F293E37DF009B54DA /* jsprvtd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsprvtd.h; sourceTree = ""; }; + 64A9FF30293E37DF009B54DA /* jspubtd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jspubtd.h; sourceTree = ""; }; + 64A9FF31293E37DF009B54DA /* jsregexp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsregexp.c; sourceTree = ""; }; + 64A9FF32293E37DF009B54DA /* jsregexp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsregexp.h; sourceTree = ""; }; + 64A9FF33293E37DF009B54DA /* jsscan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsscan.c; sourceTree = ""; }; + 64A9FF34293E37DF009B54DA /* jsscan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsscan.h; sourceTree = ""; }; + 64A9FF35293E37DF009B54DA /* jsscope.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsscope.c; sourceTree = ""; }; + 64A9FF36293E37DF009B54DA /* jsscope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsscope.h; sourceTree = ""; }; + 64A9FF37293E37DF009B54DA /* jsscript.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsscript.c; sourceTree = ""; }; + 64A9FF38293E37DF009B54DA /* jsscript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsscript.h; sourceTree = ""; }; + 64A9FF3A293E37DF009B54DA /* jsstddef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsstddef.h; sourceTree = ""; }; + 64A9FF3B293E37DF009B54DA /* jsstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsstr.c; sourceTree = ""; }; + 64A9FF3C293E37DF009B54DA /* jsstr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsstr.h; sourceTree = ""; }; + 64A9FF3D293E37DF009B54DA /* jstypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jstypes.h; sourceTree = ""; }; + 64A9FF3E293E37DF009B54DA /* jsutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsutil.c; sourceTree = ""; }; + 64A9FF3F293E37DF009B54DA /* jsutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsutil.h; sourceTree = ""; }; + 64A9FF40293E37DF009B54DA /* jsxdrapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsxdrapi.c; sourceTree = ""; }; + 64A9FF41293E37DF009B54DA /* jsxdrapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsxdrapi.h; sourceTree = ""; }; + 64A9FF42293E37DF009B54DA /* jsxml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsxml.c; sourceTree = ""; }; + 64A9FF43293E37DF009B54DA /* jsxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsxml.h; sourceTree = ""; }; + 64A9FF47293E37DF009B54DA /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + 64A9FF48293E37DF009B54DA /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; + 64A9FF4E293E37E0009B54DA /* 810ca97f-d2c7-45a8-83d7-dfca7422c546.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "810ca97f-d2c7-45a8-83d7-dfca7422c546.vsidx"; sourceTree = ""; }; + 64A9FF4F293E37E0009B54DA /* 9988bf72-3586-4cab-a638-78a1f71359bd.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "9988bf72-3586-4cab-a638-78a1f71359bd.vsidx"; sourceTree = ""; }; + 64A9FF51293E37E0009B54DA /* read.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = read.lock; sourceTree = ""; }; + 64A9FF53293E37E0009B54DA /* .suo */ = {isa = PBXFileReference; lastKnownFileType = file; path = .suo; sourceTree = ""; }; + 64A9FF54293E37E0009B54DA /* Browse.VC.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = Browse.VC.db; sourceTree = ""; }; + 64A9FF56293E37E0009B54DA /* a828e7f6e283d07.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = a828e7f6e283d07.ipch; sourceTree = ""; }; + 64A9FF59293E37E0009B54DA /* FDLIBM.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = FDLIBM.ipch; sourceTree = ""; }; + 64A9FF5B293E37E0009B54DA /* PCH.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = PCH.ipch; sourceTree = ""; }; + 64A9FF5C293E37E0009B54DA /* fdlibm.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fdlibm.sln; sourceTree = ""; }; + 64A9FF5D293E37E0009B54DA /* fdlibm.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = fdlibm.vcxproj; sourceTree = ""; }; + 64A9FF5E293E37E0009B54DA /* fdlibm.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = fdlibm.vcxproj.filters; sourceTree = ""; }; + 64A9FF5F293E37E0009B54DA /* fdlibm.vcxproj.user */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = fdlibm.vcxproj.user; sourceTree = ""; }; + 64A9FF64293E37E0009B54DA /* 790a135e-3229-466a-a1b7-49b9ec65f9a3.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "790a135e-3229-466a-a1b7-49b9ec65f9a3.vsidx"; sourceTree = ""; }; + 64A9FF65293E37E0009B54DA /* 965a6886-fdd2-491e-9aae-4a8ea266abe2.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "965a6886-fdd2-491e-9aae-4a8ea266abe2.vsidx"; sourceTree = ""; }; + 64A9FF66293E37E0009B54DA /* d4cebbe1-9705-4ee4-b57f-0b666b8b52d1.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "d4cebbe1-9705-4ee4-b57f-0b666b8b52d1.vsidx"; sourceTree = ""; }; + 64A9FF68293E37E0009B54DA /* read.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = read.lock; sourceTree = ""; }; + 64A9FF6A293E37E0009B54DA /* .suo */ = {isa = PBXFileReference; lastKnownFileType = file; path = .suo; sourceTree = ""; }; + 64A9FF6B293E37E0009B54DA /* Browse.VC.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = Browse.VC.db; sourceTree = ""; }; + 64A9FF6D293E37E0009B54DA /* 5bbeeae1e78ce2.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = 5bbeeae1e78ce2.ipch; sourceTree = ""; }; + 64A9FF70293E37E0009B54DA /* JSCRIPT.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = JSCRIPT.ipch; sourceTree = ""; }; + 64A9FF72293E37E0009B54DA /* PCH.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = PCH.ipch; sourceTree = ""; }; + 64A9FF73293E37E0009B54DA /* Solution.VC.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = Solution.VC.db; sourceTree = ""; }; + 64A9FF74293E37E0009B54DA /* jscript.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jscript.sln; sourceTree = ""; }; + 64A9FF75293E37E0009B54DA /* jscript.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jscript.vcxproj; sourceTree = ""; }; + 64A9FF76293E37E0009B54DA /* jscript.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jscript.vcxproj.filters; sourceTree = ""; }; + 64A9FF77293E37E0009B54DA /* jscript.vcxproj.user */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jscript.vcxproj.user; sourceTree = ""; }; + 64A9FF7C293E37E0009B54DA /* 14b5de96-451e-4e27-9d1b-9512198c0f87.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "14b5de96-451e-4e27-9d1b-9512198c0f87.vsidx"; sourceTree = ""; }; + 64A9FF7D293E37E0009B54DA /* 2d348807-00ce-4154-95b3-1be8c82c2b39.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "2d348807-00ce-4154-95b3-1be8c82c2b39.vsidx"; sourceTree = ""; }; + 64A9FF7E293E37E0009B54DA /* 8698234e-b801-4c8f-b5b5-7f6d052a522c.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "8698234e-b801-4c8f-b5b5-7f6d052a522c.vsidx"; sourceTree = ""; }; + 64A9FF7F293E37E0009B54DA /* b4dbece6-e0e4-4342-85a4-1d9fe8493c98.vsidx */ = {isa = PBXFileReference; lastKnownFileType = file; path = "b4dbece6-e0e4-4342-85a4-1d9fe8493c98.vsidx"; sourceTree = ""; }; + 64A9FF81293E37E0009B54DA /* read.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = read.lock; sourceTree = ""; }; + 64A9FF83293E37E0009B54DA /* .suo */ = {isa = PBXFileReference; lastKnownFileType = file; path = .suo; sourceTree = ""; }; + 64A9FF84293E37E0009B54DA /* Browse.VC.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = Browse.VC.db; sourceTree = ""; }; + 64A9FF88293E37E0009B54DA /* JSKWGEN.ipch */ = {isa = PBXFileReference; lastKnownFileType = file; path = JSKWGEN.ipch; sourceTree = ""; }; + 64A9FF89293E37E0009B54DA /* Solution.VC.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = Solution.VC.db; sourceTree = ""; }; + 64A9FF8A293E37E0009B54DA /* jskwgen.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jskwgen.sln; sourceTree = ""; }; + 64A9FF8B293E37E0009B54DA /* jskwgen.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jskwgen.vcxproj; sourceTree = ""; }; + 64A9FF8C293E37E0009B54DA /* jskwgen.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jskwgen.vcxproj.filters; sourceTree = ""; }; + 64A9FF8D293E37E0009B54DA /* jskwgen.vcxproj.user */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jskwgen.vcxproj.user; sourceTree = ""; }; + 64A9FF8E293E37E0009B54DA /* Spidermonkey.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Spidermonkey.txt; sourceTree = ""; }; + 64A9FF98293E37E0009B54DA /* jscript.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = jscript.xcodeproj; sourceTree = ""; }; + 64A9FFA0293E37E0009B54DA /* prmjtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = prmjtime.c; sourceTree = ""; }; + 64A9FFA1293E37E0009B54DA /* prmjtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = prmjtime.h; sourceTree = ""; }; + 64A9FFA9293E37E0009B54DA /* jsengine.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsengine.sln; sourceTree = ""; }; + 64A9FFAA293E37E0009B54DA /* jsengine.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jsengine.vcxproj; sourceTree = ""; }; + 64A9FFAB293E37E0009B54DA /* jsengine.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = jsengine.vcxproj.filters; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 64A9FE45293E37BC009B54DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 64A9FE3E293E37BC009B54DA = { + isa = PBXGroup; + children = ( + 64A9FE4E293E37DF009B54DA /* spidermonkey */, + 64A9FE48293E37BC009B54DA /* Products */, + ); + sourceTree = ""; + }; + 64A9FE48293E37BC009B54DA /* Products */ = { + isa = PBXGroup; + children = ( + 64A9FE47293E37BC009B54DA /* libjscript.a */, + ); + name = Products; + sourceTree = ""; + }; + 64A9FE4E293E37DF009B54DA /* spidermonkey */ = { + isa = PBXGroup; + children = ( + 64A9FEE4293E37DF009B54DA /* jsapi.c */, + 64A9FEE6293E37DF009B54DA /* jsarena.c */, + 64A9FEE8293E37DF009B54DA /* jsarray.c */, + 64A9FEEA293E37DF009B54DA /* jsatom.c */, + 64A9FEEF293E37DF009B54DA /* jsbool.c */, + 64A9FEF2293E37DF009B54DA /* jscntxt.c */, + 64A9FEF7293E37DF009B54DA /* jscpucfg.c */, + 64A9FEF9293E37DF009B54DA /* jsdate.c */, + 64A9FEFB293E37DF009B54DA /* jsdbgapi.c */, + 64A9FEFD293E37DF009B54DA /* jsdhash.c */, + 64A9FEFF293E37DF009B54DA /* jsdtoa.c */, + 64A9FF01293E37DF009B54DA /* jsemit.c */, + 64A9FF03293E37DF009B54DA /* jsexn.c */, + 64A9FF05293E37DF009B54DA /* jsfile.c */, + 64A9FF08293E37DF009B54DA /* jsfun.c */, + 64A9FF0A293E37DF009B54DA /* jsgc.c */, + 64A9FF0C293E37DF009B54DA /* jshash.c */, + 64A9FF0F293E37DF009B54DA /* jsinterp.c */, + 64A9FF11293E37DF009B54DA /* jsiter.c */, + 64A9FF14293E37DF009B54DA /* jskwgen.c */, + 64A9FF18293E37DF009B54DA /* jslock.c */, + 64A9FF1B293E37DF009B54DA /* jslog2.c */, + 64A9FF1C293E37DF009B54DA /* jslong.c */, + 64A9FF1E293E37DF009B54DA /* jsmath.c */, + 64A9FF20293E37DF009B54DA /* jsnum.c */, + 64A9FF22293E37DF009B54DA /* jsobj.c */, + 64A9FF24293E37DF009B54DA /* jsopcode.c */, + 64A9FF2A293E37DF009B54DA /* jsparse.c */, + 64A9FF2C293E37DF009B54DA /* jsprf.c */, + 64A9FF31293E37DF009B54DA /* jsregexp.c */, + 64A9FF33293E37DF009B54DA /* jsscan.c */, + 64A9FF35293E37DF009B54DA /* jsscope.c */, + 64A9FF37293E37DF009B54DA /* jsscript.c */, + 64A9FF3B293E37DF009B54DA /* jsstr.c */, + 64A9FF3E293E37DF009B54DA /* jsutil.c */, + 64A9FF40293E37DF009B54DA /* jsxdrapi.c */, + 64A9FF42293E37DF009B54DA /* jsxml.c */, + 64A9FFA0293E37E0009B54DA /* prmjtime.c */, + 64A9FEE5293E37DF009B54DA /* jsapi.h */, + 64A9FEE7293E37DF009B54DA /* jsarena.h */, + 64A9FEE9293E37DF009B54DA /* jsarray.h */, + 64A9FEEB293E37DF009B54DA /* jsatom.h */, + 64A9FEEC293E37DF009B54DA /* jsautocfg.h */, + 64A9FEED293E37DF009B54DA /* jsautokw.h */, + 64A9FEEE293E37DF009B54DA /* jsbit.h */, + 64A9FEF0293E37DF009B54DA /* jsbool.h */, + 64A9FEF1293E37DF009B54DA /* jsclist.h */, + 64A9FEF3293E37DF009B54DA /* jscntxt.h */, + 64A9FEF4293E37DF009B54DA /* jscompat.h */, + 64A9FEF5293E37DF009B54DA /* jsconfig.h */, + 64A9FEF8293E37DF009B54DA /* jscpucfg.h */, + 64A9FEFA293E37DF009B54DA /* jsdate.h */, + 64A9FEFC293E37DF009B54DA /* jsdbgapi.h */, + 64A9FEFE293E37DF009B54DA /* jsdhash.h */, + 64A9FF00293E37DF009B54DA /* jsdtoa.h */, + 64A9FF02293E37DF009B54DA /* jsemit.h */, + 64A9FF04293E37DF009B54DA /* jsexn.h */, + 64A9FF06293E37DF009B54DA /* jsfile.h */, + 64A9FF09293E37DF009B54DA /* jsfun.h */, + 64A9FF0B293E37DF009B54DA /* jsgc.h */, + 64A9FF0D293E37DF009B54DA /* jshash.h */, + 64A9FF10293E37DF009B54DA /* jsinterp.h */, + 64A9FF12293E37DF009B54DA /* jsiter.h */, + 64A9FF17293E37DF009B54DA /* jslibmath.h */, + 64A9FF19293E37DF009B54DA /* jslock.h */, + 64A9FF1D293E37DF009B54DA /* jslong.h */, + 64A9FF1F293E37DF009B54DA /* jsmath.h */, + 64A9FF21293E37DF009B54DA /* jsnum.h */, + 64A9FF23293E37DF009B54DA /* jsobj.h */, + 64A9FF25293E37DF009B54DA /* jsopcode.h */, + 64A9FF28293E37DF009B54DA /* jsosdep.h */, + 64A9FF29293E37DF009B54DA /* jsotypes.h */, + 64A9FF2B293E37DF009B54DA /* jsparse.h */, + 64A9FF2D293E37DF009B54DA /* jsprf.h */, + 64A9FF2F293E37DF009B54DA /* jsprvtd.h */, + 64A9FF30293E37DF009B54DA /* jspubtd.h */, + 64A9FF32293E37DF009B54DA /* jsregexp.h */, + 64A9FF34293E37DF009B54DA /* jsscan.h */, + 64A9FF36293E37DF009B54DA /* jsscope.h */, + 64A9FF38293E37DF009B54DA /* jsscript.h */, + 64A9FF3A293E37DF009B54DA /* jsstddef.h */, + 64A9FF3C293E37DF009B54DA /* jsstr.h */, + 64A9FF3D293E37DF009B54DA /* jstypes.h */, + 64A9FF3F293E37DF009B54DA /* jsutil.h */, + 64A9FF41293E37DF009B54DA /* jsxdrapi.h */, + 64A9FF43293E37DF009B54DA /* jsxml.h */, + 64A9FFA1293E37E0009B54DA /* prmjtime.h */, + 64A9FF13293E37DF009B54DA /* jskeyword.tbl */, + 64A9FF26293E37DF009B54DA /* jsopcode.tbl */, + 64A9FF2E293E37DF009B54DA /* jsproto.tbl */, + 64A9FF45293E37DF009B54DA /* make */, + 64A9FFA8293E37E0009B54DA /* vs2022 */, + ); + name = spidermonkey; + path = ../../..; + sourceTree = ""; + }; + 64A9FF45293E37DF009B54DA /* make */ = { + isa = PBXGroup; + children = ( + 64A9FF46293E37DF009B54DA /* cmake */, + 64A9FF49293E37DF009B54DA /* vs2022 */, + 64A9FF8F293E37E0009B54DA /* XCode */, + ); + path = make; + sourceTree = ""; + }; + 64A9FF46293E37DF009B54DA /* cmake */ = { + isa = PBXGroup; + children = ( + 64A9FF47293E37DF009B54DA /* CMakeLists.txt */, + 64A9FF48293E37DF009B54DA /* readme.txt */, + ); + path = cmake; + sourceTree = ""; + }; + 64A9FF49293E37DF009B54DA /* vs2022 */ = { + isa = PBXGroup; + children = ( + 64A9FF4A293E37DF009B54DA /* fdlibm */, + 64A9FF60293E37E0009B54DA /* jscript */, + 64A9FF78293E37E0009B54DA /* jskwgen */, + 64A9FF8E293E37E0009B54DA /* Spidermonkey.txt */, + ); + path = vs2022; + sourceTree = ""; + }; + 64A9FF4A293E37DF009B54DA /* fdlibm */ = { + isa = PBXGroup; + children = ( + 64A9FF4B293E37DF009B54DA /* .vs */, + 64A9FF5C293E37E0009B54DA /* fdlibm.sln */, + 64A9FF5D293E37E0009B54DA /* fdlibm.vcxproj */, + 64A9FF5E293E37E0009B54DA /* fdlibm.vcxproj.filters */, + 64A9FF5F293E37E0009B54DA /* fdlibm.vcxproj.user */, + ); + path = fdlibm; + sourceTree = ""; + }; + 64A9FF4B293E37DF009B54DA /* .vs */ = { + isa = PBXGroup; + children = ( + 64A9FF4C293E37DF009B54DA /* fdlibm */, + ); + path = .vs; + sourceTree = ""; + }; + 64A9FF4C293E37DF009B54DA /* fdlibm */ = { + isa = PBXGroup; + children = ( + 64A9FF4D293E37DF009B54DA /* FileContentIndex */, + 64A9FF52293E37E0009B54DA /* v17 */, + ); + path = fdlibm; + sourceTree = ""; + }; + 64A9FF4D293E37DF009B54DA /* FileContentIndex */ = { + isa = PBXGroup; + children = ( + 64A9FF4E293E37E0009B54DA /* 810ca97f-d2c7-45a8-83d7-dfca7422c546.vsidx */, + 64A9FF4F293E37E0009B54DA /* 9988bf72-3586-4cab-a638-78a1f71359bd.vsidx */, + 64A9FF50293E37E0009B54DA /* merges */, + 64A9FF51293E37E0009B54DA /* read.lock */, + ); + path = FileContentIndex; + sourceTree = ""; + }; + 64A9FF50293E37E0009B54DA /* merges */ = { + isa = PBXGroup; + children = ( + ); + path = merges; + sourceTree = ""; + }; + 64A9FF52293E37E0009B54DA /* v17 */ = { + isa = PBXGroup; + children = ( + 64A9FF53293E37E0009B54DA /* .suo */, + 64A9FF54293E37E0009B54DA /* Browse.VC.db */, + 64A9FF55293E37E0009B54DA /* ipch */, + ); + path = v17; + sourceTree = ""; + }; + 64A9FF55293E37E0009B54DA /* ipch */ = { + isa = PBXGroup; + children = ( + 64A9FF56293E37E0009B54DA /* a828e7f6e283d07.ipch */, + 64A9FF57293E37E0009B54DA /* AutoPCH */, + ); + path = ipch; + sourceTree = ""; + }; + 64A9FF57293E37E0009B54DA /* AutoPCH */ = { + isa = PBXGroup; + children = ( + 64A9FF58293E37E0009B54DA /* b45df5a691fc3a13 */, + 64A9FF5A293E37E0009B54DA /* b6faf7c289131d49 */, + ); + path = AutoPCH; + sourceTree = ""; + }; + 64A9FF58293E37E0009B54DA /* b45df5a691fc3a13 */ = { + isa = PBXGroup; + children = ( + 64A9FF59293E37E0009B54DA /* FDLIBM.ipch */, + ); + path = b45df5a691fc3a13; + sourceTree = ""; + }; + 64A9FF5A293E37E0009B54DA /* b6faf7c289131d49 */ = { + isa = PBXGroup; + children = ( + 64A9FF5B293E37E0009B54DA /* PCH.ipch */, + ); + path = b6faf7c289131d49; + sourceTree = ""; + }; + 64A9FF60293E37E0009B54DA /* jscript */ = { + isa = PBXGroup; + children = ( + 64A9FF61293E37E0009B54DA /* .vs */, + 64A9FF74293E37E0009B54DA /* jscript.sln */, + 64A9FF75293E37E0009B54DA /* jscript.vcxproj */, + 64A9FF76293E37E0009B54DA /* jscript.vcxproj.filters */, + 64A9FF77293E37E0009B54DA /* jscript.vcxproj.user */, + ); + path = jscript; + sourceTree = ""; + }; + 64A9FF61293E37E0009B54DA /* .vs */ = { + isa = PBXGroup; + children = ( + 64A9FF62293E37E0009B54DA /* jscript */, + ); + path = .vs; + sourceTree = ""; + }; + 64A9FF62293E37E0009B54DA /* jscript */ = { + isa = PBXGroup; + children = ( + 64A9FF63293E37E0009B54DA /* FileContentIndex */, + 64A9FF69293E37E0009B54DA /* v17 */, + ); + path = jscript; + sourceTree = ""; + }; + 64A9FF63293E37E0009B54DA /* FileContentIndex */ = { + isa = PBXGroup; + children = ( + 64A9FF64293E37E0009B54DA /* 790a135e-3229-466a-a1b7-49b9ec65f9a3.vsidx */, + 64A9FF65293E37E0009B54DA /* 965a6886-fdd2-491e-9aae-4a8ea266abe2.vsidx */, + 64A9FF66293E37E0009B54DA /* d4cebbe1-9705-4ee4-b57f-0b666b8b52d1.vsidx */, + 64A9FF67293E37E0009B54DA /* merges */, + 64A9FF68293E37E0009B54DA /* read.lock */, + ); + path = FileContentIndex; + sourceTree = ""; + }; + 64A9FF67293E37E0009B54DA /* merges */ = { + isa = PBXGroup; + children = ( + ); + path = merges; + sourceTree = ""; + }; + 64A9FF69293E37E0009B54DA /* v17 */ = { + isa = PBXGroup; + children = ( + 64A9FF6A293E37E0009B54DA /* .suo */, + 64A9FF6B293E37E0009B54DA /* Browse.VC.db */, + 64A9FF6C293E37E0009B54DA /* ipch */, + 64A9FF73293E37E0009B54DA /* Solution.VC.db */, + ); + path = v17; + sourceTree = ""; + }; + 64A9FF6C293E37E0009B54DA /* ipch */ = { + isa = PBXGroup; + children = ( + 64A9FF6D293E37E0009B54DA /* 5bbeeae1e78ce2.ipch */, + 64A9FF6E293E37E0009B54DA /* AutoPCH */, + ); + path = ipch; + sourceTree = ""; + }; + 64A9FF6E293E37E0009B54DA /* AutoPCH */ = { + isa = PBXGroup; + children = ( + 64A9FF6F293E37E0009B54DA /* df4888c4bcf11fbb */, + 64A9FF71293E37E0009B54DA /* e1ab84b0f2102d10 */, + ); + path = AutoPCH; + sourceTree = ""; + }; + 64A9FF6F293E37E0009B54DA /* df4888c4bcf11fbb */ = { + isa = PBXGroup; + children = ( + 64A9FF70293E37E0009B54DA /* JSCRIPT.ipch */, + ); + path = df4888c4bcf11fbb; + sourceTree = ""; + }; + 64A9FF71293E37E0009B54DA /* e1ab84b0f2102d10 */ = { + isa = PBXGroup; + children = ( + 64A9FF72293E37E0009B54DA /* PCH.ipch */, + ); + path = e1ab84b0f2102d10; + sourceTree = ""; + }; + 64A9FF78293E37E0009B54DA /* jskwgen */ = { + isa = PBXGroup; + children = ( + 64A9FF79293E37E0009B54DA /* .vs */, + 64A9FF8A293E37E0009B54DA /* jskwgen.sln */, + 64A9FF8B293E37E0009B54DA /* jskwgen.vcxproj */, + 64A9FF8C293E37E0009B54DA /* jskwgen.vcxproj.filters */, + 64A9FF8D293E37E0009B54DA /* jskwgen.vcxproj.user */, + ); + path = jskwgen; + sourceTree = ""; + }; + 64A9FF79293E37E0009B54DA /* .vs */ = { + isa = PBXGroup; + children = ( + 64A9FF7A293E37E0009B54DA /* jskwgen */, + ); + path = .vs; + sourceTree = ""; + }; + 64A9FF7A293E37E0009B54DA /* jskwgen */ = { + isa = PBXGroup; + children = ( + 64A9FF7B293E37E0009B54DA /* FileContentIndex */, + 64A9FF82293E37E0009B54DA /* v17 */, + ); + path = jskwgen; + sourceTree = ""; + }; + 64A9FF7B293E37E0009B54DA /* FileContentIndex */ = { + isa = PBXGroup; + children = ( + 64A9FF7C293E37E0009B54DA /* 14b5de96-451e-4e27-9d1b-9512198c0f87.vsidx */, + 64A9FF7D293E37E0009B54DA /* 2d348807-00ce-4154-95b3-1be8c82c2b39.vsidx */, + 64A9FF7E293E37E0009B54DA /* 8698234e-b801-4c8f-b5b5-7f6d052a522c.vsidx */, + 64A9FF7F293E37E0009B54DA /* b4dbece6-e0e4-4342-85a4-1d9fe8493c98.vsidx */, + 64A9FF80293E37E0009B54DA /* merges */, + 64A9FF81293E37E0009B54DA /* read.lock */, + ); + path = FileContentIndex; + sourceTree = ""; + }; + 64A9FF80293E37E0009B54DA /* merges */ = { + isa = PBXGroup; + children = ( + ); + path = merges; + sourceTree = ""; + }; + 64A9FF82293E37E0009B54DA /* v17 */ = { + isa = PBXGroup; + children = ( + 64A9FF83293E37E0009B54DA /* .suo */, + 64A9FF84293E37E0009B54DA /* Browse.VC.db */, + 64A9FF85293E37E0009B54DA /* ipch */, + 64A9FF89293E37E0009B54DA /* Solution.VC.db */, + ); + path = v17; + sourceTree = ""; + }; + 64A9FF85293E37E0009B54DA /* ipch */ = { + isa = PBXGroup; + children = ( + 64A9FF86293E37E0009B54DA /* AutoPCH */, + ); + path = ipch; + sourceTree = ""; + }; + 64A9FF86293E37E0009B54DA /* AutoPCH */ = { + isa = PBXGroup; + children = ( + 64A9FF87293E37E0009B54DA /* 57164e6be5c9df43 */, + ); + path = AutoPCH; + sourceTree = ""; + }; + 64A9FF87293E37E0009B54DA /* 57164e6be5c9df43 */ = { + isa = PBXGroup; + children = ( + 64A9FF88293E37E0009B54DA /* JSKWGEN.ipch */, + ); + path = 57164e6be5c9df43; + sourceTree = ""; + }; + 64A9FF8F293E37E0009B54DA /* XCode */ = { + isa = PBXGroup; + children = ( + 64A9FF90293E37E0009B54DA /* jscript */, + ); + path = XCode; + sourceTree = ""; + }; + 64A9FF90293E37E0009B54DA /* jscript */ = { + isa = PBXGroup; + children = ( + 64A9FF91293E37E0009B54DA /* Build */, + 64A9FF98293E37E0009B54DA /* jscript.xcodeproj */, + ); + path = jscript; + sourceTree = ""; + }; + 64A9FF91293E37E0009B54DA /* Build */ = { + isa = PBXGroup; + children = ( + 64A9FF92293E37E0009B54DA /* Intermediates.noindex */, + ); + path = Build; + sourceTree = ""; + }; + 64A9FF92293E37E0009B54DA /* Intermediates.noindex */ = { + isa = PBXGroup; + children = ( + 64A9FF93293E37E0009B54DA /* XCBuildData */, + ); + path = Intermediates.noindex; + sourceTree = ""; + }; + 64A9FF93293E37E0009B54DA /* XCBuildData */ = { + isa = PBXGroup; + children = ( + 64A9FF94293E37E0009B54DA /* PIFCache */, + ); + path = XCBuildData; + sourceTree = ""; + }; + 64A9FF94293E37E0009B54DA /* PIFCache */ = { + isa = PBXGroup; + children = ( + 64A9FF95293E37E0009B54DA /* project */, + 64A9FF96293E37E0009B54DA /* target */, + 64A9FF97293E37E0009B54DA /* workspace */, + ); + path = PIFCache; + sourceTree = ""; + }; + 64A9FF95293E37E0009B54DA /* project */ = { + isa = PBXGroup; + children = ( + ); + path = project; + sourceTree = ""; + }; + 64A9FF96293E37E0009B54DA /* target */ = { + isa = PBXGroup; + children = ( + ); + path = target; + sourceTree = ""; + }; + 64A9FF97293E37E0009B54DA /* workspace */ = { + isa = PBXGroup; + children = ( + ); + path = workspace; + sourceTree = ""; + }; + 64A9FF99293E37E0009B54DA /* Products */ = { + isa = PBXGroup; + name = Products; + sourceTree = ""; + }; + 64A9FFA8293E37E0009B54DA /* vs2022 */ = { + isa = PBXGroup; + children = ( + 64A9FFA9293E37E0009B54DA /* jsengine.sln */, + 64A9FFAA293E37E0009B54DA /* jsengine.vcxproj */, + 64A9FFAB293E37E0009B54DA /* jsengine.vcxproj.filters */, + ); + path = vs2022; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 64A9FE43293E37BC009B54DA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 64A90027293E37E0009B54DA /* jsfile.h in Headers */, + 64A9002D293E37E0009B54DA /* jshash.h in Headers */, + 64A90057293E37E0009B54DA /* jsutil.h in Headers */, + 64A9005B293E37E0009B54DA /* jsxml.h in Headers */, + 64A9005E293E37E0009B54DA /* prmjtime.h in Headers */, + 64A9001D293E37E0009B54DA /* jsdbgapi.h in Headers */, + 64A90007293E37E0009B54DA /* jsapi.h in Headers */, + 64A90029293E37E0009B54DA /* jsfun.h in Headers */, + 64A9003B293E37E0009B54DA /* jsmath.h in Headers */, + 64A9004D293E37E0009B54DA /* jsscan.h in Headers */, + 64A90009293E37E0009B54DA /* jsarena.h in Headers */, + 64A90031293E37E0009B54DA /* jsiter.h in Headers */, + 64A90059293E37E0009B54DA /* jsxdrapi.h in Headers */, + 64A9004F293E37E0009B54DA /* jsscope.h in Headers */, + 64A9003D293E37E0009B54DA /* jsnum.h in Headers */, + 64A90043293E37E0009B54DA /* jsotypes.h in Headers */, + 64A90017293E37E0009B54DA /* jsconfig.h in Headers */, + 64A90048293E37E0009B54DA /* jsprvtd.h in Headers */, + 64A90025293E37E0009B54DA /* jsexn.h in Headers */, + 64A90035293E37E0009B54DA /* jslock.h in Headers */, + 64A90013293E37E0009B54DA /* jsclist.h in Headers */, + 64A90047293E37E0009B54DA /* jsprf.h in Headers */, + 64A90019293E37E0009B54DA /* jscpucfg.h in Headers */, + 64A90042293E37E0009B54DA /* jsosdep.h in Headers */, + 64A90021293E37E0009B54DA /* jsdtoa.h in Headers */, + 64A9002F293E37E0009B54DA /* jsinterp.h in Headers */, + 64A90041293E37E0009B54DA /* jsopcode.h in Headers */, + 64A9003F293E37E0009B54DA /* jsobj.h in Headers */, + 64A90010293E37E0009B54DA /* jsbit.h in Headers */, + 64A9000B293E37E0009B54DA /* jsarray.h in Headers */, + 64A90023293E37E0009B54DA /* jsemit.h in Headers */, + 64A90015293E37E0009B54DA /* jscntxt.h in Headers */, + 64A9001F293E37E0009B54DA /* jsdhash.h in Headers */, + 64A90039293E37E0009B54DA /* jslong.h in Headers */, + 64A90012293E37E0009B54DA /* jsbool.h in Headers */, + 64A9000F293E37E0009B54DA /* jsautokw.h in Headers */, + 64A90055293E37E0009B54DA /* jstypes.h in Headers */, + 64A90045293E37E0009B54DA /* jsparse.h in Headers */, + 64A9004B293E37E0009B54DA /* jsregexp.h in Headers */, + 64A90054293E37E0009B54DA /* jsstr.h in Headers */, + 64A90033293E37E0009B54DA /* jslibmath.h in Headers */, + 64A9000D293E37E0009B54DA /* jsatom.h in Headers */, + 64A9002B293E37E0009B54DA /* jsgc.h in Headers */, + 64A9001B293E37E0009B54DA /* jsdate.h in Headers */, + 64A90016293E37E0009B54DA /* jscompat.h in Headers */, + 64A90049293E37E0009B54DA /* jspubtd.h in Headers */, + 64A90051293E37E0009B54DA /* jsscript.h in Headers */, + 64A90052293E37E0009B54DA /* jsstddef.h in Headers */, + 64A9000E293E37E0009B54DA /* jsautocfg.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 64A9FE46293E37BC009B54DA /* jscript */ = { + isa = PBXNativeTarget; + buildConfigurationList = 64A9FE4B293E37BC009B54DA /* Build configuration list for PBXNativeTarget "jscript" */; + buildPhases = ( + 64A9FE43293E37BC009B54DA /* Headers */, + 64A9FE44293E37BC009B54DA /* Sources */, + 64A9FE45293E37BC009B54DA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = jscript; + productName = jscript; + productReference = 64A9FE47293E37BC009B54DA /* libjscript.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 64A9FE3F293E37BC009B54DA /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1410; + TargetAttributes = { + 64A9FE46293E37BC009B54DA = { + CreatedOnToolsVersion = 14.1; + }; + }; + }; + buildConfigurationList = 64A9FE42293E37BC009B54DA /* Build configuration list for PBXProject "jscript" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 64A9FE3E293E37BC009B54DA; + productRefGroup = 64A9FE48293E37BC009B54DA /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 64A9FF99293E37E0009B54DA /* Products */; + ProjectRef = 64A9FF98293E37E0009B54DA /* jscript.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 64A9FE46293E37BC009B54DA /* jscript */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 64A9FE44293E37BC009B54DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 64A90053293E37E0009B54DA /* jsstr.c in Sources */, + 64A90038293E37E0009B54DA /* jslong.c in Sources */, + 64A9002E293E37E0009B54DA /* jsinterp.c in Sources */, + 64A9003C293E37E0009B54DA /* jsnum.c in Sources */, + 64A90056293E37E0009B54DA /* jsutil.c in Sources */, + 64A9000A293E37E0009B54DA /* jsarray.c in Sources */, + 64A90030293E37E0009B54DA /* jsiter.c in Sources */, + 64A90050293E37E0009B54DA /* jsscript.c in Sources */, + 64A9001A293E37E0009B54DA /* jsdate.c in Sources */, + 64A90046293E37E0009B54DA /* jsprf.c in Sources */, + 64A90037293E37E0009B54DA /* jslog2.c in Sources */, + 64A9000C293E37E0009B54DA /* jsatom.c in Sources */, + 64A90026293E37E0009B54DA /* jsfile.c in Sources */, + 64A9002A293E37E0009B54DA /* jsgc.c in Sources */, + 64A90034293E37E0009B54DA /* jslock.c in Sources */, + 64A90044293E37E0009B54DA /* jsparse.c in Sources */, + 64A90028293E37E0009B54DA /* jsfun.c in Sources */, + 64A9001C293E37E0009B54DA /* jsdbgapi.c in Sources */, + 64A90024293E37E0009B54DA /* jsexn.c in Sources */, + 64A90018293E37E0009B54DA /* jscpucfg.c in Sources */, + 64A90040293E37E0009B54DA /* jsopcode.c in Sources */, + 64A9005D293E37E0009B54DA /* prmjtime.c in Sources */, + 64A9001E293E37E0009B54DA /* jsdhash.c in Sources */, + 64A90006293E37E0009B54DA /* jsapi.c in Sources */, + 64A9003E293E37E0009B54DA /* jsobj.c in Sources */, + 64A90011293E37E0009B54DA /* jsbool.c in Sources */, + 64A9004E293E37E0009B54DA /* jsscope.c in Sources */, + 64A9002C293E37E0009B54DA /* jshash.c in Sources */, + 64A90008293E37E0009B54DA /* jsarena.c in Sources */, + 64A90058293E37E0009B54DA /* jsxdrapi.c in Sources */, + 64A9005A293E37E0009B54DA /* jsxml.c in Sources */, + 64A9004A293E37E0009B54DA /* jsregexp.c in Sources */, + 64A9004C293E37E0009B54DA /* jsscan.c in Sources */, + 64A90014293E37E0009B54DA /* jscntxt.c in Sources */, + 64A90022293E37E0009B54DA /* jsemit.c in Sources */, + 64A90032293E37E0009B54DA /* jskwgen.c in Sources */, + 64A90020293E37E0009B54DA /* jsdtoa.c in Sources */, + 64A9003A293E37E0009B54DA /* jsmath.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 64A9FE49293E37BC009B54DA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 64A9FE4A293E37BC009B54DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + }; + name = Release; + }; + 64A9FE4C293E37BC009B54DA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_WARN_BOOL_CONVERSION = NO; + CLANG_WARN_COMMA = NO; + CLANG_WARN_CONSTANT_CONVERSION = NO; + CLANG_WARN_ENUM_CONVERSION = NO; + CLANG_WARN_INT_CONVERSION = NO; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = NO; + CLANG_WARN_STRICT_PROTOTYPES = NO; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = CF264WE69M; + EXECUTABLE_PREFIX = lib; + GCC_C_LANGUAGE_STANDARD = c11; + GCC_PREPROCESSOR_DEFINITIONS = ( + XP_UNIX, + EXPORT_JS_API, + HAVE_VA_LIST_AS_ARRAY, + SVR4, + SYSV, + POSIX_SOURCE, + _DEFAULT_SOURCE, + HAVE_LOCALTIME_R, + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ../../../..; + WARNING_CFLAGS = ( + "-Wno-shift-negative-value", + "-Wno-non-literal-null-conversion", + "-Wno-tautological-constant-out-of-range-compare", + "-Wno-pointer-to-int-cast", + ); + }; + name = Debug; + }; + 64A9FE4D293E37BC009B54DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_WARN_BOOL_CONVERSION = NO; + CLANG_WARN_COMMA = NO; + CLANG_WARN_CONSTANT_CONVERSION = NO; + CLANG_WARN_ENUM_CONVERSION = NO; + CLANG_WARN_INT_CONVERSION = NO; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = NO; + CLANG_WARN_STRICT_PROTOTYPES = NO; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = CF264WE69M; + EXECUTABLE_PREFIX = lib; + GCC_C_LANGUAGE_STANDARD = c11; + GCC_PREPROCESSOR_DEFINITIONS = ( + XP_UNIX, + EXPORT_JS_API, + HAVE_VA_LIST_AS_ARRAY, + SVR4, + SYSV, + POSIX_SOURCE, + _DEFAULT_SOURCE, + HAVE_LOCALTIME_R, + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ../../../..; + WARNING_CFLAGS = ( + "-Wno-shift-negative-value", + "-Wno-non-literal-null-conversion", + "-Wno-tautological-constant-out-of-range-compare", + "-Wno-pointer-to-int-cast", + ); + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 64A9FE42293E37BC009B54DA /* Build configuration list for PBXProject "jscript" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 64A9FE49293E37BC009B54DA /* Debug */, + 64A9FE4A293E37BC009B54DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 64A9FE4B293E37BC009B54DA /* Build configuration list for PBXNativeTarget "jscript" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 64A9FE4C293E37BC009B54DA /* Debug */, + 64A9FE4D293E37BC009B54DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 64A9FE3F293E37BC009B54DA /* Project object */; +} diff --git a/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/spidermonkey/make/XCode/jscript/jscript.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/xcode.txt b/xcode.txt deleted file mode 100644 index 63340254b..000000000 --- a/xcode.txt +++ /dev/null @@ -1,42 +0,0 @@ -The uox3 xcode projectd is setup for the following directory structure: - -UserDirectory(can be anything) - | - | - ----UOX3 (the cloned git repot) - | - | - |--- spidermonkey (this is a copy of the spidermonkey in the UOX3 repo - | that is built for your specific Mac) - | - | - |---uoxdata << this a directory for your uox data - | - | - |---accounts - | - |---archives - | - |---books - | - |---html - | - |---jsdata - | - |---logs - | - |---msgboards - | - |---shared - - -the uox.ini is placed the the UoserDirectory, with the ini file updated. -The uoxdata directories are populated as needed from the repo (like default -acctounts, jsdata/worldtemplates). - -This setup allows one to run the source code, without impacting -the repo by the fact uox3 makes/edit data (and that would impact the git) -If you dont use thes setup, the schema needs to be changed (working directory) -entry, and possibly the command line argument. -If you dont have spidermonkey in this location, then the search paths and library path -in the build settings will need to be changed. \ No newline at end of file diff --git a/zlib/make/VS2017/zlib.vcxproj.user b/zlib/make/VS2017/zlib.vcxproj.user deleted file mode 100644 index be2507870..000000000 --- a/zlib/make/VS2017/zlib.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From aeb94dcd2d6f06aad06d58428b3e15a55b9b93c3 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 08:13:09 +0800 Subject: [PATCH 12/24] Updated a couple of readmes Co-Authored-By: Charles Kerr --- spidermonkey/README.md | 37 +++++++++++++++++++++++++++++++++++-- zlib/README.md | 22 ++++------------------ 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/spidermonkey/README.md b/spidermonkey/README.md index 271863f2b..8c4285b3c 100644 --- a/spidermonkey/README.md +++ b/spidermonkey/README.md @@ -1,5 +1,38 @@ # SpiderMonkey 1.7 configured for UOX3 -Herein are configured a minimum set of files required to compile a static library of SpiderMonkey 1.7 on Windows, Linux and macOS, to be linked with [Ultima Offline eXperiment 3](https://github.com/UOX3DevTeam/UOX3/). Extraneous files and folders not required for this have been removed from this configuration; for the latest full, official version of the SpiderMonkey project - which is not compatible with UOX3 - visit https://spidermonkey.dev +Herein are configured a minimum set of files required to compile a static library of SpiderMonkey 1.7 on Windows, Linux/FreeBSD and macOS, for linking with [Ultima Offline eXperiment 3](https://github.com/UOX3DevTeam/UOX3/) and utilized to access Ultima Online data files and packets. Build setups can be found in the make/ folder, but extraneous build files and folders have been removed from this configuration. For the latest full, official version of the SpiderMonkey project - which is not compatible with UOX3 - visit https://spidermonkey.dev -For detailed instructions on compiling and using this SpiderMonkey configuration with UOX3, check out https://github.com/UOX3DevTeam/UOX3 +For detailed instructions on compiling and using this SpiderMonkey configuration with UOX3, check out [Ultima Offline eXperiment 3](https://github.com/UOX3DevTeam/UOX3/). Alternatively, follow the below instructions at your own peril: + +
    + Windows + + ### Visual Studio 2017/2022 + 1. Open jscript.sln in the *make/[VS2017/VS2022]/jscript* folder + 2. Choose *Release/Debug* build type from dropdown menu + 3. Go *Build -> Build jscript* + + ### CMake + 1. Open Developer Command Prompt for VS2017 or Developer Powershell for VS2022 + 2. Traverse to the make/cmake folder, and enter the following commands: + 3. `mkdir build` + 4. `cd build` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"NMake Makefiles"` + 6. `cmake --build . --config Release` +
    + +--- + +
    + Linux/FreeBSD/macOS + + ### CMake + 1. Open a new Terminal + 2. Traverse to the make/cmake folder, and enter the following commands: + 3. `mkdir build` + 4. `cd build` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release` (Linux/FreeBSD) + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles"` (macOS) + 6. `cmake --build . --config Release` + +
    \ No newline at end of file diff --git a/zlib/README.md b/zlib/README.md index d22e2a79b..014962121 100644 --- a/zlib/README.md +++ b/zlib/README.md @@ -1,6 +1,6 @@ # zlib-1.2.11 configured for UOX3 -Herein are configured a minimum set of files required to compile a static library of zlib on Windows, Linux/FreeBSD and macOS, for linking with Ultima Offline eXperiment 3 and utilized to access Ultima Online data files and packets. Build setups can be found in the make/ folder, but extraneous build files and folders have been removed from this configuration. For the full, official zlib project complete with compilation solutions for other platforms and third party contributions, visit https://github.com/madler/zlib +Herein are configured a minimum set of files required to compile a static library of zlib on Windows, Linux/FreeBSD and macOS, for linking with [Ultima Offline eXperiment 3](https://github.com/UOX3DevTeam/UOX3/) and utilized to access Ultima Online data files and packets. Build setups can be found in the make/ folder, but extraneous build files and folders have been removed from this configuration. For the full, official zlib project complete with compilation solutions for other platforms and third party contributions, visit https://github.com/madler/zlib For detailed instructions on compiling and using this zlib configuration with UOX3, check out https://github.com/UOX3DevTeam/UOX3. Alternatively, follow the below instructions at your own peril: @@ -24,29 +24,15 @@ For detailed instructions on compiling and using this zlib configuration with UO ---
    - Linux/FreeBSD + Linux/FreeBSD/macOS ### CMake 1. Open a new Terminal 2. Traverse to the make/cmake folder, and enter the following commands: 3. `mkdir build` 4. `cd build` - 5. `cmake .. -DCMAKE_BUILD_TYPE=Release` - 6. `cmake --build . --config Release` - -
    - ---- - -
    - macOS - - ### CMake - 1. Open a new Terminal - 2. Traverse to the make/cmake folder, and enter the following commands: - 3. `mkdir build` - 4. `cd build` - 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles"` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release` (Linux/FreeBSD) + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles"` (macOS) 6. `cmake --build . --config Release`
    \ No newline at end of file From c7672727715bd060eb53d72fabe143a61d4a9dfb Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 08:23:15 +0800 Subject: [PATCH 13/24] Update main.yml --- .github/workflows/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1de442941..ae2cc5831 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,8 +18,8 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: prepare automake - run: chmod +x automake.sh - - name: automake - run: ./automake.sh + - uses: actions/checkout@v3 + - name: Generate Makefiles + run: cmake make/cmake -DCMAKE_BUILD_TYPE=Release + - name: Building + run: cmake --build . From ff147c8afdc61fc0a9c55728739f35a48c99dd5e Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 09:03:20 +0800 Subject: [PATCH 14/24] Update CMakeLists.txt --- make/cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/make/cmake/CMakeLists.txt b/make/cmake/CMakeLists.txt index a04e33eaa..0ca04a77c 100644 --- a/make/cmake/CMakeLists.txt +++ b/make/cmake/CMakeLists.txt @@ -235,6 +235,7 @@ target_link_libraries(uox3 PRIVATE $<$:ws2_32> $<$:Kernel32> $<$:pthread> + $<$:pthread> ) # ************************************************************************* From 528a8d10d878774070643783822cd59a596d7d94 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 09:40:48 +0800 Subject: [PATCH 15/24] Updated instructions for cmake usage on Windows --- README.md | 2 +- docs/index.html | 2 +- spidermonkey/README.md | 2 +- zlib/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dccd1a532..444932e66 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c > - `cd make/cmake` > - `mkdir -p build` > - `cd build` - > - `cmake .. -DCMAKE_BUILD_TYPE=Release` (Linux/FreeBSD) + > - `cmake .. -DCMAKE_BUILD_TYPE=Release` (Windows/Linux/FreeBSD) > - `cmake .. -DCMAKE_BUILD_TYPE=Release` -G"Unix Makefiles" (macOS) > - `cmake --build . --config Release`
    diff --git a/docs/index.html b/docs/index.html index 683d41ce3..93595f794 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4782,7 +4782,7 @@

    Step 3: Compile UOX3

  • cd make/cmake
  • mkdir -p build
  • cd build
  • -
  • cmake .. -DCMAKE_BUILD_TYPE=Release (Linux/FreeBSD)
  • +
  • cmake .. -DCMAKE_BUILD_TYPE=Release (Windows/Linux/FreeBSD)
  • cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles" (macOS)
  • cmake --build . --config Release
  • diff --git a/spidermonkey/README.md b/spidermonkey/README.md index 8c4285b3c..598b5e68c 100644 --- a/spidermonkey/README.md +++ b/spidermonkey/README.md @@ -17,7 +17,7 @@ For detailed instructions on compiling and using this SpiderMonkey configuration 2. Traverse to the make/cmake folder, and enter the following commands: 3. `mkdir build` 4. `cd build` - 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"NMake Makefiles"` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release` 6. `cmake --build . --config Release` diff --git a/zlib/README.md b/zlib/README.md index 014962121..386461785 100644 --- a/zlib/README.md +++ b/zlib/README.md @@ -17,7 +17,7 @@ For detailed instructions on compiling and using this zlib configuration with UO 2. Traverse to the make/cmake folder, and enter the following commands: 3. `mkdir build` 4. `cd build` - 5. `cmake .. -DCMAKE_BUILD_TYPE=Release -G"NMake Makefiles"` + 5. `cmake .. -DCMAKE_BUILD_TYPE=Release` 6. `cmake --build . --config Release` From 51eb8e37e58d7926669b92201fafebe2debf4f41 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sun, 11 Dec 2022 13:25:30 +0800 Subject: [PATCH 16/24] Script support for ore-types Added support for a SCRIPT tag in ore definitions in dfndata/skills/skills.dfn, which will be applied to any ore of that type that's mined --- source/skills.cpp | 8 ++++++++ source/skills.h | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/source/skills.cpp b/source/skills.cpp index f1445086b..4ac6f2eda 100644 --- a/source/skills.cpp +++ b/source/skills.cpp @@ -244,6 +244,7 @@ void MakeOre( CSocket& mSock, CChar *mChar, CTownRegion *targRegion ) { const std::string oreName = found->name + " ore"; oreItem->SetName( oreName ); + oreItem->AddScriptTrigger( found->scriptID ); if( oreItem->GetCont() != nullptr ) { mSock.SysMessage( 982, oreName.c_str() ); // You place some %s in your pack. @@ -2082,6 +2083,7 @@ bool CSkills::LoadMiningData( void ) toAdd.name = oreName; toAdd.oreName = oreName; toAdd.oreChance = 0; + toAdd.scriptID = 0; for( const auto &sec : individualOre->collection() ) { tag = sec->tag; @@ -2120,6 +2122,12 @@ bool CSkills::LoadMiningData( void ) toAdd.oreChance = static_cast( std::stoul( data, nullptr, 0 )); } break; + case 'S': + if( UTag == "SCRIPTID" ) + { + toAdd.scriptID = static_cast( std::stoul( data, nullptr, 0 )); + } + break; default: Console << "Unknown mining tag " << tag << " with data " << data << " in SECTION " << oreName << myendl; break; diff --git a/source/skills.h b/source/skills.h index 838822a22..fae725bc5 100644 --- a/source/skills.h +++ b/source/skills.h @@ -80,9 +80,10 @@ struct MiningData_st UI16 minSkill; // minimum skill needed to make the ingot std::string name; // name of the ingot: no need to be fixed, as we're loading it dynamically SI32 makemenu; // the makemenu required for making with - UI16 oreChance; // default chance of finding ore type if nothing else is specified + UI16 oreChance; // default chance of finding ore type if nothing else is specified + UI16 scriptID; // scriptID assigned to ore items - MiningData_st() : oreName( "" ), colour( 0 ), minSkill( 0 ), name( "" ), makemenu( 0 ), oreChance( 0 ) + MiningData_st() : oreName( "" ), colour( 0 ), minSkill( 0 ), name( "" ), makemenu( 0 ), oreChance( 0 ), scriptID( 0 ) { } }; From eb3422fe92ff6a8174388081e8b05e2def2c45bf Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 11 Dec 2022 15:04:28 -0500 Subject: [PATCH 17/24] updated xcode --- make/XCode/uox3.xcodeproj/project.pbxproj | 18 +++++++++--------- .../uox3.xcworkspace/contents.xcworkspacedata | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/make/XCode/uox3.xcodeproj/project.pbxproj b/make/XCode/uox3.xcodeproj/project.pbxproj index e52835d72..c28b1510b 100644 --- a/make/XCode/uox3.xcodeproj/project.pbxproj +++ b/make/XCode/uox3.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 648153CA29466EF400784170 /* libjscript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 648153C929466EF400784170 /* libjscript.a */; }; 64A9011A293E3DD4009B54DA /* ai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90075293E3DD4009B54DA /* ai.cpp */; }; 64A9011B293E3DD4009B54DA /* archive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90076293E3DD4009B54DA /* archive.cpp */; }; 64A9011C293E3DD4009B54DA /* boats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90077293E3DD4009B54DA /* boats.cpp */; }; @@ -86,7 +87,6 @@ 64A90167293E3DD4009B54DA /* weight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90114293E3DD4009B54DA /* weight.cpp */; }; 64A90168293E3DD4009B54DA /* wholist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90116293E3DD4009B54DA /* wholist.cpp */; }; 64A90169293E3DD4009B54DA /* worldmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64A90118293E3DD4009B54DA /* worldmain.cpp */; }; - 64A9016D293E3EED009B54DA /* libjscript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A9016C293E3EED009B54DA /* libjscript.a */; }; 64A9016F293E3EFD009B54DA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A9016E293E3EF5009B54DA /* libz.tbd */; }; /* End PBXBuildFile section */ @@ -103,6 +103,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 648153C929466EF400784170 /* libjscript.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libjscript.a; sourceTree = BUILT_PRODUCTS_DIR; }; 64A9006A293E3DA3009B54DA /* uox3 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = uox3; sourceTree = BUILT_PRODUCTS_DIR; }; 64A90075293E3DD4009B54DA /* ai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai.cpp; sourceTree = ""; }; 64A90076293E3DD4009B54DA /* archive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = archive.cpp; sourceTree = ""; }; @@ -261,7 +262,6 @@ 64A90117293E3DD4009B54DA /* wholist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wholist.h; sourceTree = ""; }; 64A90118293E3DD4009B54DA /* worldmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = worldmain.cpp; sourceTree = ""; }; 64A90119293E3DD4009B54DA /* worldmain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = worldmain.h; sourceTree = ""; }; - 64A9016C293E3EED009B54DA /* libjscript.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libjscript.a; sourceTree = BUILT_PRODUCTS_DIR; }; 64A9016E293E3EF5009B54DA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -270,8 +270,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64A9016D293E3EED009B54DA /* libjscript.a in Frameworks */, 64A9016F293E3EFD009B54DA /* libz.tbd in Frameworks */, + 648153CA29466EF400784170 /* libjscript.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -312,14 +312,14 @@ 64A90104293E3DD4009B54DA /* uox3.h */, ); name = source; - path = ../../../source; + path = ../../source; sourceTree = ""; }; 64A9016B293E3EED009B54DA /* Frameworks */ = { isa = PBXGroup; children = ( + 648153C929466EF400784170 /* libjscript.a */, 64A9016E293E3EF5009B54DA /* libz.tbd */, - 64A9016C293E3EED009B54DA /* libjscript.a */, ); name = Frameworks; sourceTree = ""; @@ -804,8 +804,8 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = NO; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ( - ../../../source, - ../../../spidermonkey, + ../../source, + ../../spidermonkey, ); WARNING_CFLAGS = "-Wno-shift-negative-value"; }; @@ -823,8 +823,8 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = NO; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ( - ../../../source, - ../../../spidermonkey, + ../../source, + ../../spidermonkey, ); WARNING_CFLAGS = "-Wno-shift-negative-value"; }; diff --git a/make/XCode/uox3.xcworkspace/contents.xcworkspacedata b/make/XCode/uox3.xcworkspace/contents.xcworkspacedata index 4c3329576..8724e25f3 100644 --- a/make/XCode/uox3.xcworkspace/contents.xcworkspacedata +++ b/make/XCode/uox3.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:../../spidermonkey/make/XCode/jscript/jscript.xcodeproj"> From 37a3c8f6be42e64a3a25ad3d4f8e7e3c088f2942 Mon Sep 17 00:00:00 2001 From: Geir Ove Alnes Date: Tue, 13 Dec 2022 08:58:23 +0800 Subject: [PATCH 18/24] Update README.md Replaced line shift depending on two spaces at end of line (prone to getting erased from editors that automatically remove spaces at end) with a backslash instead, which serves the same purpose. --- README.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 444932e66..aa16d4346 100644 --- a/README.md +++ b/README.md @@ -76,13 +76,13 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c Manual command-line instructions for CMake > If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal: - > - Navigate to root of cloned UOX3 git repository - > - `cd make/cmake` - > - `mkdir -p build` - > - `cd build` - > - `cmake .. -DCMAKE_BUILD_TYPE=Release` (Windows/Linux/FreeBSD) - > - `cmake .. -DCMAKE_BUILD_TYPE=Release` -G"Unix Makefiles" (macOS) - > - `cmake --build . --config Release` + > - Navigate to root of cloned UOX3 git repository, and execute these commands:\ + > `cd make/cmake`\ + > `mkdir -p build`\ + > `cd build`\ + > `cmake .. -DCMAKE_BUILD_TYPE=Release` (Windows/Linux/FreeBSD)\ + > `cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles"` (macOS)\ + > `cmake --build . --config Release`
    @@ -90,23 +90,23 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c > If you'd rather use GCC (v9.x or higher)/make (GNU Make 4.2.1 or higher) than CMake, you can follow these manual steps. Note that for FreeBSD, this approach requires installing **gmake** as an alternative to *make*: `pkg install gmake` - > First, navigate to **spidermonkey** directory and run these commands: - > `make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc` (Linux) - > `ar -r libjs32.a Linux_All_DBG.OBJ/*.o` (Linux) - > `cp Linux_All_DBG.OBJ/jsautocfg.h ./` (Linux) - > `gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang` (FreeBSD) - > `ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o` (FreeBSD) + > First, navigate to **spidermonkey** directory and run these commands:\ + > `make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc` (Linux)\ + > `ar -r libjs32.a Linux_All_DBG.OBJ/*.o` (Linux)\ + > `cp Linux_All_DBG.OBJ/jsautocfg.h ./` (Linux)\ + > `gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang` (FreeBSD)\ + > `ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o` (FreeBSD)\ > `cp FreeBSD_DBG.OBJ/jsautocfg.h ./` (FreeBSD) - > Next, head to the **zlib** directory: - > `cd ../zlib` - > `make distclean` - > `./configure` + > Next, head to the **zlib** directory:\ + > `cd ../zlib`\ + > `make distclean`\ + > `./configure`\ > `make` - > Finally, head to **UOX3/source** directory: - > `cd ../source` - > `make` (Linux) + > Finally, head to **UOX3/source** directory:\ + > `cd ../source`\ + > `make` (Linux)\ > `gmake` (FreeBSD)
    @@ -158,4 +158,4 @@ Once done compiling, you can copy the compiled UOX3 binary/executable to the dir **It is recommended** to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future. -Once you have all the required files in place, you can follow the regular steps listed under **Installation and Setup > Configuring Your UOX3 Shard** in the UOX3 documentation (see docs folder, or visit https://www.uox3.org/docs/index.html#configureUOX3) to finish your UOX3 setup. \ No newline at end of file +Once you have all the required files in place, you can follow the regular steps listed under **Installation and Setup > Configuring Your UOX3 Shard** in the UOX3 documentation (see docs folder, or visit https://www.uox3.org/docs/index.html#configureUOX3) to finish your UOX3 setup. From 3952c2f2ea0556127461e71167d2c1c6dd58ca2a Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 17 Dec 2022 18:57:06 +0800 Subject: [PATCH 19/24] Shopkeeper distance fix When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player --- source/CResponse.cpp | 6 ++++++ source/Changelog.txt | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/source/CResponse.cpp b/source/CResponse.cpp index 4d5d5eb71..d7155188d 100644 --- a/source/CResponse.cpp +++ b/source/CResponse.cpp @@ -74,6 +74,12 @@ auto FindNearbyNPCs( CChar *mChar, distLocs distance ) -> std::vector } } } + + // Sort NPCs by their distance to the player + std::sort( ourNpcs.begin(), ourNpcs.end(), [&]( CChar *a, CChar *b ) + { + return GetDist( a, mChar ) < GetDist( b, mChar ); + }); return ourNpcs; } diff --git a/source/Changelog.txt b/source/Changelog.txt index 167d0b153..68e21cba6 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,13 @@ +17/12/2022 - Xuri + When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player + +03/12/2022 - ldilley + Comment line in jsconfig.mk that attempts to cat a non-existent Version file. This causes an error otherwise during the SpiderMonkey build. + Initialize totalPlayerGold in vendor.cpp. + Flag unused variable in gumps.cpp. + Update README.md to include references to FreeBSD and also alter the command (libtool instead of ar) used to generate the JavaScript library on macOS. + Improve automake.sh. + 29/11/2022 - Xuri Added some validation checks for attacker object in onDamage JS event in several scripts Enabled onSellToVendor, onSoldToVendor, onBuyFromVendor and onBoughtFromVendor JS events to also run if attached to NPCs From d63cb3250ba8b591acf5151ea99274c3936152da Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 17 Dec 2022 19:52:25 +0800 Subject: [PATCH 20/24] Update Changelog.txt --- source/Changelog.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/Changelog.txt b/source/Changelog.txt index e428b5606..e15e286f5 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,6 @@ +08/12/2022 - Dragon Slayer + Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR. + 03/12/2022 - Xuri Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax: int ResourceCount( realId, colour ) From e5a53982b7e05ba2079e4272a66a91a3e6ffd9e7 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 17 Dec 2022 19:59:03 +0800 Subject: [PATCH 21/24] Update Changelog.txt --- source/Changelog.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/Changelog.txt b/source/Changelog.txt index e15e286f5..0a93fd578 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,6 @@ +11/12/2022 - Xuri + Added support for a SCRIPT tag in ore definitions in dfndata/skills/skills.dfn, which will be applied to any ore of that type that's mined + 08/12/2022 - Dragon Slayer Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR. From 1fdeaee94f317d34b21e5a6d9db2967973548083 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 17 Dec 2022 20:36:07 +0800 Subject: [PATCH 22/24] Update Changelog.txt --- source/Changelog.txt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/Changelog.txt b/source/Changelog.txt index 68e21cba6..ef5fbc5d5 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,6 +1,28 @@ 17/12/2022 - Xuri When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player +11/12/2022 - Xuri + Added support for a SCRIPT tag in ore definitions in dfndata/skills/skills.dfn, which will be applied to any ore of that type that's mined + +08/12/2022 - Dragon Slayer + Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR. + +03/12/2022 - Xuri + Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax: + int ResourceCount( realId, colour ) + int ResourceCount( realId, colour, moreVal ) + int ResourceCount( realId, colour, moreVal, sectionId ) + int UseResource( amount, realItemId ) + int UseResource( amount, realItemId, colour ) + int UseResource( amount, realItemId, colour, moreVal ) + int UseResource( amount, realItemId, colour, moreVal, sectionId ) + Fixed an issue where the bit flag for the HirelingCombatTraining setting was not set properly + Fixed an issue in SpiderMonkey VS project that prevented compiling a x64 debug build (thanks, punt!) + Some minor cleanup + +03/12/2022 - Dragon Slayer + GM and Counselors can now go though the wind teleporter + 03/12/2022 - ldilley Comment line in jsconfig.mk that attempts to cat a non-existent Version file. This causes an error otherwise during the SpiderMonkey build. Initialize totalPlayerGold in vendor.cpp. From 69851e67f4b22f3ca9e23a7642e57288c55d3217 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 24 Dec 2022 14:35:42 +0800 Subject: [PATCH 23/24] 0.99.6-RC2 CMake is now default build system on Linux/FreeBSD, and an alternative for Windows/macOS-users instead of VS/XCode, though the old GCC/Make build process is still intact (for now) Resource files (uox3.rc and uox3.ico) have been moved from UOX3/source to UOX3/assets Build/project-related files have been moved to /make/[buildsystem] sub-directories, for both UOX3 and sub-projects: UOX3/make/cmake UOX3/make/VS2017 UOX3/make/VS2022 UOX3/make/XCode spidermonkey/make/cmake spidermonkey/make/VS2017 spidermonkey/make/VS2022 spidermonkey/make/XCode zlib/make/cmake zlib/make/VS2017 zlib/make/VS2022 zlib/make/XCode CMake, VS2022 and XCode will compile sub-projects automatically when UOX3 is compiled, while VS2017 requires compiling sub-projects prior to UOX3 automake.sh script (still in root of repository) now uses CMake instead of GCC/Make, and supports optional arguments for creating debug/clean builds Updated instructions on compiling UOX3 can be found on GitHub and/or in the UOX3 documentation Some redundant files have been deleted from the repository (like DLL folder and file) Code style guide added to UOX3/docs directory (styleguide.html) Updated GitHub workflows to use cmake for Linux and to ignore changes to .txt/.html/.sln/.vcxproj files for both Linux & Windows workflows Co-Authored-By: Charles Kerr Co-Authored-By: Lloyd Dilley --- .github/workflows/main.yml | 8 ++++ .github/workflows/windows_x64_build.yml | 9 ++++ README.md | 40 ++++++++++------ assets/uox3.rc | 4 +- automake.sh | 29 ++++++++++-- docs/index.html | 62 ++++++++++++++----------- source/Changelog.txt | 23 +++++++++ source/cVersionClass.cpp | 2 +- 8 files changed, 126 insertions(+), 51 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ae2cc5831..2962a1af8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,11 +6,19 @@ on: - '**.js' - '**.dfn' - '**.scp' + - '**.txt' + - '**.html' + - '**.sln' + - '**.vcxproj' pull_request: paths-ignore: - '**.js' - '**.dfn' - '**.scp' + - '**.txt' + - '**.html' + - '**.sln' + - '**.vcxproj' jobs: build: diff --git a/.github/workflows/windows_x64_build.yml b/.github/workflows/windows_x64_build.yml index a59d27084..b1b052202 100644 --- a/.github/workflows/windows_x64_build.yml +++ b/.github/workflows/windows_x64_build.yml @@ -5,11 +5,20 @@ on: - '**.js' - '**.dfn' - '**.scp' + - '**.txt' + - '**.html' + - '**.sln' + - '**.vcxproj' pull_request: paths-ignore: - '**.js' - '**.dfn' - '**.scp' + - '**.txt' + - '**.html' + - '**.sln' + - '**.vcxproj' + jobs: build: runs-on: windows-latest diff --git a/README.md b/README.md index aa16d4346..740fc525c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c > * **Windows** - Download and install [Community Edition of Visual Studio 2017 or 2022](https://visualstudio.microsoft.com/downloads/). > * * Be sure to also install **Desktop development with C++** via the Visual Studio Installer, along with the individual component titled **VC++ 2017 version 15.9 v14.16 latest v141 tools** (VS2017) or **MSVC v143 - VS 2022 C++ x64/x86 build tools** (VS2022). CMake is included for command-line builds. - > * **Linux (Debian-based)** - Run `sudo apt install build-essentials cmake` in a Terminal: (or use your Linux distro's package manager) + > * **Linux (Debian-based)** - Run `sudo apt install build-essential cmake` in a Terminal: (or use your Linux distro's package manager) > * **FreeBSD** - Run `pkg install cmake` in a Terminal. Alternatively, build `cmake` via ports if desired. > * **macOS** - Download [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) (for building with an IDE) via the App Store, and/or [CMake](https://cmake.org/download/) (for command-line builds) @@ -67,26 +67,32 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c --- ## Step 3: Compile UOX3 -*Finally, compile UOX3 using the build environment you set up above.* - * **Windows** - Open *UOX3\make\VS2022\uox3.sln* (VS2022), choose *Release/Debug* from dropdown menu, and hit *Build -> Build UOX3* - * **Linux/FreeBSD** - Run `./automake.sh` in a Terminal, from the root of the cloned UOX3 repository. - * **macOS** - Open *UOX3/make/XCode/uox3/uox3.xcworkspace*, select *Build* +*Finally, compile UOX3 using the build environment you set up in Step 1.* +
    + Visual Studio 2022 (Windows), automake.sh (Linux/FreeBSD), XCode (macOS) + + > * **Visual Studio 2022** - (Windows) Open *UOX3\make\VS2022\uox3.sln* (VS2022), choose *Release/Debug* from dropdown menu, and hit *Build -> Build UOX3* + > * **automake.sh** - (Linux/FreeBSD) Run `./automake.sh` in a Terminal, from the root of the cloned UOX3 repository. This compiles UOX3 with CMake, but in one command only. Use optional argument `-b debug` to create debug build, and/or `-o clean` to do a clean build + > * **XCode** - (macOS) Open *UOX3/make/XCode/uox3/uox3.xcworkspace*, select *Build* +
    - Manual command-line instructions for CMake + CMake (Any platform, manual instructions) - > If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal: + > If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal. This also works on Windows/macOS as an alternative to compiling with IDEs: > - Navigate to root of cloned UOX3 git repository, and execute these commands:\ > `cd make/cmake`\ - > `mkdir -p build`\ + > `mkdir build`\ > `cd build`\ > `cmake .. -DCMAKE_BUILD_TYPE=Release` (Windows/Linux/FreeBSD)\ > `cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles"` (macOS)\ - > `cmake --build . --config Release` + > `cmake --build . --config Release`\ + + > Replace "Release" with "Debug" in the above instructions to create a debug-build; delete **make/cmake/build** directory to do clean builds.
    - Manual command-line instructions for GCC/make/gmake + GCC/make/gmake (Linux/FreeBSD, manual instructions) > If you'd rather use GCC (v9.x or higher)/make (GNU Make 4.2.1 or higher) than CMake, you can follow these manual steps. Note that for FreeBSD, this approach requires installing **gmake** as an alternative to *make*: `pkg install gmake` @@ -111,9 +117,9 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c
    - Instructions for VS2017 + Visual Studio 2017 (Windows) - > When using VS2017, static libraries of the dependency projects (SpiderMonkey and zlib) need to be compiled first before UOX3 itself can be compiled UOX3 will work: + > When using VS2017, static libraries of the dependency projects (SpiderMonkey and zlib) need to be compiled prior to the UOX3 project. However, after those sub-projects have been compiled once, they never need to be compiled again, and from that point on only the build instructions for UOX3 itself applies: > #### SpiderMonkey #### > 1) Navigate to the **UOX3\spidermonkey\make\VS2017\jscript\** folder and open **jscript.sln** in VS2017. @@ -132,6 +138,9 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c > 2) Make sure you have **UOX3** selected in the Solution Explorer, then select **Release** and **x64** (64-bit) in the *Solution Configuration/Platform dropdown menus*, or via **Build -> Configuration Manager**. > 3) Select **Build -> Build UOX3** to start compiling UOX3. When done, you'll find **UOX3.exe** in **UOX3\make\VS2017\Release\x64**. + > From here on, if you wish to re-compile UOX3, just open the uox3.sln and hit rebuild. + > Note that if you wish to change from Release to Debug build, the sub-projects (SpiderMonkey and zlib) also need to be compiled for Debug mode prior to compiling UOX3. +
    (Troubleshooting) Adding SpiderMonkey/zlib references in Configuration Manager @@ -152,9 +161,10 @@ Join the [UOX3 Discord](https://discord.gg/uBAXxhF) for support and/or a quick c --- ## UOX3 Compiled! Now what? Once done compiling, you can copy the compiled UOX3 binary/executable to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data subdirectory. Where you'll find the compiled UOX3 binary/executable depends on your platform and build method. Examples: - * **Windows** - Compiled UOX3.exe can be found in **UOX3/make/VS2022/x64/Release** - * **Linux/FreeBSD** - Compiled uox3 binary can be found in **root UOX3 repository** - * **macOS** - Compiled uox3 binary can be found in **UOX3\make\XCode\Build\Products\Release** + * **Windows** - (VS2022) Compiled UOX3.exe can be found in **UOX3/make/VS2022/x64/Release** + * **Linux/FreeBSD** - (automake.sh) Compiled uox3 binary can be found in **root UOX3 repository** + * **macOS** - (XCode) Compiled uox3 binary can be found in **UOX3\make\XCode\Build\Products\Release** + * **Either Platform** - (CMake, manual) Compiled uox3 binary can be found in **UOX3\make\cmake\build** **It is recommended** to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future. diff --git a/assets/uox3.rc b/assets/uox3.rc index 599a2e9cf..8166ab0ff 100644 --- a/assets/uox3.rc +++ b/assets/uox3.rc @@ -74,11 +74,11 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "UOX3" - VALUE "FileVersion", "0.99.6-RC1" + VALUE "FileVersion", "0.99.6-RC2" VALUE "InternalName", "UOX3.exe" VALUE "OriginalFilename", "UOX3.exe" VALUE "ProductName", "Ultima Offline eXperiment 3" - VALUE "ProductVersion", "0.99.6-RC1" + VALUE "ProductVersion", "0.99.6-RC2" END END BLOCK "VarFileInfo" diff --git a/automake.sh b/automake.sh index 06bd08d51..9488d6733 100755 --- a/automake.sh +++ b/automake.sh @@ -1,14 +1,33 @@ #!/bin/sh -# Support optional argument: -b Debug/Release +# Support optional arguments: +# -b debug +# -o clean buildtype="Release" -while getopts b: flag +buildoption="Normal" +while getopts ":b:o:" flag do - case "${flag}" in - b) buildtype=${OPTARG};; - esac + case "${flag}" in + b) + if [ ${OPTARG} = "debug" ] || [ ${OPTARG} = "Debug" ] + then + buildtype="Debug" + fi;; + o) + if [ ${OPTARG} = "clean" ] || [ ${OPTARG} = "Clean" ] + then + buildoption="Clean" + fi;; + esac done +# if -o clean was provided, do a clean build +if [ $buildoption = "Clean" ] +then + echo "Preparing for clean build..." + rm -R make/cmake/build/ +fi + echo "Creating Build directory" cd make/cmake mkdir -p build diff --git a/docs/index.html b/docs/index.html index 93595f794..c67f7cdf3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -27,7 +27,7 @@

    UOX3 Documentation

    -

    Last Updated: 11. December, 2022

    +

    Last Updated: 24. December, 2022

    Written for UOX3 Version: v0.99.6-RC1

    @@ -167,7 +167,7 @@

    March 19th, 2021

    November 13th, 2020

      -
    • Added dos2unix instructions for Linux/MacOS users downloading default worldfiles/spawnfiles
    • +
    • Added dos2unix instructions for Linux/macOS users downloading default worldfiles/spawnfiles

    November 7th, 2020

      @@ -4728,9 +4728,9 @@

      Step 1: Set up a Build Environment

      • Windows - Download and install Community Edition of Visual Studio 2017 or 2022.
          -
        • Be sure to also install Desktop development with C++ via the Visual Studio Installer, along with the individual component titled VC++ 2017 version 15.9 v14.16 latest v141 tools (VS2017) or MSVC v143 - VS 2022 C++ x64/x86 build tools (VS2022). CMake is included for command-line builds.
        • +
        • Be sure to also install Desktop development with C++ via the Visual Studio Installer, along with the individual component titled VC++ 2017 version 15.9 v14.16 latest v141 tools (VS2017) or MSVC v143 - VS 2022 C++ x64/x86 build tools (VS2022). CMake is included for command-line builds.
        -
      • Linux (Debian-based) - Run sudo apt install build-essentials cmake in a Terminal: (or use your Linux distro's package manager)
      • +
      • Linux (Debian-based) - Run sudo apt install build-essential cmake in a Terminal: (or use your Linux distro's package manager)
      • FreeBSD - Run pkg install cmake in a Terminal. Alternatively, build cmake via ports if desired.
      • macOS - Download Xcode (for building with an IDE) via the App Store, and/or CMake (for command-line builds)
      • @@ -4762,44 +4762,49 @@

        Step 2: Clone the UOX3 Git Repository

        -

        If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can use the following command after completing the previous step: git checkout develop

        +

        If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can use the following command after completing the previous step:
        git checkout develop

        GitHub Desktop users can change the active branch via the Current Branch dropdown menu in GitHub Desktop.

        Step 3: Compile UOX3

        - Finally, compile UOX3 using the build environment you setup above + Finally, compile UOX3 using the build environment you setup in Step 1. + + +
          -
        • Windows - Open UOX3\make\VS2022\uox3.sln (VS2022), choose Release/Debug from dropdown menu, and hit Build -> Build UOX3
        • -
        • Linux/FreeBSD - Run ./automake.sh in a Terminal, from the root of the cloned UOX3 repository.
        • -
        • macOS - Open UOX3/make/XCode/uox3/uox3.xcworkspace, select Build
        • +
        • Visual Studio 2022 - (Windows) Open UOX3\make\VS2022\uox3.sln (VS2022), choose Release/Debug from dropdown menu, and hit Build -> Build UOX3
        • +
        • automake.sh - (Linux/FreeBSD) Run ./automake.sh in a Terminal, from the root of the cloned UOX3 repository. This compiles UOX3 with CMake, but in one command only. Use optional argument -b debug to create debug build, and/or -o clean to do a clean build.
        • +
        • XCode - (macOS) Open UOX3/make/XCode/uox3/uox3.xcworkspace, select Build
        +
        - +
        -

        If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal:

        +

        If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does) in a Terminal. This also works on Windows/macOS as an alternative to compile with IDEs:

        • Navigate to root of cloned UOX3 git repository
        • cd make/cmake
        • -
        • mkdir -p build
        • +
        • mkdir build
        • cd build
        • -
        • cmake .. -DCMAKE_BUILD_TYPE=Release (Windows/Linux/FreeBSD)
        • -
        • cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles" (macOS)
        • +
        • cmake .. -DCMAKE_BUILD_TYPE=Release (Windows/Linux/FreeBSD)
        • +
        • cmake .. -DCMAKE_BUILD_TYPE=Release -G"Unix Makefiles" (macOS)
        • cmake --build . --config Release
        +

        Replace "Release" with "Debug" in the above instructions to create a debug-build; delete make/cmake/build directory to do clean builds.

        - +

        If you'd rather use GCC (v9.x or higher)/make (GNU Make 4.2.1 or higher) than CMake, you can follow these manual steps. Note that for FreeBSD, this approach requires installing gmake as an alternative to make: pkg install gmake

        First, navigate to spidermonkey directory and run these commands:
        - make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc (Linux)
        - ar -r libjs32.a Linux_All_DBG.OBJ/*.o (Linux)
        - cp Linux_All_DBG.OBJ/jsautocfg.h ./ (Linux)
        - gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang (FreeBSD)
        - ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o (FreeBSD)
        - cp FreeBSD_DBG.OBJ/jsautocfg.h ./ (FreeBSD)

        + make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc (Linux)
        + ar -r libjs32.a Linux_All_DBG.OBJ/*.o (Linux)
        + cp Linux_All_DBG.OBJ/jsautocfg.h ./ (Linux)
        + gmake -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=clang (FreeBSD)
        + ar rcs libjs32.a FreeBSD_DBG.OBJ/*.o (FreeBSD)
        + cp FreeBSD_DBG.OBJ/jsautocfg.h ./ (FreeBSD)

        Next, head to the zlib directory:
        cd ../zlib
        @@ -4823,9 +4828,9 @@

        Step 3: Compile UOX3

        - +
        -

        When using VS2017, static libraries of the dependency projects (SpiderMonkey and zlib) need to be compiled first before UOX3 itself can be compiled UOX3 will work:

        +

        When using VS2017, static libraries of the dependency projects (SpiderMonkey and zlib) need to be compiled prior to the UOX3 project. However, after those sub-projects have been compiled once, they never need to be compiled again, and from that point on only the build instructions for UOX3 itself applies:

        SpiderMonkey

          @@ -4852,9 +4857,10 @@

          UOX3

          UOX3 Compiled! Now what?

          Once done compiling, you can copy the compiled UOX3 binary/executable to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data subdirectory. Where you'll find the compiled UOX3 binary/executable depends on your platform and build method. Examples:

            -
          • Windows - Compiled UOX3.exe can be found in UOX3/make/VS2022/x64/Release
          • -
          • Linux/FreeBSD - Compiled uox3 binary can be found in root UOX3 repository
          • -
          • macOS - Compiled uox3 binary can be found in UOX3\make\XCode\Build\Products\Release
          • +
          • Windows - (VS2022) Compiled UOX3.exe can be found in UOX3/make/VS2022/x64/Release
          • +
          • Linux/FreeBSD - (automake.sh) Compiled uox3 binary can be found in root UOX3 repository
          • +
          • macOS - (XCode) Compiled uox3 binary can be found in UOX3\make\XCode\Build\Products\Release
          • +
          • Either Platform - (CMake, manual) Compiled uox3 binary can be found in UOX3\make\cmake\build

          It is recommended to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future.

          Once you have all the files in place, you can follow the regular steps listed under Installation and Setup > Configuring Your UOX3 Shard to finish your UOX3 setup!

          @@ -8167,7 +8173,7 @@

          A home for discussion of non-Official Ultima Online Servers, also known as Freeshards - hosted by Stratics (who once upon a time also hosted the UOX3 website and IRC channels!)

          ShardPortal

          The ShardPortal is a place for anyone to advertise their shard as well as search out other active shards.

          -

          UOGateway (Dead?)

          +

          UOGateway

          (Possibly dead) A top site list for free UO shards made in the spirit of and in honor of Mr. Fixit's original UOGateway tool.

          UO-Pixel

          Another nice (German) website focusing on providing custom artwork for UO shards. Amongst other things, it has some very nice animated item artwork (including a moving water-mill).

          @@ -11166,7 +11172,7 @@

          How it Got Started

          -

          Contributors active within last year (as of November 2022):

          +

          Contributors active within last year (as of December 2022):

          Xuri, punt, Dragon Slayer, Azzerhoden Razeri, ldilley

        diff --git a/source/Changelog.txt b/source/Changelog.txt index 0b4db7186..afc54f9cb 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,26 @@ +24/12/2022 - Xuri, punt, ldilley (0.99.6-RC2) + CMake is now default build system on Linux/FreeBSD, and an alternative for Windows/macOS-users instead of VS/XCode, though the old GCC/Make build process is still intact (for now) + Resource files (uox3.rc and uox3.ico) have been moved from UOX3/source to UOX3/assets + Build/project-related files have been moved to /make/[buildsystem] sub-directories, for both UOX3 and sub-projects: + UOX3/make/cmake + UOX3/make/VS2017 + UOX3/make/VS2022 + UOX3/make/XCode + spidermonkey/make/cmake + spidermonkey/make/VS2017 + spidermonkey/make/VS2022 + spidermonkey/make/XCode + zlib/make/cmake + zlib/make/VS2017 + zlib/make/VS2022 + zlib/make/XCode + CMake, VS2022 and XCode will compile sub-projects automatically when UOX3 is compiled, while VS2017 requires compiling sub-projects prior to UOX3 + automake.sh script (still in root of repository) now uses CMake instead of GCC/Make, and supports optional arguments for creating debug/clean builds + Updated instructions on compiling UOX3 can be found on GitHub and/or in the UOX3 documentation + Some redundant files have been deleted from the repository (like DLL folder and file) + Code style guide added to UOX3/docs directory (styleguide.html) + Updated GitHub workflows to use cmake for Linux and to ignore changes to .txt/.html/.sln/.vcxproj files for both Linux & Windows workflows + 17/12/2022 - Xuri When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player diff --git a/source/cVersionClass.cpp b/source/cVersionClass.cpp index 3467b8d0a..7493b717e 100644 --- a/source/cVersionClass.cpp +++ b/source/cVersionClass.cpp @@ -11,7 +11,7 @@ // product info //o------------------------------------------------------------------------------------------------o const std::string VER = "0.99"; -const std::string BUILD = "6-RC1"; +const std::string BUILD = "6-RC2"; const std::string REALBUILD = "0"; const std::string SVER = "2.0"; const std::string CVER = "2.0"; From 61a2da35011c4cbfeedd68db087dd222ae318c95 Mon Sep 17 00:00:00 2001 From: Xoduz Date: Sat, 31 Dec 2022 18:07:42 +0800 Subject: [PATCH 24/24] Misc updates Extended GetSpawnRegion JS Function to fetch spawn region reference based on a set of coordinates. Supported syntax are now: GetSpawnRegion( spawnRegionID ) GetSpawnRegion( x, y, worldNum, instanceID ) Added new DFN tags for Items and NPC: SECTIONID // Override which [sectionID] is stored for an object ORIGIN // Store reference to which expansion/era of UO an item/NPC originated in Added new Item/Character JS property: .origin // Get reference to expansion/era of UO an item/NPC originated in Fixed an issue with IsInBuilding JS Function which could only handled a limited subset of instance ID values Corrected name of tag used to attach scripts to ore types - from SCRIPTID to SCRIPT --- docs/index.html | 1 + docs/jsdocs.html | 15 ++++++++++- source/Changelog.txt | 12 +++++++++ source/SEFunctions.cpp | 51 ++++++++++++++++++++++++++++------- source/UOXJSMethods.cpp | 2 +- source/UOXJSPropertyEnums.h | 2 ++ source/UOXJSPropertyFuncs.cpp | 5 ++++ source/UOXJSPropertySpecs.h | 2 ++ source/cBaseObject.h | 5 ++++ source/cBaseobject.cpp | 23 +++++++++++++++- source/cScript.cpp | 2 +- source/items.cpp | 9 +++++-- source/npcs.cpp | 2 ++ source/skills.cpp | 2 +- source/ssection.cpp | 4 +++ source/ssection.h | 2 ++ 16 files changed, 122 insertions(+), 17 deletions(-) diff --git a/docs/index.html b/docs/index.html index c67f7cdf3..b7dcc6780 100644 --- a/docs/index.html +++ b/docs/index.html @@ -11098,6 +11098,7 @@

        How it Got Started

        Grimson
        Programmer, 07/06/2005, 0.98.3-0

        ShadowBranch
        Daniel Moree, Programmer, 11/06/2005, 0.98-3.0

        +

        Sydius
        Chris Ogden, Programmer, 04/08/2005, 0.98-3.0

        lingo
        Lingo Chen, Programmer, 05/08/2005, 0.98-3.0e

        diff --git a/docs/jsdocs.html b/docs/jsdocs.html index 7d2241ef2..95cc14911 100644 --- a/docs/jsdocs.html +++ b/docs/jsdocs.html @@ -7067,15 +7067,20 @@

        January 9th, 2022

        Prototype

        SpawnRegion GetSpawnRegion( spawnRegionNum );

        +

        SpawnRegion GetSpawnRegion( x, y, worldNum, instanceID );

        Purpose

        -

        Returns SpawnRegion object for specified spawnRegionNum.

        +

        Returns SpawnRegion object for specified spawnRegionNum, or for specified set of coordinates

        Example of usage

        // Returns SpawnRegion object for spawn region #1 from spawns.dfn
         var spawnRegion = GetSpawnRegion( 1 );
        +pUser.TextMessage( "The name of this SpawnRegion is: " + spawnRegion.name );
        +
        +// Returns SpawnRegion object for spawn region at specified coordinates:
        +var spawnRegion = GetSpawnRegion( pUser.x, pUser.y, pUser.worldnumber, pUser.instanceID );
         pUser.TextMessage( "The name of this SpawnRegion is: " + spawnRegion.name );
        @@ -14211,6 +14216,10 @@

        Text Types

        .name (text, max 127 characters)
        Get/Set name of character

        +
        +

        .origin (text, max 127 characters)
        + Get/Set origin (expansion, era) of character

        +

        .sectionID (text, max 127 characters)
        Section ID from DFNs that object originated from

        @@ -14869,6 +14878,10 @@

        Text Types

        .name2 (text, max 127 characters)
        Get/Set secondary name of item - used in relation to magical items whose names get revealed upon successful use of Item Identification

        +
        +

        .origin (text, max 127 characters)
        + Get/Set origin (expansion, era) of item

        +

        .sectionID (text, max 127 characters)
        Section ID from DFNs that object originated from

        diff --git a/source/Changelog.txt b/source/Changelog.txt index afc54f9cb..3a0490ea6 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,15 @@ +31/12/2022 - Xuri + Extended GetSpawnRegion JS Function to fetch spawn region reference based on a set of coordinates. Supported syntax are now: + GetSpawnRegion( spawnRegionID ) + GetSpawnRegion( x, y, worldNum, instanceID ) + Added new DFN tags for Items and NPC: + SECTIONID // Override which [sectionID] is stored for an object + ORIGIN // Store reference to which expansion/era of UO an item/NPC originated in + Added new Item/Character JS property: + .origin // Get reference to expansion/era of UO an item/NPC originated in + Fixed an issue with IsInBuilding JS Function which could only handled a limited subset of instance ID values + Corrected name of tag used to attach scripts to ore types - from SCRIPTID to SCRIPT + 24/12/2022 - Xuri, punt, ldilley (0.99.6-RC2) CMake is now default build system on Linux/FreeBSD, and an alternative for Windows/macOS-users instead of VS/XCode, though the old GCC/Make build process is still intact (for now) Resource files (uox3.rc and uox3.ico) have been moved from UOX3/source to UOX3/assets diff --git a/source/SEFunctions.cpp b/source/SEFunctions.cpp index 71de98716..a8a150c7a 100644 --- a/source/SEFunctions.cpp +++ b/source/SEFunctions.cpp @@ -3420,20 +3420,28 @@ JSBool SE_GetTownRegion( JSContext *cx, [[maybe_unused]] JSObject *obj, uintN ar //o------------------------------------------------------------------------------------------------o JSBool SE_GetSpawnRegion( JSContext *cx, [[maybe_unused]] JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { - if( argc != 1 ) + if( argc != 1 && argc != 4 ) { - DoSEErrorMessage( "GetSpawnRegion: Invalid number of parameters (1)" ); + DoSEErrorMessage( "GetSpawnRegion: Invalid number of parameters (1 - spawnRegionID, or 4 - x, y, world and instanceID)" ); return JS_FALSE; } - UI16 spawnRegNum = static_cast( JSVAL_TO_INT( argv[0] )); - if( cwmWorldState->spawnRegions.find( spawnRegNum ) != cwmWorldState->spawnRegions.end() ) + if( argc == 1 ) { - CSpawnRegion *spawnReg = cwmWorldState->spawnRegions[spawnRegNum]; - if( spawnReg != nullptr ) + // Assume spawn region number was provided + UI16 spawnRegNum = static_cast( JSVAL_TO_INT( argv[0] )); + if( cwmWorldState->spawnRegions.find( spawnRegNum ) != cwmWorldState->spawnRegions.end() ) { - JSObject *myObj = JSEngine->AcquireObject( IUE_SPAWNREGION, spawnReg, JSEngine->FindActiveRuntime( JS_GetRuntime( cx ))); - *rval = OBJECT_TO_JSVAL( myObj ); + CSpawnRegion *spawnReg = cwmWorldState->spawnRegions[spawnRegNum]; + if( spawnReg != nullptr ) + { + JSObject *myObj = JSEngine->AcquireObject( IUE_SPAWNREGION, spawnReg, JSEngine->FindActiveRuntime( JS_GetRuntime( cx ))); + *rval = OBJECT_TO_JSVAL( myObj ); + } + else + { + *rval = JSVAL_NULL; + } } else { @@ -3442,8 +3450,31 @@ JSBool SE_GetSpawnRegion( JSContext *cx, [[maybe_unused]] JSObject *obj, uintN a } else { - *rval = JSVAL_NULL; + // Assume coordinates were provided + UI16 x = static_cast( JSVAL_TO_INT( argv[0] )); + UI16 y = static_cast( JSVAL_TO_INT( argv[1] )); + UI08 worldNum = static_cast( JSVAL_TO_INT( argv[2] )); + UI16 instanceID = static_cast( JSVAL_TO_INT( argv[3] )); + + // Iterate over each spawn region to find the right one + auto iter = std::find_if( cwmWorldState->spawnRegions.begin(), cwmWorldState->spawnRegions.end(), [&x, &y, &worldNum, &instanceID, &cx, &rval]( std::pair entry ) + { + if( entry.second && x >= entry.second->GetX1() && x <= entry.second->GetX2() && y >= entry.second->GetY1() + && y <= entry.second->GetY2() && entry.second->GetInstanceId() == instanceID && entry.second->WorldNumber() == worldNum ) + { + JSObject *myObj = JSEngine->AcquireObject( IUE_SPAWNREGION, entry.second, JSEngine->FindActiveRuntime( JS_GetRuntime( cx ))); + *rval = OBJECT_TO_JSVAL( myObj ); + return true; + } + return false; + }); + + if( iter == cwmWorldState->spawnRegions.end() ) + { + *rval = JSVAL_NULL; + } } + return JS_TRUE; } @@ -3504,7 +3535,7 @@ JSBool SE_IsInBuilding( [[maybe_unused]] JSContext *cx, [[maybe_unused]] JSObjec SI16 y = static_cast( JSVAL_TO_INT( argv[1] )); SI08 z = static_cast( JSVAL_TO_INT( argv[2] )); UI08 worldNum = static_cast( JSVAL_TO_INT( argv[3] )); - UI08 instanceId = static_cast( JSVAL_TO_INT( argv[4] )); + UI16 instanceId = static_cast( JSVAL_TO_INT( argv[4] )); bool checkHeight = ( JSVAL_TO_BOOLEAN( argv[5] ) == JS_TRUE ); bool isInBuilding = Map->InBuilding( x, y, z, worldNum, instanceId ); if( !isInBuilding ) diff --git a/source/UOXJSMethods.cpp b/source/UOXJSMethods.cpp index 57d3f8d3b..cd63b7224 100644 --- a/source/UOXJSMethods.cpp +++ b/source/UOXJSMethods.cpp @@ -3674,7 +3674,7 @@ JSBool CBase_UseResource( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, sectionId = JS_GetStringBytes( JS_ValueToString( cx, argv[4] )); } - bool colorCheck = ( itemColour != -1 ); + bool colorCheck = ( itemColour != -1 ? true : false ); bool moreCheck = ( moreVal != -1 ? true : false ); UI32 retVal = 0; diff --git a/source/UOXJSPropertyEnums.h b/source/UOXJSPropertyEnums.h index f29a97043..b6a1348b5 100644 --- a/source/UOXJSPropertyEnums.h +++ b/source/UOXJSPropertyEnums.h @@ -382,6 +382,7 @@ enum CC_Properties CCP_LOYALTY, CCP_LOYALTYRATE, CCP_SHOULDSAVE, + CCP_ORIGIN, CCP_PARTYLOOTABLE, CCP_PARTY, CCP_MULTI, @@ -512,6 +513,7 @@ enum CI_Properties CIP_BASERANGE, CIP_REGION, CIP_SPAWNSERIAL, + CIP_ORIGIN, CIP_ISITEMHELD, CIP_SECTIONID, diff --git a/source/UOXJSPropertyFuncs.cpp b/source/UOXJSPropertyFuncs.cpp index c8c19f34f..04640cef8 100644 --- a/source/UOXJSPropertyFuncs.cpp +++ b/source/UOXJSPropertyFuncs.cpp @@ -733,6 +733,10 @@ JSBool CItemProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp break; } case CIP_SPAWNSERIAL: *vp = INT_TO_JSVAL( gPriv->GetSpawn() ); break; + case CIP_ORIGIN: + tString = JS_NewStringCopyZ( cx, gPriv->GetOrigin().c_str() ); + *vp = STRING_TO_JSVAL( tString ); + break; case CIP_ISITEMHELD: *vp = BOOLEAN_TO_JSVAL( gPriv->IsHeldOnCursor() ); break; // The following entries are specifically for CSpawnItem objects @@ -1269,6 +1273,7 @@ JSBool CItemProps_setProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp case CIP_MAXRANGE: gPriv->SetMaxRange( static_cast( encaps.toInt() )); break; case CIP_BASERANGE: gPriv->SetBaseRange( static_cast( encaps.toInt() )); break; case CIP_REGION: gPriv->SetRegion( static_cast( encaps.toInt() )); break; + case CIP_ORIGIN: gPriv->SetOrigin( encaps.toString() ); break; case CIP_ISITEMHELD: gPriv->SetHeldOnCursor( encaps.toBool() ); break; // The following entries are specifically for CSpawnItem objects diff --git a/source/UOXJSPropertySpecs.h b/source/UOXJSPropertySpecs.h index 79f8bdd91..1e60df191 100644 --- a/source/UOXJSPropertySpecs.h +++ b/source/UOXJSPropertySpecs.h @@ -395,6 +395,7 @@ inline JSPropertySpec CCharacterProps[] = { "loyalty", CCP_LOYALTY, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "loyaltyRate", CCP_LOYALTYRATE, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "shouldSave", CCP_SHOULDSAVE, JSPROP_ENUMANDPERM, nullptr, nullptr }, + { "origin", CCP_ORIGIN, JSPROP_ENUMANDPERM }, { "partyLootable", CCP_PARTYLOOTABLE, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "party", CCP_PARTY, JSPROP_ENUMPERMRO, nullptr, nullptr }, { "multi", CCP_MULTI, JSPROP_ENUMANDPERM, nullptr, nullptr }, @@ -523,6 +524,7 @@ inline JSPropertySpec CItemProps[] = { "baseRange", CIP_BASERANGE, JSPROP_ENUMANDPERM, nullptr, nullptr }, { "region", CIP_REGION, JSPROP_ENUMPERMRO, nullptr, nullptr }, { "spawnSerial", CIP_SPAWNSERIAL, JSPROP_ENUMPERMRO, nullptr, nullptr }, + { "origin", CIP_ORIGIN, JSPROP_ENUMANDPERM }, { "isItemHeld", CIP_ISITEMHELD, JSPROP_ENUMANDPERM, nullptr, nullptr }, // The Following vars are specific to CSpawnItem objects diff --git a/source/cBaseObject.h b/source/cBaseObject.h index 7063251b2..943c43a4a 100644 --- a/source/cBaseObject.h +++ b/source/cBaseObject.h @@ -95,6 +95,7 @@ class CBaseObject SI16 karma; SI16 kills; UI16 subRegion; + std::string origin; // Stores expansion item originates from void RemoveFromMulti( bool fireTrigger = true ); void AddToMulti( bool fireTrigger = true ); @@ -126,6 +127,10 @@ class CBaseObject void SetTitle( std::string newtitle ); std::string GetTitle( void ) const; + + void SetOrigin( std::string newOrigin ); + std::string GetOrigin( void ) const; + virtual void SetMana( SI16 mn ); SI16 GetMana( void ) const; virtual void SetStamina( SI16 stam ); diff --git a/source/cBaseobject.cpp b/source/cBaseobject.cpp index c118878bd..a5747842b 100644 --- a/source/cBaseobject.cpp +++ b/source/cBaseobject.cpp @@ -741,6 +741,7 @@ bool CBaseObject::DumpBody( std::ofstream &outStream ) const std::string myLocation = "Location=" + std::to_string( x ) + "," + std::to_string( y ) + "," +std::to_string( z ) + "," + std::to_string( worldNumber ) + "," + std::to_string( instanceId ) + newLine; outStream << myLocation; outStream << "Title=" << title << newLine; + outStream << "Origin=" << origin << newLine; //=========== BUG (= For Characters the dex+str+int malis get saved and get rebuilt on next serverstartup = increasing malis) temp_st2 = st2; @@ -1416,6 +1417,21 @@ void CBaseObject::SetTitle( std::string newtitle ) title = newtitle.substr( 0, MAX_TITLE - 1 ); } +//o------------------------------------------------------------------------------------------------o +//| Function - CBaseObject::GetOrigin() +//| CBaseObject::SetOrigin() +//o------------------------------------------------------------------------------------------------o +//| Purpose - Gets/Sets the object's origin +//o------------------------------------------------------------------------------------------------o +std::string CBaseObject::GetOrigin( void ) const +{ + return origin; +} +void CBaseObject::SetOrigin( std::string newOrigin ) +{ + origin = newOrigin.substr( 0, MAX_ORIGIN ); +} + //o------------------------------------------------------------------------------------------------o //| Function - CBaseObject::GetScriptTriggers() //o------------------------------------------------------------------------------------------------o @@ -1896,7 +1912,11 @@ bool CBaseObject::HandleLine( std::string &UTag, std::string &data ) } break; case 'O': - if( UTag == "OWNERID" ) + if( UTag == "ORIGIN" ) + { + origin = data.substr( 0, MAX_ORIGIN - 1 ); + } + else if( UTag == "OWNERID" ) { owner = oldstrutil::value( data ); } @@ -2452,6 +2472,7 @@ void CBaseObject::CopyData( CBaseObject *target ) { target->SetSectionId( GetSectionId() ); target->SetTitle( GetTitle() ); + target->SetOrigin( GetOrigin() ); target->SetRace( GetRace() ); target->SetName( GetName() ); target->SetStrength( GetStrength() ); diff --git a/source/cScript.cpp b/source/cScript.cpp index 7cf69e7fc..af85794a6 100644 --- a/source/cScript.cpp +++ b/source/cScript.cpp @@ -128,7 +128,7 @@ static JSFunctionSpec my_functions[] = { "Moon", SE_Moon, 2, 0, 0 }, { "GetTownRegion", SE_GetTownRegion, 1, 0, 0 }, - { "GetSpawnRegion", SE_GetSpawnRegion, 1, 0, 0 }, + { "GetSpawnRegion", SE_GetSpawnRegion, 4, 0, 0 }, { "GetSpawnRegionCount", SE_GetSpawnRegionCount, 0, 0, 0 }, diff --git a/source/items.cpp b/source/items.cpp index 57ace36bc..fe28fcff5 100644 --- a/source/items.cpp +++ b/source/items.cpp @@ -419,6 +419,7 @@ auto ApplyItemSection( CItem *applyTo, CScriptSection *toApply, std::string sect case DFNTAG_NAME2: applyTo->SetName2( cdata ); break; case DFNTAG_NEWBIE: applyTo->SetNewbie( true ); break; case DFNTAG_OFFSPELL: applyTo->SetOffSpell( static_cast( ndata )); break; + case DFNTAG_ORIGIN: applyTo->SetOrigin( cdata ); break; case DFNTAG_POISONDAMAGE: applyTo->SetWeatherDamage( POISON, ndata != 0 ); break; case DFNTAG_POISONED: applyTo->SetPoisoned( static_cast( ndata )); break; case DFNTAG_PILEABLE: applyTo->SetPileable( ndata != 0 ); break; @@ -507,6 +508,7 @@ auto ApplyItemSection( CItem *applyTo, CScriptSection *toApply, std::string sect break; } case DFNTAG_RAIN: applyTo->SetWeatherDamage( RAIN, ndata != 0 ); break; + case DFNTAG_SECTIONID: applyTo->SetSectionId( cdata ); break; case DFNTAG_SK_MADE: applyTo->SetMadeWith( static_cast( ndata )); break; case DFNTAG_SPD: applyTo->SetSpeed( static_cast( ndata )); break; case DFNTAG_STRENGTH: applyTo->SetStrength( static_cast( ndata )); break; @@ -1195,8 +1197,11 @@ CItem * cItem::CreateBaseScriptItem( CItem *mCont, std::string ourItem, const UI iCreated->SetAmount( iAmount ); } - // Keep reference to DFN sectionId item was created from - iCreated->SetSectionId( ourItem ); + // Keep reference to DFN sectionId item was created from (if it has not been set already via special DFN tag SECTIONID) + if( iCreated->GetSectionId() == "" ) + { + iCreated->SetSectionId( ourItem ); + } } return iCreated; diff --git a/source/npcs.cpp b/source/npcs.cpp index 713acd976..9138fed2e 100644 --- a/source/npcs.cpp +++ b/source/npcs.cpp @@ -1427,6 +1427,7 @@ auto CCharStuff::ApplyNpcSection( CChar *applyTo, CScriptSection *NpcCreation, s applyTo->SetCanTrain( false ); } break; + case DFNTAG_ORIGIN: applyTo->SetOrigin( cdata ); break; case DFNTAG_POISONSTRENGTH: applyTo->SetPoisonStrength( static_cast( ndata )); break; case DFNTAG_PRIV: if( !isGate ) @@ -1552,6 +1553,7 @@ auto CCharStuff::ApplyNpcSection( CChar *applyTo, CScriptSection *NpcCreation, s case DFNTAG_RUNNINGSPEEDMOUNTED: applyTo->SetMountedRunningSpeed( std::stof( cdata )); break; + case DFNTAG_SECTIONID: applyTo->SetSectionId( cdata ); break; case DFNTAG_SKIN: applyTo->SetSkin( static_cast( ndata )); break; case DFNTAG_SHOPKEEPER: if( !isGate ) diff --git a/source/skills.cpp b/source/skills.cpp index 4ac6f2eda..71b7c682b 100644 --- a/source/skills.cpp +++ b/source/skills.cpp @@ -2123,7 +2123,7 @@ bool CSkills::LoadMiningData( void ) } break; case 'S': - if( UTag == "SCRIPTID" ) + if( UTag == "SCRIPT" ) { toAdd.scriptID = static_cast( std::stoul( data, nullptr, 0 )); } diff --git a/source/ssection.cpp b/source/ssection.cpp index 27beef2de..b9a51973d 100644 --- a/source/ssection.cpp +++ b/source/ssection.cpp @@ -167,6 +167,7 @@ const UI08 dfnDataTypes[DFNTAG_COUNTOFTAGS] = DFN_UPPERSTRING, // DFNTAG_NPCLIST, DFN_NUMERIC, // DFNTAG_NPCWANDER, DFN_NUMERIC, // DFNTAG_OFFSPELL, + DFN_STRING, // DFNTAG_ORIGIN, DFN_STRING, // DFNTAG_PACKITEM, DFN_DOUBLENUMERIC, // DFNTAG_PARRYING, DFN_DOUBLENUMERIC, // DFNTAG_PEACEMAKING, @@ -194,6 +195,7 @@ const UI08 dfnDataTypes[DFNTAG_COUNTOFTAGS] = DFN_NODATA, // DFNTAG_RUNS, DFN_NUMERIC, // DFNTAG_SAYCOLOUR, DFN_NUMERIC, // DFNTAG_SCRIPT, + DFN_STRING, // DFNTAG_SECTIONID, DFN_STRING, // DFNTAG_SELLITEM, DFN_STRING, // DFNTAG_SHOPITEM, DFN_NODATA, // DFNTAG_SHOPKEEPER, @@ -419,6 +421,7 @@ const std::map strToDFNTag {"NPCLIST"s, DFNTAG_NPCLIST}, {"NPCWANDER"s, DFNTAG_NPCWANDER}, {"OFFSPELL"s, DFNTAG_OFFSPELL}, + {"ORIGIN"s, DFNTAG_ORIGIN}, {"PACKITEM"s, DFNTAG_PACKITEM}, {"PARRYING"s, DFNTAG_PARRYING}, {"PEACEMAKING"s, DFNTAG_PEACEMAKING}, @@ -447,6 +450,7 @@ const std::map strToDFNTag {"SAYCOLOR"s, DFNTAG_SAYCOLOUR}, {"SAYCOLOUR"s, DFNTAG_SAYCOLOUR}, {"SCRIPT"s, DFNTAG_SCRIPT}, + {"SECTIONID"s, DFNTAG_SECTIONID}, {"SELLITEM"s, DFNTAG_SELLITEM}, {"SHOPITEM"s, DFNTAG_SHOPITEM}, {"SHOPKEEPER"s, DFNTAG_SHOPKEEPER}, diff --git a/source/ssection.h b/source/ssection.h index 32819b407..9f74230fd 100644 --- a/source/ssection.h +++ b/source/ssection.h @@ -174,6 +174,7 @@ enum DFNTAGS DFNTAG_NPCLIST, DFNTAG_NPCWANDER, DFNTAG_OFFSPELL, + DFNTAG_ORIGIN, DFNTAG_PACKITEM, DFNTAG_PARRYING, DFNTAG_PEACEMAKING, @@ -201,6 +202,7 @@ enum DFNTAGS DFNTAG_RUNS, DFNTAG_SAYCOLOUR, DFNTAG_SCRIPT, + DFNTAG_SECTIONID, DFNTAG_SELLITEM, DFNTAG_SHOPITEM, DFNTAG_SHOPKEEPER,