Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
94 kB · 3033 lines
C++
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034#include "stdafx.h"
#include "..\Common\UI\UIStructs.h"
#include "..\Common\XUI\XUI_Intro.h"#include "..\Common\XUI\XUI_MainMenu.h"#include "..\Common\XUI\XUI_NewUpdateMessage.h"#include "..\Common\XUI\XUI_HelpAndOptions.h"#include "..\Common\XUI\XUI_TextEntry.h"#include "..\Common\XUI\XUI_HelpHowToPlay.h" #include "..\Common\XUI\XUI_HowToPlayMenu.h"#include "..\Common\XUI\XUI_HelpControls.h"#include "..\Common\XUI\XUI_TextEntry.h"#include "..\Common\XUI\XUI_LoadSettings.h"#include "..\Common\XUI\XUI_SettingsAll.h"#include "..\Common\XUI\XUI_SettingsOptions.h"#include "..\Common\XUI\XUI_SettingsAudio.h"#include "..\Common\XUI\XUI_SettingsControl.h"#include "..\Common\XUI\XUI_SettingsGraphics.h"#include "..\Common\XUI\XUI_SettingsUI.h"#include "..\Common\XUI\XUI_Leaderboards.h"#include "..\Common\XUI\XUI_Debug.h"#include "..\Common\XUI\XUI_DebugTips.h"#include "..\Common\XUI\XUI_Reinstall.h"#include "..\Common\XUI\XUI_Death.h"#include "..\Common\XUI\XUI_DebugOverlay.h"#include "..\Common\XUI\XUI_DLCOffers.h"#include "..\Common\XUI\XUI_SocialPost.h"#include "..\Common\XUI\XUI_Scene_Container.h"#include "..\Common\XUI\XUI_Scene_Furnace.h"#include "..\Common\XUI\XUI_Scene_Inventory.h"#include "..\Common\XUI\XUI_Scene_Trap.h"#include "..\Common\XUI\XUI_Control_ComboBox.h"#include "..\Common\XUI\XUI_MultiGameInfo.h"#include "..\Common\XUI\XUI_MultiGameJoinLoad.h"#include "..\Common\XUI\XUI_MultiGameCreate.h"#include "..\Common\XUI\XUI_MultiGameLaunchMoreOptions.h"#include "..\Common\XUI\XUI_SignEntry.h"#include "..\Common\XUI\XUI_InGameInfo.h"#include "..\Common\XUI\XUI_TrialExitUpsell.h"#include "..\Common\XUI\XUI_BasePlayer.h"#include "..\Common\XUI\XUI_PartnernetPassword.h"#include "..\Common\XUI\XUI_SaveMessage.h"#include "..\Common\XUI\XUI_Chat.h"#include "..\Common\XUI\XUI_SkinSelect.h"#include "..\Common\XUI\XUI_InGameHostOptions.h"#include "..\Common\XUI\XUI_InGamePlayerOptions.h"#include "..\Common\XUI\XUI_Scene_Enchant.h"#include "..\Common\XUI\XUI_Scene_BrewingStand.h"#include "..\Common\XUI\XUI_XZP_Icons.h"#include "..\Common\XUI\XUI_Controls.h"#include "..\Common\XUI\XUI_Scene_Win.h"#include "..\Common\XUI\XUI_HUD.h"#include "..\Common\XUI\XUI_DebugSetCamera.h"//#include "..\Common\XUI\XUI_TransferToXboxOne.h"
#ifdef _DEBUG_MENUS_ENABLED#include "..\Common\XUI\XUI_DebugItemEditor.h"#endif#ifndef _CONTENT_PACKAGE#include "..\Common\XUI\XUI_DebugSchematicCreator.h"#endif
#include "..\..\Minecraft.World\Recipy.h"#include "GameConfig\Minecraft.spa.h"#include "..\..\Minecraft.Client\Options.h"#include "..\..\Minecraft.World\AABB.h"#include "..\..\Minecraft.World\Vec3.h"#include "..\MinecraftServer.h"#include "..\GameRenderer.h"#include "..\ProgressRenderer.h"#include "..\..\Minecraft.Client\LevelRenderer.h"#include "..\..\Minecraft.Client\MobSkinMemTextureProcessor.h"
#include "..\..\Minecraft.Client\Minecraft.h"
#include "..\ClientConnection.h"#include "..\MultiPlayerLocalPlayer.h"#include "..\..\Minecraft.Client\LocalPlayer.h"#include "..\..\Minecraft.World\Player.h"#include "..\..\Minecraft.World\Inventory.h"#include "..\..\Minecraft.World\Level.h"#include "..\..\Minecraft.World\FurnaceTileEntity.h"#include "..\..\Minecraft.World\Container.h"#include "..\..\Minecraft.World\DispenserTileEntity.h"#include "..\..\Minecraft.World\SignTileEntity.h"#include "..\..\Minecraft.Client\StatsCounter.h"#include "..\GameMode.h"#include "Social\SocialManager.h"#include <xgraphics.h>#include "..\Common\Tutorial\TutorialMode.h"#include "..\..\Minecraft.Client\Xbox\XML\ATGXmlParser.h"#include "..\..\Minecraft.Client\Xbox\XML\xmlFilesCallback.h"#include "4JLibs\inc\4J_Input.h"#include "Font\XUI_FontRenderer.h"#include "..\Common\Minecraft_Macros.h"#include "..\..\Minecraft.Client\PlayerList.h"#include "..\..\Minecraft.Client\ServerPlayer.h"#include "..\Common\GameRules\ConsoleGameRules.h"#include "..\Common\GameRules\ConsoleSchematicFile.h"#include "..\..\Minecraft.World\InputOutputStream.h"#include "..\..\Minecraft.World\LevelSettings.h"#include "..\User.h"
#include "Sentient\SentientManager.h"#include "..\..\Minecraft.World\LevelData.h"#include "..\..\Minecraft.World\net.minecraft.world.entity.player.h"#include "..\..\Minecraft.Client\EntityRenderDispatcher.h"#include "..\..\Minecraft.World\compression.h"#include "..\TexturePackRepository.h"#include "..\TexturePack.h"#include "..\Common\DLC\DLCAudioFile.h"#include "..\DLCTexturePack.h"
#include "..\Common\XUI\XUI_Intro.h"#include "..\Common\XUI\XUI_MainMenu.h"#include "..\Common\XUI\XUI_NewUpdateMessage.h"#include "..\Common\XUI\XUI_HelpAndOptions.h"#include "..\Common\XUI\XUI_TextEntry.h"#include "..\Common\XUI\XUI_HelpHowToPlay.h" #include "..\Common\XUI\XUI_HowToPlayMenu.h"#include "..\Common\XUI\XUI_HelpControls.h"#include "..\Common\XUI\XUI_TextEntry.h"#include "..\Common\XUI\XUI_LoadSettings.h"#include "..\Common\XUI\XUI_SettingsAll.h"#include "..\Common\XUI\XUI_SettingsOptions.h"#include "..\Common\XUI\XUI_SettingsAudio.h"#include "..\Common\XUI\XUI_SettingsControl.h"#include "..\Common\XUI\XUI_SettingsGraphics.h"#include "..\Common\XUI\XUI_SettingsUI.h"#include "..\Common\XUI\XUI_Leaderboards.h"#include "..\Common\XUI\XUI_Debug.h"#include "..\Common\XUI\XUI_DebugTips.h"#include "..\Common\XUI\XUI_Reinstall.h"#include "..\Common\XUI\XUI_Death.h"#include "..\Common\XUI\XUI_DebugOverlay.h"#include "..\Common\XUI\XUI_DLCOffers.h"#include "..\Common\XUI\XUI_SocialPost.h"#include "..\Common\XUI\XUI_Scene_Container.h"#include "..\Common\XUI\XUI_Scene_Furnace.h"#include "..\Common\XUI\XUI_Scene_Inventory.h"#include "..\Common\XUI\XUI_Scene_Trap.h"#include "..\Common\XUI\XUI_Control_ComboBox.h"#include "..\Common\XUI\XUI_MultiGameInfo.h"#include "..\Common\XUI\XUI_MultiGameJoinLoad.h"#include "..\Common\XUI\XUI_MultiGameCreate.h"#include "..\Common\XUI\XUI_MultiGameLaunchMoreOptions.h"#include "..\Common\XUI\XUI_SignEntry.h"#include "..\Common\XUI\XUI_InGameInfo.h"#include "..\Common\XUI\XUI_TrialExitUpsell.h"#include "..\Common\XUI\XUI_BasePlayer.h"#include "..\Common\XUI\XUI_PartnernetPassword.h"#include "..\Common\XUI\XUI_SaveMessage.h"#include "..\Common\XUI\XUI_Chat.h"#include "..\Common\XUI\XUI_SkinSelect.h"#include "..\Common\XUI\XUI_InGameHostOptions.h"#include "..\Common\XUI\XUI_InGamePlayerOptions.h"#include "..\Common\XUI\XUI_Scene_Enchant.h"#include "..\Common\XUI\XUI_Scene_BrewingStand.h"#include "..\Common\XUI\XUI_XZP_Icons.h"#include "..\Common\XUI\XUI_Controls.h"#include "..\Common\XUI\XUI_Scene_Win.h"#include "..\Common\XUI\XUI_HUD.h"#include "..\Common\XUI\XUI_Scene_Anvil.h"#include "..\Common\XUI\XUI_Scene_Trading.h"#include "..\Common\XUI\XUI_Teleport.h"
#ifdef _DEBUG_MENUS_ENABLED#include "..\Common\XUI\XUI_DebugItemEditor.h"#endif#ifndef _CONTENT_PACKAGE#include "..\Common\XUI\XUI_DebugSchematicCreator.h"#endif
#include "Xbox_App.h"
CConsoleMinecraftApp app;
LPCWSTR apwstrLocale[10] ={ L"", // the default locale L"", // English L"ja-JP", // Japanese L"de-DE", // German L"fr-FR", // French L"es-ES", // Spanish L"it-IT", // Italian L"ko-KR", // Korean L"zh-CHT",// Traditional Chinese L"pt-PT" // Portuguese};
WCHAR *CConsoleMinecraftApp::wchTypefaceA[]={ L"Mojangles", L"SDBookM", L"DFGMaruGothic-Md", L"DFHeiMedium-B5",};
WCHAR *CConsoleMinecraftApp::wchTypefaceLocatorA[]={ L"media/font/Mojangles.ttf", L"media/font/KOR/BOKMSD.ttf", L"media/font/JPN/DFGMaruGothic-Md.ttf", L"media/font/CHT/DFHeiMedium-B5.ttf",};
WCHAR *CConsoleMinecraftApp::wchSceneA[]={ L"xuiscene_partnernetpassword", L"xuiscene_intro", L"xuiscene_savemessage", L"xuiscene_main", L"xuiscene_fullscreenprogress", L"xuiscene_pause", L"xuiscene_craftingpanel_2x2", L"xuiscene_craftingpanel_3x3", L"xuiscene_furnace", L"xuiscene_container", L"xuiscene_container_large", L"xuiscene_inventory", L"xuiscene_trap", L"xuiscene_debug", L"xuiScene_DebugTips", L"xuiscene_helpandoptions", L"xuiscene_howtoplay", L"xuiscene_howtoplay_menu", L"xuiscene_controls", L"xuiscene_settings_options", L"xuiscene_settings_audio", L"xuiscene_settings_control", L"xuiscene_settings_graphics", L"xuiscene_settings_UI", L"xuiscene_settings_all", L"xuiscene_leaderboards", L"xuiscene_credits", L"xuiscene_death", L"xuiscene_tutorialpopup", L"xuiscene_multi_create", L"xuiscene_multi_joinload", L"xuiscene_multi_gameinfo", L"xuiscene_signentry", L"xuiscene_ingameinfo", L"xuiscene_connectingprogress", L"xuiscene_DLCOffers", L"xuiscene_socialpost", L"xuiscene_trialexitupsell", L"xuiscene_load_settings", L"xuiscene_chat", L"xuiscene_reinstall", L"xuiscene_skinselect", L"xuiscene_text_entry", L"xuiscene_ingame_host_options", L"xuiscene_ingame_player_options", L"xuiscene_inventory_creative", L"xuiscene_multi_launch_more_options",
L"xuiscene_DLCMain", L"xuiscene_NewUpdateMessage", L"xuiscene_enchant", L"xuiscene_brewingstand", L"xuiscene_win", L"xuiscene_hud", L"xuiscene_trading", L"xuiscene_anvil", L"xuiscene_teleportmenu",// L"xuiscene_TransferToXboxOne",
#ifdef _DEBUG_MENUS_ENABLED L"xuiscene_debugoverlay", L"xuiscene_debug_item_editor",#endif#ifndef _CONTENT_PACKAGE L"xuiscene_debug_schematic_create", L"xuiscene_debug_set_camera",#endif};
CConsoleMinecraftApp::CConsoleMinecraftApp() : CMinecraftApp(){ ZeroMemory(m_PreviewBuffer,sizeof(XSOCIAL_PREVIEWIMAGE)*XUSER_MAX_COUNT); m_bTMSPP_GlobalFileListRead=false; m_bRead_TMS_XUIDS_XML=false; m_bRead_TMS_Config_XML=false; m_bRead_TMS_DLCINFO_XML=false; m_pXuidsFileBuffer=NULL; m_dwXuidsFileSize=0; ZeroMemory(m_ScreenshotBuffer,sizeof(LPD3DXBUFFER)*XUSER_MAX_COUNT); m_ThumbnailBuffer=NULL;#ifdef _DEBUG_MENUS_ENABLED debugOverlayCreated = false;#endif
for(int i=0;i<XUSER_MAX_COUNT;i++) { m_iCountDown[i]=0; m_bMenuToBeClosed[i]=false; m_bMenuDisplayed[i]=false; m_bPauseMenuDisplayed[i] = false; m_bContainerMenuDisplayed[i]=false; m_bIgnoreAutosaveMenuDisplayed[i]=false; m_bIgnorePlayerJoinMenuDisplayed[i]=false; m_hCurrentScene[i]=NULL; m_hFirstScene[i]=NULL; }
m_titleDeploymentType = XTITLE_DEPLOYMENT_DOWNLOAD; DWORD dwResult = XTitleGetDeploymentType(&m_titleDeploymentType, NULL); if( dwResult == ERROR_SUCCESS ) { switch( m_titleDeploymentType ) { case XTITLE_DEPLOYMENT_OPTICAL_DISC: DebugPrintf("Deployment type is: Disc\n"); // Disc-based title. break; case XTITLE_DEPLOYMENT_INSTALLED_TO_HDD: DebugPrintf("Deployment type is: Installed to HDD\n"); // Disc-based title has been installed to the hard drive. break; case XTITLE_DEPLOYMENT_DOWNLOAD: DebugPrintf("Deployment type is: Download\n"); // Title is deployed as a downloadable title. break; case XTITLE_DEPLOYMENT_OTHER: // Drop through. default: DebugPrintf("Deployment type is: Other/Default\n"); // Unknown deployment type. } }
}
void CConsoleMinecraftApp::SetRichPresenceContext(int iPad, int contextId){ ProfileManager.SetRichPresenceContextValue(iPad,CONTEXT_GAME_STATE,contextId);}
//--------------------------------------------------------------------------------------// Name: RegisterXuiClasses()// Desc: Registers all the scene classes.//--------------------------------------------------------------------------------------HRESULT CConsoleMinecraftApp::RegisterXuiClasses(){ // Register any other classes necessary for the app/scene HRESULT hr;
#ifdef _CONTENT_PACKAGE#ifndef _FINAL_BUILD hr= CScene_PartnernetPassword::Register(); if( FAILED( hr ) ) return hr;#endif#endif
hr = CXuiSceneInventoryCreative::Register(); if( FAILED( hr ) ) return hr;
hr = CScene_NewUpdateMessage::Register(); if( FAILED( hr ) ) return hr;
#ifdef _DEBUG_MENUS_ENABLED hr = CScene_DebugItemEditor::Register(); if( FAILED( hr ) ) return hr; hr = CScene_DebugTips::Register(); if( FAILED( hr ) ) return hr; hr = CScene_DebugOverlay::Register(); if( FAILED( hr ) ) return hr;#endif#ifndef _CONTENT_PACKAGE hr = CScene_DebugSchematicCreator::Register(); if( FAILED( hr ) ) return hr; hr = CScene_DebugSetCamera::Register(); if( FAILED( hr) ) return hr;#endif
hr = CScene_Reinstall::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SaveMessage::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Intro::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Main::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Debug::Register(); if( FAILED( hr ) ) return hr; hr = CScene_HelpAndOptions::Register(); if( FAILED( hr ) ) return hr; hr = CScene_HowToPlay::Register(); if( FAILED( hr ) ) return hr; hr = CScene_HowToPlayMenu::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Controls::Register(); if( FAILED( hr ) ) return hr;
// Settings scenes hr = CScene_SettingsAll::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SettingsOptions::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SettingsAudio::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SettingsControl::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SettingsGraphics::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SettingsUI::Register(); if( FAILED( hr ) ) return hr;
hr = CScene_Leaderboards::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Credits::Register(); if( FAILED( hr ) ) return hr; hr = UIScene_PauseMenu::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneCraftingPanel::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneBase::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlBurnProgress::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlFireProgress::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlSlotItem::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlSlotList::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlSlotItemListItem::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneContainer::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneFurnace::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneInventory::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneTrap::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrl4JEdit::Register(); if( FAILED( hr ) ) return hr; hr = CScene_FullscreenProgress::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlLoadingProgress::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlMinecraftSlot::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlMinecraftPlayer::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Death::Register(); if( FAILED( hr ) ) return hr; hr = CScene_TutorialPopup::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrl4JList::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlCraftIngredientSlot::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlSliderWrapper::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlPassThroughList::Register(); if( FAILED( hr ) ) return hr; hr = CScene_MultiGameCreate::Register(); if( FAILED( hr ) ) return hr; hr = CScene_MultiGameLaunchMoreOptions::Register(); if( FAILED( hr ) ) return hr; hr = CScene_MultiGameJoinLoad::Register(); if( FAILED( hr ) ) return hr; hr = CScene_MultiGameInfo::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SignEntry::Register(); if( FAILED( hr ) ) return hr; hr = CScene_InGameInfo::Register(); if( FAILED( hr ) ) return hr; hr = CScene_ConnectingProgress::Register(); if( FAILED( hr ) ) return hr; hr = CXuiSceneBasePlayer::Register(); if( FAILED( hr ) ) return hr; hr = CScene_DLCOffers::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SocialPost::Register(); if( FAILED( hr ) ) return hr; hr = CScene_TrialExitUpsell::Register(); if( FAILED( hr ) ) return hr; hr = CScene_LoadGameSettings::Register(); if( FAILED( hr ) ) return hr; hr = CScene_Chat::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlSplashPulser::Register(); if( FAILED( hr ) ) return hr; hr = CScene_SkinSelect::Register(); if( FAILED( hr ) ) return hr; hr = CXuiCtrlMinecraftSkinPreview::Register(); if( FAILED( hr ) ) return hr; hr = CScene_TextEntry::Register(); if( FAILED( hr ) ) return hr; hr = CScene_InGameHostOptions::Register(); if( FAILED( hr ) ) return hr; hr = CScene_InGamePlayerOptions::Register(); if( FAILED( hr ) ) return hr; hr = CScene_DLCMain::Register(); if( FAILED( hr) ) return hr; hr = CXuiSceneEnchant::Register(); if( FAILED( hr) ) return hr; hr = CXuiCtrlEnchantmentBook::Register(); if( FAILED( hr) ) return hr; hr = CXuiCtrlEnchantmentButton::Register(); if( FAILED( hr) ) return hr; hr = CXuiSceneBrewingStand::Register(); if( FAILED( hr) ) return hr; hr = CXuiCtrlBrewProgress::Register(); if( FAILED( hr) ) return hr; hr = CXuiCtrlBubblesProgress::Register(); if( FAILED( hr) ) return hr; hr = CXuiCtrlEnchantmentButtonText::Register(); if( FAILED( hr) ) return hr; hr = CXuiCtrlMobEffect::Register(); if( FAILED( hr) ) return hr; hr = CScene_Win::Register(); if( FAILED( hr) ) return hr; hr = CXuiSceneHud::Register(); if( FAILED( hr) ) return hr; hr = CXuiSceneAnvil::Register(); if( FAILED( hr) ) return hr; hr = CXuiSceneTrading::Register(); if( FAILED( hr) ) return hr; hr = CScene_Teleport::Register(); if( FAILED( hr) ) return hr;
hr = CXuiCtrl4JIcon::Register(); if( FAILED( hr ) ) return hr; hr = XuiHtmlRegister(); if( FAILED( hr ) ) return hr;
// hr = CScene_TransferToXboxOne::Register(); if( FAILED( hr ) ) return hr;
return S_OK;}
//--------------------------------------------------------------------------------------// Name: UnregisterXuiClasses()// Desc: Unregisters all the scene classes.//--------------------------------------------------------------------------------------HRESULT CConsoleMinecraftApp::UnregisterXuiClasses(){ XuiHtmlUnregister();
CScene_TextEntry::Unregister();
#ifndef _CONTENT_PACKAGE CScene_DebugSchematicCreator::Unregister(); CScene_DebugSetCamera::Unregister();#endif#ifdef _DEBUG_MENUS_ENABLED CScene_DebugItemEditor::Unregister(); CScene_DebugTips::Unregister(); CScene_DebugOverlay::Unregister();#endif CScene_Teleport::Unregister(); CXuiSceneTrading::Unregister(); CXuiSceneAnvil::Unregister();// CScene_TransferToXboxOne::Unregister(); CXuiSceneHud::Unregister(); CScene_Win::Unregister(); CXuiCtrlMobEffect::Unregister(); CXuiCtrlEnchantmentButtonText::Unregister(); CXuiCtrlBubblesProgress::Unregister(); CXuiCtrlBrewProgress::Unregister(); CXuiSceneBrewingStand::Unregister(); CXuiCtrlEnchantmentButton::Unregister(); CXuiCtrlEnchantmentBook::Unregister(); CXuiSceneEnchant::Unregister(); CScene_InGamePlayerOptions::Unregister(); CScene_InGameHostOptions::Unregister(); CXuiCtrl4JIcon::Unregister(); CXuiCtrlMinecraftSkinPreview::Unregister(); CScene_SkinSelect::Unregister(); CXuiCtrlSplashPulser::Unregister(); CScene_Chat::Unregister(); CScene_LoadGameSettings::Unregister(); CScene_TrialExitUpsell::Unregister(); CScene_SocialPost::Unregister(); CScene_DLCOffers::Unregister(); CXuiSceneBasePlayer::Unregister(); CScene_ConnectingProgress::Unregister(); CScene_InGameInfo::Unregister(); CScene_SignEntry::Unregister(); CScene_MultiGameInfo::Unregister(); CScene_MultiGameJoinLoad::Unregister(); CScene_MultiGameLaunchMoreOptions::Unregister(); CScene_MultiGameCreate::Unregister(); CXuiCtrlPassThroughList::Unregister(); CXuiCtrlSliderWrapper::Unregister(); CXuiCtrlCraftIngredientSlot::Unregister(); CXuiCtrl4JList::Unregister(); CScene_TutorialPopup::Unregister(); CScene_Death::Unregister(); CXuiCtrlMinecraftPlayer::Unregister(); CXuiCtrlMinecraftSlot::Unregister(); CXuiCtrlLoadingProgress::Unregister(); CScene_FullscreenProgress::Unregister(); CXuiCtrl4JEdit::Unregister(); CXuiCtrlBurnProgress::Unregister(); CXuiCtrlFireProgress::Unregister(); CXuiCtrlSlotItem::Unregister(); CXuiCtrlSlotList::Unregister(); CXuiCtrlSlotItemListItem::Unregister(); CXuiSceneContainer::Unregister(); CXuiSceneFurnace::Unregister(); CXuiSceneInventory::Unregister(); CXuiSceneTrap::Unregister(); CXuiSceneBase::Unregister(); CXuiSceneCraftingPanel::Unregister(); UIScene_PauseMenu::Unregister(); CScene_Credits::Unregister(); CScene_Leaderboards::Unregister(); CScene_Controls::Unregister(); CScene_HowToPlay::Unregister(); CScene_HowToPlayMenu::Unregister(); CScene_HelpAndOptions::Unregister(); CScene_Main::Unregister(); CScene_Debug::Unregister(); CScene_Intro::Unregister(); CScene_SaveMessage::Unregister(); CScene_Reinstall::Unregister(); CScene_DLCMain::Unregister();
CScene_SettingsAll::Unregister(); CScene_SettingsOptions::Unregister(); CScene_SettingsAudio::Unregister(); CScene_SettingsControl::Unregister(); CScene_SettingsGraphics::Unregister(); CScene_SettingsUI::Unregister();
CScene_NewUpdateMessage::Unregister();
#ifdef _CONTENT_PACKAGE#ifndef _FINAL_BUILD CScene_PartnernetPassword::Unregister();#endif#endif
return S_OK;}
void CConsoleMinecraftApp::GetPreviewImage(int iPad,XSOCIAL_PREVIEWIMAGE *preview){ preview->Pitch = m_PreviewBuffer[iPad].Pitch; preview->Width = m_PreviewBuffer[iPad].Width; preview->Height = m_PreviewBuffer[iPad].Height; preview->Format = m_PreviewBuffer[iPad].Format; unsigned int sizeBytes = XGAddress2DTiledExtent(m_PreviewBuffer[iPad].Width, m_PreviewBuffer[iPad].Height, 4) * 4; preview->pBytes = (BYTE *)XPhysicalAlloc(sizeBytes, MAXULONG_PTR, 0, PAGE_READWRITE | PAGE_WRITECOMBINE ); memcpy( (void *)preview->pBytes, (void *)m_PreviewBuffer[iPad].pBytes, sizeBytes ); XPhysicalFree((LPVOID)m_PreviewBuffer[iPad].pBytes); m_PreviewBuffer[iPad].pBytes = NULL;}
void CConsoleMinecraftApp::CaptureScreenshot(int iPad){ RenderManager.CaptureScreen(&m_ScreenshotBuffer[iPad], &m_PreviewBuffer[iPad]);}
HRESULT CConsoleMinecraftApp::LoadXuiResources(){ m_fontRenderer = new XUI_FontRenderer();
OverrideFontRenderer(true);
const DWORD LOCATOR_SIZE = 256; // Use this to allocate space to hold a ResourceLocator string WCHAR szResourceLocator[ LOCATOR_SIZE ]; HRESULT hr;
// load from the .xzp file const ULONG_PTR c_ModuleHandle = (ULONG_PTR)GetModuleHandle(NULL);
//#ifdef _CONTENT_PACKAGE // Get the current language setting from the console DWORD dwLanguage = XGetLanguage( );
// if( dwLanguage>=sizeof( apwstrLocale )/sizeof( apwstrLocale[0] ) )// {// // Use default locale if out of bounds// dwLanguage = 0;// } // force default to English for now //dwLanguage=1; // Tell XUI what the locale is
// 4J-PB - we need to load all fonts in an order, and set them as fallbacks of each other - if you save a game in an Asian language, you must be able to switch to English, and still see the Asian characters in the save name
switch(dwLanguage) {
case XC_LANGUAGE_KOREAN: //fallback to Japanese, Chinese RegisterFont(eFont_Chinese,eFont_None); RegisterFont(eFont_Japanese,eFont_Chinese); RegisterFont(eFont_Korean,eFont_Japanese,true); XuiSetLocale( L"ko-KR" ); break; case XC_LANGUAGE_JAPANESE: //fallback to Korean, Chinese RegisterFont(eFont_Chinese,eFont_None); RegisterFont(eFont_Korean,eFont_Chinese); RegisterFont(eFont_Japanese,eFont_Korean,true); XuiSetLocale( L"ja-JP" ); break; case XC_LANGUAGE_TCHINESE: //fallback to Korean, Japanese RegisterFont(eFont_Japanese,eFont_None); RegisterFont(eFont_Korean,eFont_Japanese); RegisterFont(eFont_Chinese,eFont_Korean,true); XuiSetLocale( L"zh-CHT" ); break;
default: //fallback to Korean,Japanese, Chinese RegisterFont(eFont_Chinese,eFont_None); RegisterFont(eFont_Japanese,eFont_Chinese); RegisterFont(eFont_Korean,eFont_Japanese); RegisterFont(eFont_European,eFont_Korean,true);
// some locales can override the language setting bool bOverrideLanguage=true;
// 4J-PB - removing all the new languages until a future TU
switch(XGetLocale()) {#ifdef NEW_LANGUAGES case XC_LOCALE_CZECH_REPUBLIC: XuiSetLocale( L"cs-CZ" ); break; case XC_LOCALE_DENMARK: XuiSetLocale( L"da-DK" ); break; case XC_LOCALE_FINLAND: XuiSetLocale( L"fi-FI" ); break; case XC_LOCALE_GREECE: XuiSetLocale( L"el-GR" ); break; case XC_LOCALE_SLOVAK_REPUBLIC: XuiSetLocale( L"sk-SK" ); break;#endif default: bOverrideLanguage=false; break; }
if(bOverrideLanguage==false) { switch(dwLanguage) { case XC_LANGUAGE_ENGLISH: switch(XGetLocale()) {#ifdef NEW_LANGUAGES case XC_LOCALE_AUSTRALIA: case XC_LOCALE_CANADA: case XC_LOCALE_CZECH_REPUBLIC: case XC_LOCALE_GREECE: case XC_LOCALE_HONG_KONG: case XC_LOCALE_HUNGARY: case XC_LOCALE_INDIA: case XC_LOCALE_IRELAND: case XC_LOCALE_ISRAEL: case XC_LOCALE_NEW_ZEALAND: case XC_LOCALE_SAUDI_ARABIA: case XC_LOCALE_SINGAPORE: case XC_LOCALE_SLOVAK_REPUBLIC: case XC_LOCALE_SOUTH_AFRICA: case XC_LOCALE_UNITED_ARAB_EMIRATES: case XC_LOCALE_GREAT_BRITAIN: XuiSetLocale( L"en-GB" ); break;#endif default: XuiSetLocale( L"" ); break; } break; case XC_LANGUAGE_PORTUGUESE: if(XGetLocale()==XC_LOCALE_BRAZIL) { // Brazilian Portuguese XuiSetLocale( L"pt-BR" ); } else { XuiSetLocale( L"pt-PT" ); } break; case XC_LANGUAGE_GERMAN: XuiSetLocale( L"de-DE" ); break; case XC_LANGUAGE_FRENCH: XuiSetLocale( L"fr-FR" ); break; case XC_LANGUAGE_SPANISH: switch(XGetLocale()) {#ifdef NEW_LANGUAGES case XC_LOCALE_ARGENTINA: case XC_LOCALE_CHILE: case XC_LOCALE_COLOMBIA: case XC_LOCALE_MEXICO: case XC_LOCALE_UNITED_STATES: XuiSetLocale( L"es-MX" ); break;#endif default: XuiSetLocale( L"es-ES" ); break; } break; case XC_LANGUAGE_ITALIAN: XuiSetLocale( L"it-IT" ); break;#ifdef NEW_LANGUAGES case XC_LANGUAGE_POLISH: XuiSetLocale( L"pl-PL" ); break; case XC_LANGUAGE_RUSSIAN: XuiSetLocale( L"ru-RU" ); break; case XC_LANGUAGE_SWEDISH: XuiSetLocale( L"sv-SE" ); break; case XC_LANGUAGE_TURKISH: XuiSetLocale( L"tr-TR" ); break; case XC_LANGUAGE_BNORWEGIAN: XuiSetLocale( L"nb-NO" ); break; case XC_LANGUAGE_DUTCH: // 4J-PB - the loc people gave us nl-BE but no nl-NL. They claim they are identical, so use nl-BE. //if(XGetLocale()==XC_LOCALE_BELGIUM) { // Belgian Dutch XuiSetLocale( L"nl-BE" ); }// else// {// XuiSetLocale( L"nl-NL" );// } break; case XC_LANGUAGE_SCHINESE: // fall back to English until we have a font, and Microsoft are happy with the Chinese Simplified text //XuiSetLocale( L"zh-CHS" ); XuiSetLocale( L"" ); break;#endif } } }
//#endif
XuiSoundXACTRegister(); XuiSoundXAudioRegister();
// Register a default typeface // wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/font/Mojangles.ttf"); // hr = RegisterDefaultTypeface( L"Mojangles",szResourceLocator);
// Load the skin file used for the scene. wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/skin_Minecraft.xur"); hr=LoadSkin( szResourceLocator ); if( FAILED(hr) ) app.FatalLoadError();
// Storage strings wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/4J_strings.xus"); hr=StorageManager.m_pStringTable->Load( szResourceLocator ); if( FAILED(hr) ) app.FatalLoadError();
wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/strings.xus"); hr=StringTable.Load( szResourceLocator ); if( FAILED(hr) ) app.FatalLoadError();
// #ifdef _DEBUG // // dump out the text // int iStringC=0; // LPCWSTR lpTempString; // // while((lpTempString=StringTable.Lookup(iStringC))!=NULL) // { // DebugPrintf("STRING %d = ",iStringC); // OutputDebugStringW(lpTempString); // DebugPrintf("\n"); // iStringC++; // } // #endif
// Load the xui scenes
// 4J Stu - Add the tooltip/container scene to the root object // Load the scene. ASSERT(m_hObjRoot); HXUIOBJ mainBaseScene; wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/"); if(RenderManager.IsHiDef()) { hr=LoadFirstScene( szResourceLocator, L"xuiscene_base.xur", NULL, &mainBaseScene ); } else { if(RenderManager.IsWidescreen()) { hr=LoadFirstScene( szResourceLocator, L"xuiscene_base.xur", NULL, &mainBaseScene ); } else { hr=LoadFirstScene( szResourceLocator, L"xuiscene_base_480.xur", NULL, &mainBaseScene ); } } if( FAILED(hr) ) app.FatalLoadError();
XuiElementGetChildById( mainBaseScene, L"BasePlayer0", &m_PlayerBaseScene[0] ); XuiElementGetChildById( mainBaseScene, L"BasePlayer1", &m_PlayerBaseScene[1] ); XuiElementGetChildById( mainBaseScene, L"BasePlayer2", &m_PlayerBaseScene[2] ); XuiElementGetChildById( mainBaseScene, L"BasePlayer3", &m_PlayerBaseScene[3] );
for(unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) { XuiElementGetChildById( m_PlayerBaseScene[idx], L"XuiSceneContainer", &m_hCurrentScene[idx]); m_hFirstScene[idx]=m_hCurrentScene[idx];
XuiElementGetChildById( m_PlayerBaseScene[idx], L"XuiSceneTutorialContainer", &m_hCurrentTutorialScene[idx]); m_hFirstTutorialScene[idx]=m_hCurrentTutorialScene[idx];
XuiElementGetChildById( m_PlayerBaseScene[idx], L"XuiSceneChatRoot", &m_hCurrentChatScene[idx]); m_hFirstChatScene[idx]=m_hCurrentChatScene[idx];
WCHAR szResourceLocator[ LOCATOR_SIZE ]; wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/"); HXUIOBJ hScene; HRESULT hr = XuiSceneCreate(szResourceLocator,app.GetSceneName(eUIComponent_Chat, true,false), &idx, &hScene); if( FAILED(hr) ) app.FatalLoadError();
hr = XuiSceneNavigateForward(m_hCurrentChatScene[idx], FALSE, hScene, idx); if (FAILED(hr)) { app.DebugPrintf("chat scene navigate fail"); XuiDestroyObject(hScene); return hr; }
m_hCurrentChatScene[idx]=hScene;
XuiElementGetChildById( m_PlayerBaseScene[idx], L"XuiSceneHudRoot", &m_hCurrentHudScene[idx]); m_hFirstHudScene[idx]=m_hCurrentHudScene[idx];
ReloadHudScene(idx, false, true); }
// get the "Press START to join in" message HXUIOBJ hPressStartMessage;
XuiElementGetChildById( mainBaseScene, L"XuiPressStartMessage", &hPressStartMessage ); // set the text XuiControlSetText(hPressStartMessage, GetString(IDS_PRESS_START_TO_JOIN));
HXUIOBJ debugContainerObj; XuiElementGetChildById( mainBaseScene, L"XuiSceneDebugContainer", &debugContainerObj ); debugContainerScene.Attach( debugContainerObj );
SetResourcesLoaded(true);
return S_OK;
}
HRESULT CConsoleMinecraftApp::RegisterFont(eFont eFontLanguage,eFont eFontFallback, bool bSetAsDefault){ HRESULT hr=S_OK; const DWORD LOCATOR_SIZE = 256; // Use this to allocate space to hold a ResourceLocator string WCHAR szResourceLocator[ LOCATOR_SIZE ]; const ULONG_PTR c_ModuleHandle = (ULONG_PTR)GetModuleHandle(NULL);
wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", wchTypefaceLocatorA[eFontLanguage]); // 4J Stu - Check that the font file actually exists HXUIRESOURCE fontTempResource; BOOL isMemoryResource; hr = XuiResourceOpenNoLoc(szResourceLocator, &fontTempResource, &isMemoryResource); if( FAILED(hr) ) app.FatalLoadError(); XuiResourceClose(fontTempResource);
if(bSetAsDefault) { if(eFontFallback!=eFont_None) { hr = RegisterDefaultTypeface( wchTypefaceA[eFontLanguage],szResourceLocator,NULL,0.0f,wchTypefaceA[eFontFallback]); } else { hr = RegisterDefaultTypeface( wchTypefaceA[eFontLanguage],szResourceLocator); } } else { TypefaceDescriptor typefaceDescriptorStruct; ZeroMemory(&typefaceDescriptorStruct,sizeof(TypefaceDescriptor)); typefaceDescriptorStruct.szTypeface=wchTypefaceA[eFontLanguage]; typefaceDescriptorStruct.szLocator=szResourceLocator; if(eFontFallback!=eFont_None) { typefaceDescriptorStruct.szFallbackTypeface= wchTypefaceA[eFontFallback]; } hr = XuiRegisterTypeface(&typefaceDescriptorStruct,FALSE); } return hr;}
// TMS++
void CConsoleMinecraftApp::TMSPP_SetTitleGroupID(LPCSTR szTitleGroupID){ StorageManager.TMSPP_SetTitleGroupID(szTitleGroupID);}
void CConsoleMinecraftApp::TMSPP_RetrieveFileList(int iPad,C4JStorage::eGlobalStorage eStorageFacility,CHAR *szPath,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_RetrieveFileList\n");
if(eStorageFacility==C4JStorage::eGlobalStorage_Title) { if(m_bTMSPP_GlobalFileListRead==false) { m_bTMSPP_GlobalFileListRead=true; StorageManager.TMSPP_ReadFileList(iPad,eStorageFacility,szPath,&CConsoleMinecraftApp::Callback_TMSPPReadFileList,this,NextAction); } else { SetTMSAction(iPad,NextAction); } } else { StorageManager.TMSPP_ReadFileList(iPad,eStorageFacility,szPath,&CConsoleMinecraftApp::Callback_TMSPPReadFileList,this,NextAction); }
}
int CConsoleMinecraftApp::Callback_TMSPPReadFileList(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILE_LIST pTmsFileList){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadFileList\n"); CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
#ifdef _DEBUG // dump out the file list app.DebugPrintf("TMSPP filecount - %d\n",pTmsFileList->iCount); for(int i=0;i<pTmsFileList->iCount;i++) { app.DebugPrintf("TMSPP - %s\n",pTmsFileList->FileDetailsA[i].szFilename); }#endif // change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData); return 0;}
void CConsoleMinecraftApp::TMSPP_ReadXuidsFile(int iPad,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_ReadXuidsFile\n"); C4JStorage::ETMSStatus eResult; // try reading the xuids.xml file (from TMS global) - only allowed to do this once an hour at the most, but we'll just read once each time the game launches
if(m_bRead_TMS_XUIDS_XML==false) { m_bRead_TMS_XUIDS_XML=true;
eResult=StorageManager.TMSPP_ReadFile(iPad,C4JStorage::eGlobalStorage_Title,C4JStorage::TMS_FILETYPE_BINARY,"xuids.xml",&CConsoleMinecraftApp::Callback_TMSPPReadXuidsFile,this,NextAction);
if(eResult!=C4JStorage::ETMSStatus_ReadInProgress) { // something went wrong app.SetTMSAction(iPad,(eTMSAction)NextAction); } } else { app.SetTMSAction(iPad,(eTMSAction)NextAction); }}
int CConsoleMinecraftApp::Callback_TMSPPReadXuidsFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData, LPCSTR szFilename){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadXuidsFile\n"); CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam; if(pFileData) { ATG::XMLParser xmlParser; xmlMojangCallback xmlCallback;
xmlParser.RegisterSAXCallbackInterface( &xmlCallback ); xmlParser.ParseXMLBuffer((CHAR *)pFileData->pbData,pFileData->dwSize); delete [] pFileData->pbData; delete [] pFileData; }
// change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData);
return 0;}
void CConsoleMinecraftApp::TMSPP_ReadConfigFile(int iPad,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_ReadConfigFile\n"); C4JStorage::ETMSStatus eResult; // try reading the xuids.xml file (from TMS global) - only allowed to do this once an hour at the most, but we'll just read once each time the game launches
if(m_bRead_TMS_Config_XML==false) { m_bRead_TMS_Config_XML=true;
eResult=StorageManager.TMSPP_ReadFile(iPad,C4JStorage::eGlobalStorage_Title,C4JStorage::TMS_FILETYPE_BINARY,"Config.xml",&CConsoleMinecraftApp::Callback_TMSPPReadConfigFile,this,NextAction);
if(eResult!=C4JStorage::ETMSStatus_ReadInProgress) { // something went wrong - probably no Config.xml file exists in TMS++ app.SetTMSAction(iPad,(eTMSAction)NextAction); } } else { app.SetTMSAction(iPad,(eTMSAction)NextAction); }}
int CConsoleMinecraftApp::Callback_TMSPPReadConfigFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData, LPCSTR szFilename){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadConfigFile\n"); CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam; if(pFileData) { ATG::XMLParser xmlParser; xmlConfigCallback xmlCallback;
xmlParser.RegisterSAXCallbackInterface( &xmlCallback ); xmlParser.ParseXMLBuffer((CHAR *)pFileData->pbData,pFileData->dwSize); delete [] pFileData->pbData; delete [] pFileData; }
// change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData);
return 0;}
bool CConsoleMinecraftApp::TMSPP_ReadBannedList(int iPad,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_ReadBannedList\n"); C4JStorage::ETMSStatus eResult; bool bSendBanFileRetrievedMsg=false;
if(GetBanListRead(iPad)==false) { // do we have one in our user filelist? if(StorageManager.TMSPP_InFileList(C4JStorage::eGlobalStorage_TitleUser,iPad,L"BannedList")) { SetBanListRead(iPad,true); ClearBanList(iPad);
eResult=StorageManager.TMSPP_ReadFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::TMS_FILETYPE_BINARY,"BannedList",&CConsoleMinecraftApp::Callback_TMSPPReadBannedList,this,NextAction); if(eResult!=C4JStorage::ETMSStatus_ReadInProgress) { // something went wrong app.SetTMSAction(iPad,(eTMSAction)NextAction); bSendBanFileRetrievedMsg=true; } } else { // not in the list - we'll need to fall back to TMS return false; }
} else { bSendBanFileRetrievedMsg=true; }
if(bSendBanFileRetrievedMsg) { ui.HandleTMSBanFileRetrieved(iPad); }
app.SetTMSAction(iPad,(eTMSAction)NextAction);
return true;}
int CConsoleMinecraftApp::Callback_TMSPPReadBannedList(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadBannedList\n"); CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
if(pFileData) {
// put the entries into the vector int iEntries=pFileData->dwSize/sizeof(BANNEDLISTDATA); PBANNEDLISTDATA pData=(PBANNEDLISTDATA)pFileData->pbData;
for(int i=0;i<iEntries;i++) { pClass->AddLevelToBannedLevelList(iPad,pData[i].xuid,pData[i].pszLevelName, false); } // mark the level as not checked against banned levels - it'll be checked once the level starts app.SetBanListCheck(iPad,false);
delete [] pFileData->pbData; delete [] pFileData; } ui.HandleTMSBanFileRetrieved(iPad); // change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData);
return 0;}
void CConsoleMinecraftApp::TMSPP_ReadDLCFile(int iPad,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_ReadDLCFile\n"); bool bRetrievedDLCFile=false; // try reading the DLC.xml file (from TMS global) - only allowed to do this once an hour at the most, but we'll just read once each time the game launches C4JStorage::ETMSStatus eResult; if(m_bRead_TMS_DLCINFO_XML==false) { //m_bRead_TMS_DLCINFO_XML=true;
eResult=StorageManager.TMSPP_ReadFile(iPad,C4JStorage::eGlobalStorage_Title,C4JStorage::TMS_FILETYPE_BINARY,"DLC.cmp",&CConsoleMinecraftApp::Callback_TMSPPReadDLCFile,this,NextAction); if(eResult!=C4JStorage::ETMSStatus_ReadInProgress) { // something went wrong app.SetTMSAction(iPad,(eTMSAction)NextAction); bRetrievedDLCFile=true; } } else { bRetrievedDLCFile=true; }
if(bRetrievedDLCFile) { ui.HandleTMSDLCFileRetrieved(iPad);
app.SetTMSAction(iPad,(eTMSAction)NextAction); }}
int CConsoleMinecraftApp::Callback_TMSPPReadDLCFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadDLCFile\n"); CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
if(pFileData && pFileData->dwSize>0) { // the DLC.xml file is now compressed
unsigned int uiDecompSize=*(unsigned int *)pFileData->pbData; unsigned int uiCompSize=((unsigned int *)pFileData->pbData)[1];
BYTE *pDecompressedData = new BYTE [uiDecompSize];
Compression::getCompression()->Decompress(pDecompressedData,&uiDecompSize,&((unsigned int *)pFileData->pbData)[2],uiCompSize); delete [] pFileData->pbData; delete [] pFileData;
ATG::XMLParser xmlParser; xmlDLCInfoCallback xmlCallback;
xmlParser.RegisterSAXCallbackInterface( &xmlCallback ); xmlParser.ParseXMLBuffer((CHAR *)pDecompressedData,uiDecompSize);
pClass->m_bRead_TMS_DLCINFO_XML=true;
delete pDecompressedData; }
ui.HandleTMSDLCFileRetrieved(iPad); // change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData);
return 0;}
void CConsoleMinecraftApp::ReadBannedList(int iPad,eTMSAction NextAction, bool bCallback){ // try reading the banned level list file (from TMS User) - only allowed to do this once an hour at the most, but we'll just read once each time the user signs in
if(GetBanListCheck(iPad)==false) { SetBanListCheck(iPad,true); ClearBanList(iPad);
//StorageManager.DeleteTMSFile(iPad,C4JStorage::eGlobalStorage_TitleUser,L"BannedList"); C4JStorage::ETMSStatus eTMSStatus; if(bCallback) { eTMSStatus=StorageManager.ReadTMSFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::eTMS_FileType_Normal,L"BannedList",&BannedListA[iPad].pBannedList, &BannedListA[iPad].dwBytes,&CConsoleMinecraftApp::CallbackBannedListFileFromTMS,this,NextAction); } else { eTMSStatus=StorageManager.ReadTMSFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::eTMS_FileType_Normal,L"BannedList",&BannedListA[iPad].pBannedList, &BannedListA[iPad].dwBytes);
if(eTMSStatus==C4JStorage::ETMSStatus_Idle) { // put the entries into the vector int iEntries=BannedListA[iPad].dwBytes/sizeof(BANNEDLISTDATA); PBANNEDLISTDATA pData=(PBANNEDLISTDATA)BannedListA[iPad].pBannedList;
for(int i=0;i<iEntries;i++) { AddLevelToBannedLevelList(iPad,pData[i].xuid,pData[i].pszLevelName, false); } // mark the level as not checked against banned levels - it'll be checked once the level starts app.SetBanListCheck(iPad,false); } } } else { app.SetTMSAction(iPad,(eTMSAction)NextAction); // Fix for #70412 - TCR 1.00: BAS Game Stability: The title enters an unresponsive state, on the following screen, when the client attempts to start a new game after leaving a hosted game.
// if bCallback is set and we've already got the ban list (from a join in session previously), we need to send a message out to let the waiting process proceed
if(bCallback) { ui.HandleTMSBanFileRetrieved(iPad); } }}
int CConsoleMinecraftApp::CallbackBannedListFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction){ CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)lpParam;
if(pClass->BannedListA[iPad].dwBytes>0) { // put the entries into the vector int iEntries=pClass->BannedListA[iPad].dwBytes/sizeof(BANNEDLISTDATA); PBANNEDLISTDATA pData=(PBANNEDLISTDATA)pClass->BannedListA[iPad].pBannedList;
for(int i=0;i<iEntries;i++) { pClass->AddLevelToBannedLevelList(iPad,pData[i].xuid,pData[i].pszLevelName, false); }
// mark the level as not checked against banned levels - it'll be checked once the level starts app.SetBanListCheck(iPad,false);
} app.SetTMSAction(iPad,(eTMSAction)iAction); ui.HandleTMSBanFileRetrieved(iPad);
return 0;}
void CConsoleMinecraftApp::OverrideFontRenderer(bool set, bool immediate){ // 4J Stu - Only relevant to XUI on Xbox360#ifdef _XBOX // We don't want to even attempt using our font renderer in the asian languages switch(XGetLanguage()) { case XC_LANGUAGE_JAPANESE: case XC_LANGUAGE_TCHINESE: case XC_LANGUAGE_KOREAN: return; break; }
if(set != m_bFontRendererOverridden) { if( immediate ) { XuiElementDiscardResources( m_hObjRoot, XUI_DISCARD_FONTS ); if( set ) { XuiFontSetRenderer( m_fontRenderer ); } else { XuiFontSetRenderer( NULL ); } m_bFontRendererOverridden = set;
if( GetResourcesLoaded() ) { // tell the xui scenes the font renderer changed XUIMessage xuiMsg; CustomMessage_FontRendererChange( &xuiMsg);
// send the message for(int i=0;i<XUSER_MAX_COUNT;i++) { XuiBroadcastMessage( CXuiSceneBase::GetPlayerBaseScene(i), &xuiMsg ); } } }
m_bOverrideFontRenderer = set; }#endif}
void CConsoleMinecraftApp::RunFrame(){ OverrideFontRenderer( m_bOverrideFontRenderer ); // Do the actual XUI frame
CXuiModule::RunFrame();
}
void CConsoleMinecraftApp::CaptureSaveThumbnail(){ MemSect(53); RenderManager.CaptureThumbnail(&m_ThumbnailBuffer); MemSect(0);}void CConsoleMinecraftApp::GetSaveThumbnail(PBYTE *pbData,DWORD *pdwSize){ // on a save caused by a create world, the thumbnail capture won't have happened if(m_ThumbnailBuffer!=NULL) { if( pbData ) { *pbData= new BYTE [m_ThumbnailBuffer->GetBufferSize()]; *pdwSize=m_ThumbnailBuffer->GetBufferSize(); memcpy(*pbData,m_ThumbnailBuffer->GetBufferPointer(),*pdwSize); } m_ThumbnailBuffer->Release(); m_ThumbnailBuffer=NULL; }}void CConsoleMinecraftApp::ReleaseSaveThumbnail(){ if(m_ThumbnailBuffer!=NULL) { m_ThumbnailBuffer->Release(); m_ThumbnailBuffer=NULL; }}
void CConsoleMinecraftApp::GetScreenshot(int iPad,PBYTE *pbData,DWORD *pdwSize){ // on a save caused by a create world, the thumbnail capture won't have happened if(m_ScreenshotBuffer[iPad]!=NULL) { *pbData= new BYTE [m_ScreenshotBuffer[iPad]->GetBufferSize()]; *pdwSize=m_ScreenshotBuffer[iPad]->GetBufferSize(); memcpy(*pbData,m_ScreenshotBuffer[iPad]->GetBufferPointer(),*pdwSize); m_ScreenshotBuffer[iPad]->Release(); m_ScreenshotBuffer[iPad]=NULL; }}
#ifdef _DEBUG_MENUS_ENABLED void CConsoleMinecraftApp::EnableDebugOverlay(bool enable,int iPad){ HRESULT hr = S_OK;
if(enable && !debugOverlayCreated) { const ULONG_PTR c_ModuleHandle = (ULONG_PTR)GetModuleHandle(NULL);
const DWORD LOCATOR_SIZE = 256; // Use this to allocate space to hold a ResourceLocator string WCHAR szResourceLocator[ LOCATOR_SIZE ];
wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/"); hr = XuiSceneCreate(szResourceLocator, L"xuiscene_debugoverlay.xur", NULL, &m_hDebugOverlay); debugContainerScene.AddChild(m_hDebugOverlay); debugContainerScene.SetShow(false);
debugOverlayCreated = true; } if(enable) { XuiElementSetUserFocus(m_hDebugOverlay, iPad); } else { XuiElementSetUserFocus(m_hCurrentScene[iPad], iPad); } debugContainerScene.SetShow(enable); SetMenuDisplayed(ProfileManager.GetPrimaryPad(),enable);}#endif
bool CConsoleMinecraftApp::GetMenuDisplayed(int iPad){ return m_bMenuDisplayed[iPad];}
void CConsoleMinecraftApp::SetMenuDisplayed(int iPad,bool bVal){ if(iPad==XUSER_INDEX_ANY) return;
if(bVal) { if(iPad==XUSER_INDEX_ANY) { for(int i=0;i<XUSER_MAX_COUNT;i++) { InputManager.SetMenuDisplayed(i,true); m_bMenuDisplayed[i]=true; // 4J Stu - Fix for #11018 - Functional: When the controller is unplugged during active gameplay and plugged back in at the resulting pause menu, it will demonstrate dual-functionality. m_bMenuToBeClosed[iPad]=false; SetChatTextDisplayed(i,false); } } else { InputManager.SetMenuDisplayed(iPad,true); m_bMenuDisplayed[iPad]=true; // 4J Stu - Fix for #11018 - Functional: When the controller is unplugged during active gameplay and plugged back in at the resulting pause menu, it will demonstrate dual-functionality. m_bMenuToBeClosed[iPad]=false; SetChatTextDisplayed(iPad,false); } } else { if(iPad==XUSER_INDEX_ANY) { for(int i=0;i<XUSER_MAX_COUNT;i++) { m_bMenuToBeClosed[i]=true; m_iCountDown[i]=4; } } else { m_bMenuToBeClosed[iPad]=true; m_iCountDown[iPad]=4; } }}
void CConsoleMinecraftApp::CheckMenuDisplayed(){ for(int iPad=0;iPad<4;iPad++) { if(m_bMenuToBeClosed[iPad]) { if(m_iCountDown[iPad]!=0) { m_iCountDown[iPad]--; } else { m_bMenuToBeClosed[iPad]=false; m_bMenuDisplayed[iPad]=false; InputManager.SetMenuDisplayed(iPad,false); SetChatTextDisplayed(iPad,true); }
} }}bool CConsoleMinecraftApp::IsSceneInStack(int iPad, EUIScene eScene){ bool inStack = false; int idx = 0; if( m_bGameStarted ) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; } AUTO_VAR(itEnd, m_sceneStack[idx].end()); for (AUTO_VAR(it, m_sceneStack[idx].begin()); it != itEnd; it++) //for(auto it = m_sceneStack[iPad].begin(), end = m_sceneStack[iPad].end(); it != end; ++it) { if(it->first == eScene) { inStack = true; break; } }
return inStack;}
WCHAR *CConsoleMinecraftApp::GetSceneName(EUIScene eScene,bool bAppendToName,bool bSplitscreenScene){ wcscpy(m_SceneName,wchSceneA[eScene]); if(bAppendToName) { if(RenderManager.IsHiDef()) { if(bSplitscreenScene) { wcscat(m_SceneName,L"_small"); } } else { // if it's low def, but widescreen, then use the small scenes if(!RenderManager.IsWidescreen()) { wcscat(m_SceneName,L"_480"); }
} } wcscat(m_SceneName,L".xur");
#ifdef _DEBUG#ifndef __PS3__ OutputDebugStringA("SCENE LOAD - "); OutputDebugStringW(m_SceneName); app.DebugPrintf("\n");#endif __PS3__#endif
return m_SceneName;}
HRESULT CConsoleMinecraftApp::NavigateToScene(int iPad,EUIScene eScene, void *initData /* = NULL */, bool forceUsePad /*= false*/, BOOL bStayVisible /* = FALSE */, HXUIOBJ *phResultingScene /*= NULL*/ ){ ASSERT(m_bDefaultTypefaceRegistered); ASSERT(m_bSkinLoaded); static bool bSeenUpdateTextThisSession=false;
// make sure we've created the main canvas already ASSERT(m_hObjRoot); if (!m_hObjRoot) return E_UNEXPECTED;
// If you're navigating to the multigamejoinload, and the player hasn't seen the updates message yet, display it now // display this message the first 3 times if((eScene==eUIScene_LoadOrJoinMenu) && (bSeenUpdateTextThisSession==false) && ( app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplayUpdateMessage)!=0)) { eScene=eUIScene_NewUpdateMessage; bSeenUpdateTextThisSession=true; } // if you're trying to navigate to the inventory,the crafting, pause or game info or any of the trigger scenes and there's already a menu up (because you were pressing a few buttons at the same time) then ignore the navigate if(GetMenuDisplayed(iPad)) { switch(eScene) { case eUIScene_PauseMenu: case eUIScene_Crafting2x2Menu: case eUIScene_Crafting3x3Menu: case eUIScene_FurnaceMenu: case eUIScene_ContainerMenu: case eUIScene_LargeContainerMenu: case eUIScene_InventoryMenu: case eUIScene_CreativeMenu: case eUIScene_DispenserMenu: case eUIScene_SignEntryMenu: case eUIScene_InGameInfoMenu: case eUIScene_EnchantingMenu: case eUIScene_BrewingStandMenu: case eUIScene_AnvilMenu: case eUIScene_TradingMenu: DebugPrintf("IGNORING NAVIGATE - we're trying to navigate to a user selected scene when there's already a scene up: pad:%d, scene:%d\n", iPad, eScene); return S_FALSE; break; } }
// load from the .xzp file const ULONG_PTR c_ModuleHandle = (ULONG_PTR)GetModuleHandle(NULL);
HXUIOBJ hScene; HRESULT hr; const DWORD LOCATOR_SIZE = 256; // Use this to allocate space to hold a ResourceLocator string WCHAR szResourceLocator[ LOCATOR_SIZE ];
wsprintfW(szResourceLocator,L"section://%X,%s#%s",c_ModuleHandle,L"media", L"media/");
// If the init data is null, put the player pad in there
if(initData==NULL) { initData = &iPad; }
int idx = 0; if( m_bGameStarted || forceUsePad ) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; } else { // The game isn't running, so make sure this scene is fullscreen CXuiSceneBase::SetPlayerBaseScenePosition( idx, CXuiSceneBase::e_BaseScene_Fullscreen ); }
if( eScene != eUIComponent_TutorialPopup && eScene != eUIComponent_Chat && eScene != eUIScene_HUD ) { SetMenuDisplayed(idx,true); }
PIXBeginNamedEvent(0,"Xui scene create\n"); MemSect(4);
bool bIsHiDef=RenderManager.IsHiDef(); bool bIsSplitscreen = GetLocalPlayerCount()>1; BOOL bSceneIsFullscreen = CXuiSceneBase::GetPlayerBasePosition(idx)==CXuiSceneBase::e_BaseScene_Fullscreen;
switch(eScene) { case eUIScene_Intro: case eUIScene_MainMenu: case eUIScene_LeaderboardsMenu: case eUIScene_Credits: case eUIScene_CreateWorldMenu: case eUIScene_LoadOrJoinMenu: case eUIScene_JoinMenu: case eUIScene_DLCOffersMenu: case eUIScene_DLCMainMenu: case eUIScene_TrialExitUpsell: case eUIScene_SaveMessage: case eUIScene_LoadMenu: case eUIScene_LaunchMoreOptionsMenu: // if we're in low res widescreen, we just want to use the normal scenes for these if(!bIsHiDef && RenderManager.IsWidescreen()) { hr = XuiSceneCreate(szResourceLocator,app.GetSceneName(eScene,false, false), initData, &hScene); } else { hr = XuiSceneCreate(szResourceLocator,app.GetSceneName(eScene, true,false), initData, &hScene); } break; default: // some scenes are forced into fullscreen even though we are insplitscreen mode (saving) if(eScene==eUIComponent_TutorialPopup || eScene==eUIComponent_Chat || eScene==eUIScene_HUD) { hr = XuiSceneCreate(szResourceLocator,app.GetSceneName(eScene,true,bIsSplitscreen), initData, &hScene); } else { hr = XuiSceneCreate(szResourceLocator,app.GetSceneName(eScene,true,bIsSplitscreen && !bSceneIsFullscreen), initData, &hScene); } break; } if( FAILED(hr) ) app.FatalLoadError();
MemSect(0); PIXEndNamedEvent();#if 0 D3DXVECTOR3 test; test.x = 0.5f; test.y = 0.5f; test.z = 1.0f; XuiElementSetScale(hScene,&test);#endif
if( eScene == eUIComponent_TutorialPopup ) { hr = XuiSceneNavigateForward(m_hCurrentTutorialScene[iPad], FALSE, hScene, XUSER_INDEX_NONE); if (FAILED(hr)) { app.DebugPrintf("scene navigate fail"); XuiDestroyObject(hScene); return hr; }
m_hCurrentTutorialScene[iPad]=hScene; } else if( eScene == eUIComponent_Chat ) { hr = XuiSceneNavigateForward(m_hCurrentChatScene[iPad], FALSE, hScene, XUSER_INDEX_NONE); if (FAILED(hr)) { app.DebugPrintf("scene navigate fail"); XuiDestroyObject(hScene); return hr; }
m_hCurrentChatScene[iPad]=hScene; } else if( eScene == eUIScene_HUD ) { hr = XuiSceneNavigateForward(m_hCurrentHudScene[iPad], FALSE, hScene, XUSER_INDEX_NONE); if (FAILED(hr)) { app.DebugPrintf("scene navigate fail"); XuiDestroyObject(hScene); return hr; }
m_hCurrentHudScene[iPad]=hScene; } else { MemSect(5); hr = XuiSceneNavigateForward(m_hCurrentScene[idx], bStayVisible, hScene, iPad); MemSect(0); if (FAILED(hr)) { app.DebugPrintf("scene navigate fail"); XuiDestroyObject(hScene); return hr; }
m_hCurrentScene[idx] = hScene; m_sceneStack[idx].push_back( SceneStackPair(eScene, hScene) );
if(eScene==eUIScene_Intro) { m_bIntroRunning=true; } }
switch(eScene) { case eUIScene_PauseMenu: { m_bPauseMenuDisplayed[iPad] = true;
Minecraft *pMinecraft = Minecraft::GetInstance(); if(pMinecraft != NULL && pMinecraft->localgameModes[iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[iPad];
// This just allows it to be shown gameMode->getTutorial()->showTutorialPopup(false); } } break; case eUIScene_Crafting2x2Menu: case eUIScene_Crafting3x3Menu: case eUIScene_FurnaceMenu: case eUIScene_ContainerMenu: case eUIScene_LargeContainerMenu: case eUIScene_InventoryMenu: case eUIScene_CreativeMenu: case eUIScene_DispenserMenu: case eUIScene_BrewingStandMenu: case eUIScene_EnchantingMenu: case eUIScene_AnvilMenu: case eUIScene_TradingMenu: m_bContainerMenuDisplayed[iPad]=true;
// Intentional fall-through case eUIScene_DeathMenu: case eUIScene_FullscreenProgress: case eUIScene_SignEntryMenu: case eUIScene_EndPoem: m_bIgnoreAutosaveMenuDisplayed[iPad] = true; break; }
switch(eScene) { case eUIScene_FullscreenProgress: case eUIScene_EndPoem: m_bIgnorePlayerJoinMenuDisplayed[iPad] = true; break; }
if(phResultingScene!=NULL) { *phResultingScene=hScene; }
if (FAILED(hr)) return hr;
return S_OK;}
HRESULT CConsoleMinecraftApp::NavigateBack(int iPad, bool forceUsePad /*= false*/, EUIScene eScene /*= eUIScene_COUNT*/){ HXUIOBJ hCur; HXUIOBJ hBack;
int idx = 0; if( m_bGameStarted || forceUsePad ) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; }
hCur=m_hCurrentScene[idx];
if(eScene == eUIScene_COUNT) { hBack = XuiSceneGetBackScene(m_hCurrentScene[idx]); if (!hBack) return S_FALSE;
m_sceneStack[idx].pop_back(); } else { for(auto it = m_sceneStack[idx].begin(), end = m_sceneStack[idx].end(); it != end; ++it) { if(it->first == eScene) { hBack = it->second; } }
if (!hBack) return S_FALSE;
while( !m_sceneStack[idx].empty() && m_sceneStack[idx].back().second != hBack) { m_sceneStack[idx].pop_back(); } } m_hCurrentScene[idx]=hBack;
if( m_hCurrentScene[idx] == this->m_hFirstScene[idx] ) SetMenuDisplayed(idx,false);
CXuiSceneBase::PlayUISFX(eSFX_Back); return XuiSceneNavigateBack(hCur, hBack,iPad );}
HRESULT CConsoleMinecraftApp::TutorialSceneNavigateBack(int iPad, bool forceUsePad /*= false*/){ HXUIOBJ hCur; HXUIOBJ hBack;
int idx = 0; if( m_bGameStarted || forceUsePad ) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; }
hCur=m_hCurrentTutorialScene[idx]; hBack = XuiSceneGetBackScene(m_hCurrentTutorialScene[idx]); if (!hBack) return S_FALSE; m_hCurrentTutorialScene[idx]=hBack;
return XuiSceneNavigateBack(hCur, hBack,iPad );}
HRESULT CConsoleMinecraftApp::CloseXuiScenes(int iPad, bool forceUsePad /*= false*/){ HRESULT hr;
int idx = 0; if( m_bGameStarted || forceUsePad ) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; }
hr=XuiSceneNavigateBackToFirst(m_hCurrentScene[idx],iPad); m_hCurrentScene[idx]=m_hFirstScene[idx]; m_sceneStack[idx].clear();
CXuiSceneBase::ShowBackground(iPad, FALSE ); CXuiSceneBase::ShowDarkOverlay(iPad, FALSE ); CXuiSceneBase::ShowLogo(iPad, FALSE );
m_bPauseMenuDisplayed[iPad] = false; m_bContainerMenuDisplayed[iPad] = false; m_bIgnoreAutosaveMenuDisplayed[iPad] = false; m_bIgnorePlayerJoinMenuDisplayed[iPad] = false;
ui.SetTooltips( iPad, -1, -1, -1, -1 ); SetMenuDisplayed(iPad,false);
// Hide the tutorial popup for this player if(m_bGameStarted) { CScene_TutorialPopup::SetSceneVisible(iPad,FALSE); }
Minecraft *pMinecraft = Minecraft::GetInstance(); if(pMinecraft != NULL && pMinecraft->localgameModes[iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[iPad];
// This just allows it to be shown gameMode->getTutorial()->showTutorialPopup(true); }
// update the rich presence // Are we offline or online, and how many players are there if(g_NetworkManager.GetPlayerCount()>1) { for(int i=0;i<XUSER_MAX_COUNT;i++) { if(pMinecraft->localplayers[i]) { if(g_NetworkManager.IsLocalGame()) { ProfileManager.SetCurrentGameActivity(i,CONTEXT_PRESENCE_MULTIPLAYEROFFLINE,false); } else { ProfileManager.SetCurrentGameActivity(i,CONTEXT_PRESENCE_MULTIPLAYER,false); } } } } else { if(m_bGameStarted && pMinecraft->localplayers[idx]) { if(g_NetworkManager.IsLocalGame()) { ProfileManager.SetCurrentGameActivity(iPad,CONTEXT_PRESENCE_MULTIPLAYER_1POFFLINE,false); } else { ProfileManager.SetCurrentGameActivity(iPad,CONTEXT_PRESENCE_MULTIPLAYER_1P,false); } } } // because a player leaving can cause other players close scenes to be called, and they may have been crafting, I'll run // the presence update for all players
for(int i=0;i<XUSER_MAX_COUNT;i++) { if(pMinecraft->localplayers[i]) { pMinecraft->localplayers[i]->updateRichPresence(); } }
return hr;}
HRESULT CConsoleMinecraftApp::CloseAllPlayersXuiScenes(){ HRESULT hr = S_OK;
// 4J Stu - Fix for #11211 - TCR 015 BAS Sign In Changes: One time-occurrence where users were unable to access any in-game menus after several sign-in changes // We only hide them during a save, but this could be interrupted CXuiSceneBase::ShowOtherPlayersBaseScene(0, true);
for(unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) { CloseXuiScenes(idx, true); ReloadChatScene(idx, false, true); ReloadHudScene(idx, false, true); }
return hr;}
HRESULT CConsoleMinecraftApp::CloseXuiScenesAndNavigateToScene(int iPad,EUIScene eScene, void *initData, bool forceUsePad /*= false*/){ HRESULT hr;
int idx = 0; if( m_bGameStarted || forceUsePad) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; }
hr=XuiSceneNavigateBackToFirst(m_hCurrentScene[idx],iPad); m_hCurrentScene[idx]=m_hFirstScene[idx]; m_sceneStack[idx].clear();
CXuiSceneBase::ShowBackground(iPad, FALSE ); CXuiSceneBase::ShowDarkOverlay(iPad, FALSE ); CXuiSceneBase::ShowLogo(iPad, FALSE );
m_bPauseMenuDisplayed[iPad] = false; m_bContainerMenuDisplayed[iPad] = false; m_bIgnoreAutosaveMenuDisplayed[iPad] = false; m_bIgnorePlayerJoinMenuDisplayed[iPad] = false;
ui.SetTooltips( iPad, -1, -1, -1, -1 ); SetMenuDisplayed(iPad,false);
NavigateToScene(iPad,eScene,initData);
return hr;}
HRESULT CConsoleMinecraftApp::RemoveBackScene(int iPad){ int idx = 0; if( m_bGameStarted) { // If the game isn't running treat as user 0, otherwise map index directly from pad if( ( iPad != 255 ) && ( iPad >= 0 ) ) idx = iPad; }
if( m_hCurrentScene[idx] != m_hFirstScene[idx] ) { HXUIOBJ hBack = XuiSceneGetBackScene(m_hCurrentScene[idx]);
if( hBack != m_hFirstScene[idx] ) { HXUIOBJ hNewBack = XuiSceneGetBackScene( hBack );
if( hNewBack != m_hFirstScene[idx] ) { XuiSceneSetBackScene(m_hCurrentScene[idx], hNewBack);
for(auto it = m_sceneStack[idx].begin(), end = m_sceneStack[idx].end(); it != end; ++it) { if(it->second == hBack) { m_sceneStack[idx].erase(it); break; } }
XuiSceneSetBackScene(hBack, NULL); XuiDestroyObject( hBack ); } } }
return S_OK;}
HRESULT CConsoleMinecraftApp::NavigateToHomeMenu(){ HRESULT hr = S_OK;
for(unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) { if( m_hFirstTutorialScene[idx] != m_hCurrentTutorialScene[idx] ) { XuiSceneNavigateBack(m_hCurrentTutorialScene[idx], m_hFirstTutorialScene[idx],XUSER_INDEX_ANY); m_hCurrentTutorialScene[idx] = m_hFirstTutorialScene[idx]; } }
hr = CloseAllPlayersXuiScenes();
Minecraft *pMinecraft = Minecraft::GetInstance();
// 4J-PB - just about to switched to the default texture pack , so clean up anything texture pack related here
// unload any texture pack audio // if there is audio in use, clear out the audio, and unmount the pack TexturePack *pTexPack=Minecraft::GetInstance()->skins->getSelected(); DLCTexturePack *pDLCTexPack=NULL;
if(pTexPack->hasAudio()) { // get the dlc texture pack, and store it pDLCTexPack=(DLCTexturePack *)pTexPack; }
// change to the default texture pack pMinecraft->skins->selectTexturePackById(TexturePackRepository::DEFAULT_TEXTURE_PACK_ID);
if(pTexPack->hasAudio()) { // need to stop the streaming audio - by playing streaming audio from the default texture pack now pMinecraft->soundEngine->playStreaming(L"", 0, 0, 0, 0, 0);
if(pDLCTexPack->m_pStreamedWaveBank!=NULL) { pDLCTexPack->m_pStreamedWaveBank->Destroy(); } if(pDLCTexPack->m_pSoundBank!=NULL) { pDLCTexPack->m_pSoundBank->Destroy(); } DWORD result = StorageManager.UnmountInstalledDLC("TPACK"); app.DebugPrintf("Unmount result is %d\n",result); }
g_NetworkManager.ForceFriendsSessionRefresh();
hr = NavigateToScene(XUSER_INDEX_ANY,eUIScene_MainMenu,NULL); return hr;}
D3DXVECTOR3 CConsoleMinecraftApp::GetElementScreenPosition(HXUIOBJ hObj){ D3DXMATRIX matrix; D3DXVECTOR3 elementPosition; XuiElementGetFullXForm( hObj, &matrix);
elementPosition.x = matrix._41; elementPosition.y = matrix._42; elementPosition.z = matrix._43;
return elementPosition;}
void CConsoleMinecraftApp::SetChatTextDisplayed(int iPad, bool bVal){ XuiElementSetShow( m_hCurrentChatScene[iPad] ,bVal );}
void CConsoleMinecraftApp::ReloadChatScene(int iPad, bool bJoining /*= false*/, bool bForce /*= false*/){ if(m_hFirstChatScene[iPad] == NULL || m_hCurrentChatScene[iPad] == NULL) return;
// Re-create the chat scene so it is the correct size. It starts without any visible lines. BOOL chatSceneVisible = FALSE; if( m_hFirstChatScene[iPad] != m_hCurrentChatScene[iPad] ) { chatSceneVisible = XuiElementIsShown(m_hCurrentChatScene[iPad]); }
int iLocalPlayerC=GetLocalPlayerCount(); // we need to decide whether to close the xui scene or just reposition it
if( bForce || (bJoining && iLocalPlayerC==2) || (!bJoining && iLocalPlayerC==1) || m_hFirstChatScene[iPad] == m_hCurrentChatScene[iPad]) { if( m_hFirstChatScene[iPad] != m_hCurrentChatScene[iPad] ) XuiSceneNavigateBack(m_hCurrentChatScene[iPad], m_hFirstChatScene[iPad],iPad); m_hCurrentChatScene[iPad] = m_hFirstChatScene[iPad]; app.NavigateToScene(iPad,eUIComponent_Chat,NULL,true);
XuiElementSetShow( m_hCurrentChatScene[iPad], chatSceneVisible); }
D3DXVECTOR3 vPosition; vPosition.x = vPosition.y = vPosition.z = 0.0f;
float textXOffset = 0; float sceneWidth = (float)Minecraft::GetInstance()->width;
// For 2-player splitscreen we need to move it around a bit switch( CXuiSceneBase::GetPlayerBasePosition(iPad) ) { case CXuiSceneBase::e_BaseScene_Top: case CXuiSceneBase::e_BaseScene_Bottom: { vPosition.x -= Minecraft::GetInstance()->width / 4; textXOffset = SAFEZONE_HALF_WIDTH; } break; case CXuiSceneBase::e_BaseScene_Left: textXOffset = SAFEZONE_HALF_WIDTH; case CXuiSceneBase::e_BaseScene_Right: vPosition.y += Minecraft::GetInstance()->height / 4; sceneWidth = XUI_BASE_SCENE_WIDTH_HALF; break; case CXuiSceneBase::e_BaseScene_Top_Left: textXOffset = SAFEZONE_HALF_WIDTH; sceneWidth = XUI_BASE_SCENE_WIDTH_HALF; break; case CXuiSceneBase::e_BaseScene_Top_Right: textXOffset = 0; sceneWidth = XUI_BASE_SCENE_WIDTH_HALF; break; case CXuiSceneBase::e_BaseScene_Bottom_Left: textXOffset = SAFEZONE_HALF_WIDTH; sceneWidth = XUI_BASE_SCENE_WIDTH_HALF; break; case CXuiSceneBase::e_BaseScene_Bottom_Right: textXOffset = 0; sceneWidth = XUI_BASE_SCENE_WIDTH_HALF; break; default: textXOffset = SAFEZONE_HALF_WIDTH; break; } float fWidth, fHeight; XuiElementGetBounds( m_hCurrentChatScene[iPad], &fWidth, &fHeight ); XuiElementSetBounds(m_hCurrentChatScene[iPad],sceneWidth, fHeight );
CScene_Chat* chatScene; VOID *pObj; XuiObjectFromHandle( m_hCurrentChatScene[iPad], &pObj ); chatScene = (CScene_Chat *)pObj; chatScene->OffsetTextPosition( textXOffset );
XuiElementSetPosition( m_hCurrentChatScene[iPad], &vPosition );}
void CConsoleMinecraftApp::ReloadHudScene(int iPad, bool bJoining /*= false*/, bool bForce /*= false*/){ if(m_hFirstHudScene[iPad] == NULL || m_hCurrentHudScene[iPad] == NULL) return;
// Re-create the hud scene so it is the correct size. It starts without any visible lines. BOOL hudSceneVisible = FALSE; if( m_hFirstHudScene[iPad] != m_hCurrentHudScene[iPad] ) { hudSceneVisible = XuiElementIsShown(m_hCurrentHudScene[iPad]); }
int iLocalPlayerC=GetLocalPlayerCount(); // we need to decide whether to close the xui scene or just reposition it
if( bForce || (bJoining && iLocalPlayerC==2) || (!bJoining && iLocalPlayerC==1) || m_hFirstHudScene[iPad] == m_hCurrentHudScene[iPad]) { if( m_hFirstHudScene[iPad] != m_hCurrentHudScene[iPad] ) XuiSceneNavigateBack(m_hCurrentHudScene[iPad], m_hFirstHudScene[iPad],iPad); m_hCurrentHudScene[iPad] = m_hFirstHudScene[iPad]; app.NavigateToScene(iPad,eUIScene_HUD,NULL,true);
XuiElementSetShow( m_hCurrentHudScene[iPad], hudSceneVisible); }}
void CConsoleMinecraftApp::AdjustSplitscreenScene(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bAdjustXForSafeArea){ D3DXVECTOR3 vec;
Minecraft *pMinecraft = Minecraft::GetInstance();
// store this for any change of screensection XuiElementGetPosition(hScene,pvOriginalPosition); vec=*pvOriginalPosition;
if( pMinecraft->localplayers[iPad] != NULL ) { switch( pMinecraft->localplayers[iPad]->m_iScreenSection) { case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: // move the scene down vec.y+=fSafeZoneY; break; case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: break; case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: break; case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: // move the scene left if(bAdjustXForSafeArea) vec.x-=fSafeZoneX; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: // move the scene down vec.y+=fSafeZoneY; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: // move the scene down vec.y+=fSafeZoneY; // move the scene left if(bAdjustXForSafeArea) vec.x-=fSafeZoneX; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: // move the scene left if(bAdjustXForSafeArea) vec.x-=fSafeZoneX; break; } } XuiElementSetPosition(hScene,&vec);}
void CConsoleMinecraftApp::AdjustSplitscreenScene(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, float fXAdjust){ D3DXVECTOR3 vec;
Minecraft *pMinecraft = Minecraft::GetInstance();
// store this for any change of screensection
XuiElementGetPosition(hScene,pvOriginalPosition);
vec=*pvOriginalPosition; if( pMinecraft->localplayers[iPad] != NULL ) { switch( pMinecraft->localplayers[iPad]->m_iScreenSection) { case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: // move the scene down vec.y+=fSafeZoneY; // 4J-PB - don't adjust things in horizontal splitscreen //vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: // 4J-PB - don't adjust things in horizontal splitscreen //vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: // move the scene left vec.x-=fSafeZoneX-fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: // move the scene down vec.y+=fSafeZoneY; vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: // move the scene down vec.y+=fSafeZoneY; // move the scene left vec.x-=fSafeZoneX-fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: // move the scene left vec.x-=fSafeZoneX-fXAdjust; break; } }
XuiElementSetPosition(hScene,&vec);}
HRESULT CConsoleMinecraftApp::AdjustSplitscreenScene_PlayerChanged(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bJoining, bool bAdjustXForSafeArea){ int iLocalPlayerC=GetLocalPlayerCount(); Minecraft *pMinecraft=Minecraft::GetInstance();
// we need to decide whether to close the xui scene or just reposition it
if((bJoining && iLocalPlayerC==2) || (!bJoining && iLocalPlayerC==1)) { // Fix for #101078 - TCR #15: BAS Sign-in Changes: TU12: Signing out the secondary player's profile during the End Poem in local splitscreen game causes Host invincibility and corruption of End Portal. if(!IsSceneInStack(iPad,eUIScene_EndPoem)) { // close the scene! ui.SetTooltips(iPad, -1); // kill the xui ui.CloseUIScenes(iPad); }
// 4J Stu - Return S_FALSE to inidicate that the scene has been closed return S_FALSE; } else if ( pMinecraft->localplayers[iPad] != NULL ) { // we need to reposition the scenes since the players will have moved around
D3DXVECTOR3 vec=*pvOriginalPosition;
switch( pMinecraft->localplayers[iPad]->m_iScreenSection) { case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: // move the scene down vec.y+=fSafeZoneY; break; case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: break; case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: break; case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: // move the scene left if(bAdjustXForSafeArea) vec.x-=fSafeZoneX; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: // move the scene down vec.y+=fSafeZoneY; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: // move the scene down vec.y+=fSafeZoneY; // move the scene left if(bAdjustXForSafeArea) vec.x-=fSafeZoneX; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: // move the scene left if(bAdjustXForSafeArea) vec.x-=fSafeZoneX; break; } XuiElementSetPosition(hScene,&vec); }
return S_OK;}
HRESULT CConsoleMinecraftApp::AdjustSplitscreenScene_PlayerChanged(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bJoining, float fXAdjust){ int iLocalPlayerC=GetLocalPlayerCount(); Minecraft *pMinecraft=Minecraft::GetInstance();
// we need to decide whether to close the xui scene or just reposition it
if((bJoining && iLocalPlayerC==2) || (!bJoining && iLocalPlayerC==1)) { // close the scene! ui.SetTooltips(iPad, -1); // kill the xui ui.CloseUIScenes(iPad);
// 4J Stu - Return S_FALSE to inidicate that the scene has been closed return S_FALSE; } else if ( pMinecraft->localplayers[iPad] != NULL ) { // we need to reposition the scenes since the players will have moved around
D3DXVECTOR3 vec=*pvOriginalPosition;
switch( pMinecraft->localplayers[iPad]->m_iScreenSection) { case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: // move the scene down vec.y+=fSafeZoneY; vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: // move the scene left vec.x-=fSafeZoneX-fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: // move the scene down vec.y+=fSafeZoneY; vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: // move the scene down vec.y+=fSafeZoneY; // move the scene left vec.x-=fSafeZoneX-fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: vec.x+=fXAdjust; break; case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: // move the scene left vec.x-=fSafeZoneX-fXAdjust; break; } XuiElementSetPosition(hScene,&vec); }
return S_OK;}
void CConsoleMinecraftApp::StoreLaunchData(){ LD_DEMO* pDemoData = NULL;
DWORD dwStatus = XGetLaunchDataSize( &m_dwLaunchDataSize ); if( dwStatus == ERROR_SUCCESS ) { m_pLaunchData = new BYTE [ m_dwLaunchDataSize ]; dwStatus = XGetLaunchData( m_pLaunchData, m_dwLaunchDataSize ); pDemoData = (LD_DEMO*)( m_pLaunchData ); if( pDemoData->dwID != LAUNCH_DATA_DEMO_ID ) { // custom launch data; must be handled separately } }}
void CConsoleMinecraftApp::ExitGame(){ if(m_pLaunchData!=NULL) { LD_DEMO* pDemoData = (LD_DEMO*)( m_pLaunchData ); XSetLaunchData( pDemoData, m_dwLaunchDataSize ); XLaunchNewImage( pDemoData->szLauncherXEX, 0 ); } else { XLaunchNewImage( XLAUNCH_KEYWORD_DASH_ARCADE, 0 ); }}
////////////////////////////////////////////////////////////////////////////// FatalLoadError//// This is called when we can't load one of the required files at startup// It tends to mean the files have been corrupted.// We have to assume that we've not been able to load the text for the game.////////////////////////////////////////////////////////////////////////////void CConsoleMinecraftApp::FatalLoadError(void){ XOVERLAPPED MessageBoxOverlap;
memset(&MessageBoxOverlap, 0, sizeof(MessageBoxOverlap));
//HANDLE messageBoxThread = CreateThread(NULL, 0, &CMinecraftApp::ShowFatalLoadMessageBoxThreadProc, &MessageBoxOverlap, 0, NULL); // //WaitForSingleObjectEx(messageBoxThread, // handle to object // 20000, // time-out interval // FALSE // alertable option //); //XOVERLAPPED *MessageBoxOverlap = (XOVERLAPPED *)lpParameter;
wchar_t *aStrings[3]; LPCWSTR wszButtons[1];
// IDS_FATAL_ERROR_TITLE // IDS_FATAL_ERROR_TEXT // IDS_EXIT_GAME
switch (XGetLanguage()) { case XC_LANGUAGE_GERMAN: aStrings[0] = L"Ladefehler"; aStrings[1] = L"Minecraft: Xbox 360 Edition konnte nicht geladen werden und kann daher nicht fortgesetzt werden."; aStrings[2] = L"Spiel verlassen"; break; case XC_LANGUAGE_SPANISH: aStrings[0] = L"Error al cargar"; aStrings[1] = L"Minecraft: Xbox 360 Edition ha experimentado un error al cargar y no puede continuar."; aStrings[2] = L"Salir del juego"; break; case XC_LANGUAGE_FRENCH: aStrings[0] = L"Échec du chargement"; aStrings[1] = L"Le chargement de Minecraft: Xbox 360 Edition a échoué : impossible de continuer."; aStrings[2] = L"Quitter le jeu"; break; case XC_LANGUAGE_ITALIAN: aStrings[0] = L"Errore caricamento"; aStrings[1] = L"Caricamento \"Minecraft: Xbox 360 Edition\" non riuscito, impossibile continuare."; aStrings[2] = L"Esci dal gioco"; break; case XC_LANGUAGE_JAPANESE: aStrings[0] = L"ロード エラー"; aStrings[1] = L"Minecraft Xbox 360 版のロードに失敗しました。続行できません"; aStrings[2] = L"ゲームを終了"; break; case XC_LANGUAGE_KOREAN: aStrings[0] = L"불러오기 오류"; aStrings[1] = L"Minecraft: Xbox 360 Edition을 불러오는 중에 오류가 발생하여 계속할 수 없습니다."; aStrings[2] = L"게임 나가기"; break; case XC_LANGUAGE_PORTUGUESE: if(XGetLocale()==XC_LOCALE_BRAZIL) { // Brazilian Portuguese aStrings[0] = L"Erro de carregamento"; aStrings[1] = L"\"Minecraft: Xbox 360 Edition\" falhou ao carregar e não é possível continuar."; aStrings[2] = L"Sair do Jogo"; } else { aStrings[0] = L"Erro de Carregamento"; aStrings[1] = L"Não foi possível carregar \"Minecraft: Edição Xbox 360\" e não é possível continuar."; aStrings[2] = L"Sair do Jogo"; } break; case XC_LANGUAGE_TCHINESE: aStrings[0] = L"載入錯誤"; aStrings[1] = L"無法載入 Minecraft: Xbox 360 Edition,因此無法繼續。"; aStrings[2] = L"離開遊戲"; break; default: aStrings[0] = L"Loading Error"; aStrings[1] = L"\"Minecraft: Xbox 360 Edition\" has failed to load, and cannot continue."; aStrings[2] = L"Exit Game"; break; } wszButtons[0] = aStrings[2];
MESSAGEBOX_RESULT MessageResult;
while (XShowMessageBoxUI(XUSER_INDEX_ANY, aStrings[0], aStrings[1], 1, wszButtons, 0, XMB_ALERTICON, &MessageResult, &MessageBoxOverlap) == ERROR_ACCESS_DENIED) Sleep(250); while (!XHasOverlappedIoCompleted(&MessageBoxOverlap)) { RenderManager.SetClearColour(D3DCOLOR_RGBA(0,0,0,255)); RenderManager.Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); RenderManager.Present(); Sleep(250); }
ExitGame();}
WCHAR *CConsoleMinecraftApp::wchExt[MAX_EXTENSION_TYPES]={ L"png", L"inf", L"dat",};
int CConsoleMinecraftApp::GetLocalTMSFileIndex(WCHAR *wchTMSFile,bool bFilenameIncludesExtension,eFileExtensionType eEXT){ WCHAR wchTemp[ 256 ]; WCHAR wchInFile[ 256 ];
if(bFilenameIncludesExtension) { swprintf(wchInFile, 256, L"%ls",wchTMSFile); } else { swprintf(wchInFile, 256, L"%ls.%ls",wchTMSFile,wchExt[eEXT]); }
for(int i=0;i<TMS_COUNT;i++) { swprintf(wchTemp, 256, L"%ls.%ls",TMSFileA[i].wchFilename,wchExt[TMSFileA[i].eEXT]); if(wcscmp(wchTemp,wchInFile)==0) { return i; } }
return -1;}
int CConsoleMinecraftApp::RetrieveTMSFileListIndex(WCHAR *wchTMSFile){ eFileExtensionType eEXT; WCHAR wTemp[256];
int iIndex=0; // split the file name into name and extension while(wchTMSFile[iIndex]!=L'.') { wTemp[iIndex]=wchTMSFile[iIndex]; iIndex++; } wTemp[iIndex]=0; for(int i=0;i<MAX_EXTENSION_TYPES;i++) { if(wcscmp(&wchTMSFile[iIndex+1],wchExt[i])==0) { eEXT=(eFileExtensionType)i; } }
return GetLocalTMSFileIndex(wTemp,false,eEXT);}
int CConsoleMinecraftApp::LoadLocalTMSFile(WCHAR *wchTMSFile, eFileExtensionType eExt){ WCHAR wcTemp[256];
wsprintfW(wcTemp,L"%s.%s",wchTMSFile,wchExt[eExt]); return LoadLocalTMSFile(wcTemp);}
int CConsoleMinecraftApp::LoadLocalTMSFile(WCHAR *wchTMSFile){ const DWORD LOCATOR_SIZE = 256; // Use this to allocate space to hold a ResourceLocator string WCHAR szResourceLocator[ LOCATOR_SIZE ]; HRESULT hr; int iTMSFileIndex;
// split the file name into file and extension and find it in out tms file list
iTMSFileIndex=RetrieveTMSFileListIndex(wchTMSFile);
if(iTMSFileIndex!=-1) { // can we find the tms file in our xzp? if(TMSFileA[iTMSFileIndex].pbData==NULL) // if we haven't already loaded it { swprintf(szResourceLocator, LOCATOR_SIZE, L"%ls#TMSFiles/%ls",m_wchTMSXZP, wchTMSFile);
hr = XuiResourceLoadAllNoLoc(szResourceLocator, &TMSFileA[iTMSFileIndex].pbData, &TMSFileA[iTMSFileIndex].uiSize); } }
return iTMSFileIndex;}
void CConsoleMinecraftApp::FreeLocalTMSFiles(eTMSFileType eType){ for(int i=0;i<TMS_COUNT;i++) { if((eType==eTMSFileType_All) ||(eType==TMSFileA[i].eTMSType)) { if(TMSFileA[i].pbData!=NULL) { XuiFree(TMSFileA[i].pbData); TMSFileA[i].pbData=NULL; TMSFileA[i].uiSize=0; } } }}
// 4J-PB - If any new DLC items are added to the TMSFiles, this array needs updatedTMS_FILE CConsoleMinecraftApp::TMSFileA[TMS_COUNT] ={ // skin packs { L"SP1", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SP2", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SP3", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SP4", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SP5", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SP6", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPF", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPB", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPC", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPZ", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPM", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPI", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"SPG", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, //themes { L"ThSt", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"ThIr", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"ThGo", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"ThDi", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, { L"ThAw", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0}, //gamerpics { L"GPAn", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPCo", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPEn", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPFo", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPTo", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPBA", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPFa", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPME", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPMF", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPMM", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPSE", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPOr", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPMi", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPMB", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPBr", eFileExtensionType_PNG , eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPM1", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPM2", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0}, { L"GPM3", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0}, //avatar items { L"AH_0001", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0002", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0003", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0004", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0005", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0006", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0007", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0008", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0009", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0010", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0011", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0012", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AH_0013", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0001", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0002", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0003", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0004", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0005", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0006", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0007", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0008", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0009", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0010", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0011", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0012", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0013", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0014", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0015", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0016", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0017", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0018", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0019", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0020", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0021", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0022", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0023", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0024", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0025", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AT_0026", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0001", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0002", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0003", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0004", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0005", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0006", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0007", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0009", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0010", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0011", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0012", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0013", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0014", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0015", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0016", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0017", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0018", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0019", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0020", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0021", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0022", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0023", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0024", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0025", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0026", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0027", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0028", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0029", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0030", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0031", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0032", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AP_0033", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"AA_0001", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0 , 0 }, // Mash-up Packs { L"MPMA", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"MPMA", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 1024 }, { L"MPSR", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"MPSR", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 1025 }, { L"MPHA", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"MPHA", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 1026 },
// Texture Packs { L"TP01", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"TP01", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 2049 }, { L"TP02", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"TP02", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 2053 }, { L"TP04", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"TP04", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 2051 }, { L"TP05", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"TP05", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 2054 }, { L"TP06", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"TP06", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 2050 }, { L"TP07", eFileExtensionType_PNG, eTMSFileType_MinecraftStore, NULL, 0, 0 }, { L"TP07", eFileExtensionType_DAT, eTMSFileType_TexturePack, NULL, 0, 2055 },
};
#ifndef _CONTENT_PACKAGEWCHAR CConsoleMinecraftApp::m_wchTMSXZP[] = L"file://game:/TMSFiles.xzp";#elseWCHAR CConsoleMinecraftApp::m_wchTMSXZP[] = L"file://UPDATE:/res/TMS/TMSFiles.xzp";#endif
void CConsoleMinecraftApp::GetFileFromTPD(eTPDFileType eType,PBYTE pbData,DWORD dwBytes,PBYTE *ppbData,DWORD *pdwBytes ){ PBYTE pbPos=pbData; // icon is the second thing in the file if(pbData && dwBytes>0) { //First is the language
unsigned int uiDecompSize=*(unsigned int *)pbPos; unsigned int uiCompSize=((unsigned int *)pbPos)[1];
if(eType==eTPDFileType_Loc) { *pdwBytes= uiDecompSize; *ppbData = new BYTE [uiDecompSize];
Compression::getCompression()->Decompress(*ppbData,(UINT *)pdwBytes,&((unsigned int *)pbPos)[2],uiCompSize); return; } else { // skip over the data pbPos=(PBYTE)&((unsigned int *)pbPos)[2]; pbPos+=uiCompSize; }
uiDecompSize=*(unsigned int *)pbPos; uiCompSize=((unsigned int *)pbPos)[1];
// second is the icon if(eType==eTPDFileType_Icon) { *pdwBytes= uiDecompSize; *ppbData = new BYTE [uiDecompSize];
Compression::getCompression()->Decompress(*ppbData,(UINT *)pdwBytes,&((unsigned int *)pbPos)[2],uiCompSize); return; } else { // skip over the data pbPos=(PBYTE)&((unsigned int *)pbPos)[2]; pbPos+=uiCompSize; }
uiDecompSize=*(unsigned int *)pbPos; uiCompSize=((unsigned int *)pbPos)[1];
// third is the comparison if(eType==eTPDFileType_Comparison) { *pdwBytes= uiDecompSize; *ppbData = new BYTE [uiDecompSize];
Compression::getCompression()->Decompress(*ppbData,(UINT *)pdwBytes,&((unsigned int *)pbPos)[2],uiCompSize); return; } }
return;}
LPCWSTR CConsoleMinecraftApp::GetString(int iID){ return StringTable.Lookup(iID);}
CXuiStringTable *CConsoleMinecraftApp::GetStringTable() { return &StringTable;}