Selain saran-saran ini, kamu mungkin ingin melihat seminar GDC James Vaughan tentang membawa game Plague Inc. dari ponsel ke PC: http://www.gdcvault.com/play/1021963/Evolving-Plague-Inc-Taking-a [section]Hal-hal yang perlu diingat[/section] [h4]Konteks[/h4] Pemain PC lebih menyukai pengalaman jangka panjang yang dapat mereka nikmati lebih lama. Baik untuk menikmati jalan ceritanya atau menjadi lebih jago dalam teka-teki atau level yang sulit. Konten pendek yang biasanya sukses di seluler (bisa dimainkan saat menunggu bis) secara historis tidak berjalan dengan baik di PC. …
Kami telah melihat beberapa game yang menggunakan format tersebut di seluler dan berpindah ke model premium di PC dan berjalan dengan baik, di mana semua konten bisa dibuka dan tak dibatasi. Jika sesuai, ada opsi di Steam untuk menjual konten tambahan sebagai [doclink=store/application/dlc]DLC atau ekspansi[/doclink], tapi game intinya harus memiliki akses penuh tanpa memerlukan pembelian tambahan. …
[/list] [/list] [/list] [b]Contoh Respons:[/b] [code=json] { "response": { "result": "OK", "params": { "count": 4, "orders": [ { "orderid": "1233", "transid": "1234567890123456788", "steamid": "76561197972751825", "status": "PartialRefund", "currency": "USD", "time": "2024-01-23T18:30:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:15:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Refunded" }, { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1234", "transid": "1234567890123456789", "steamid": "76561197972751825", "status": "Failed", "currency": "USD", "time": "2024-01-23T18:40:30Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Failed" } ] }, { "orderid": "1235", "transid": "1234567890123456790", "steamid": "76561197972751825", "status": "Succeeded", "currency": "USD", "time": "2024-01-23T18:40:40Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:30Z", "items": [ { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1236", "transid": "1234567890123456791", "steamid": "76561197972751825", "status": "Chargedback", "currency": "USD", "time": "2024-01-23T19:55:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:40:00Z", "items": [ { "itemid": 102, "qty": 1, "amount": 999, "vat": 89, "itemstatus": "Chargedback" } ] } ] } } } [/code] [section=GetUserAgreementInfo]GetUserAgreementInfo[/section] [code=http]GET https://partner.steam-api.com/ISteamMicroTxn/GetUserAgreementInfo/v2/[/code] [table] [tr][th]Nama[/th][th]Jenis[/th][th]Diperlukan[/th][th]Deskripsi[/th][/tr] [tr] [td][b]key[/b][/td][td]string[/td] [td]✔[/td] [td]Web API Steamworks [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]key penerbit[/url] dengan perizinan [b]Transaksi Mikro[/b].…
[/list] [/list] [/list] [b]Contoh Respons:[/b] [code=xml] <response> <result>OK</result> <params> <state>WA</state> <country>US</country> <currency>USD</currency> </params> </response> [/code] [section=InitTxn]InitTxn[/section] [code=http]POST https://partner.steam-api.com/ISteamMicroTxn/InitTxn/v3/[/code] [table] [tr][th]Nama[/th][th]Jenis[/th][th]Diperlukan[/th][th]Deskripsi[/th][/tr] [tr] [td][b]key[/b][/td][td]string[/td] [td]✔[/td] [td]Web API Steamworks [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]key penerbit[/url] dengan perizinan [b]Transaksi Mikro[/b].…
[section]Ringkasan[/section] Fitur Keluarga Steam memungkinkan pengguna Steam untuk bermain game dari perpustakaan lima anggota keluarga terdekat (maks). Untuk info lebih lanjut tentang fitur ini, silakan kunjungi [url=https://store.steampowered.com/news/app/593110/view/4149575031735702628]postingan blog pengumuman[/url]. …
Untuk memfasilitasi game multipemain di Steam, ada banyak opsi yang tersedia dan jalan yang berbeda yang dapat diambil. Sebelum memulai, kamu sebaiknya sudah memiliki jawaban atas pertanyaan-pertanyaan berikut ini: [h4]Apakah game-mu sudah mendukung jaringan?…
[/b] A: Seiring waktu, kami telah melihat banyak jenis pendekatan dari game terhadap penentuan harga. Dulunya, grafik kami hanya menyertakan game premium, tapi itu jadi menutup keberadaan game-game populer yang gratis atau murah, di mana pemain biasanya membelanjakan Pas Musiman, ekspansi besar, atau berbagai jenis konten baru lainnya. …
[b]Jika kamu menyertakan Pas Musiman sebagai bagian dari opsi prapesan, halaman toko Pas Musiman harus terlihat.[/b] [section]Menyertakan Pas Musiman dalam Edisi Deluxe/Premium Game-mu[/section] Pas Musiman dapat disertakan dalam edisi Deluxe atau edisi premium game-mu yang lainnya. Untuk melakukannya, buat DLC Pas Musiman menggunakan langkah-langkah yang sama yang diuraikan di halaman dokumentasi ini. …
Misalnya, ketika perintah "move" selesai, maka bisa digunakan untuk mengatur titik jalan. Sekali lagi, logika semacam ini perlu diterapkan oleh game-nya sendiri. [code] "In Game Actions" { "actions" { "GameControls" { "title" "#Set_GameControls" "StickPadGyro" { "MoveCursor" { "title" "#Action_MoveCursor" "input_mode" "absolute_mouse" } "CameraPan" { "title" "#Action_CameraPan" "input_mode" "absolute_mouse" } "CameraZoom" { "title" "#Action_CameraZoom" "input_mode" "absolute_mouse" } } "Button" { "click" "#Action_Click" "cancel" "#Action_Cancel" "select" "#Action_Select" "select_add_remove" "#Action_AddRemove" "select_type" "#Action_SelectType" "select_idle" "#Action_SelectIdle" "move_attack" "#Action_MoveAttack" "move_no_attack" "#Action_Move" "attack_target" "#Action_Attack" "assign_group" "#Action_AssignGroup" "add_remove_group" "#Action_AddRemoveGroup" "select_group" "#Action_SelectGroup" "group_0" "#Action_Group0" "group_1" "#Action_Group1" "group_2" "#Action_Group2" "group_3" "#Action_Group3" "group_4" "#Action_Group4" "group_5" "#Action_Group5" "group_6" "#Action_Group6" "group_7" "#Action_Group7" "group_8" "#Action_Group8" "group_9" "#Action_Group9" } } "MenuControls" { "title" "#Set_MenuControls" "Button" { "MenuUp" "#Menu_Up" "MenuDown" "#Menu_Down" "MenuLeft" "#Menu_Left" "MenuRight" "#Menu_Right" "Affirm" "#Menu_Affirm" "Cancel" "#Menu_Cancel" "Other" "#Menu_Other" "ScrollUp" "#Menu_ScrollUp" "ScrollDown" "#Menu_ScrollDown" "DismissMenu" "#Menu_DismissMenu" } } } "action_layers" { "title" "#Layer_UnitMenu" "Button" { "stop" "#Unit_Stop" "hold" "#Unit_Hold" "patrol" "#Unit_Patrol" "follow" "#Unit_Follow" "queue" "#Unit_Queue" "unit_ability_1" "#Unit_Ability1" "unit_ability_2" "#Unit_Ability2" } "title" "#Layer_BuildMenu" "Button" { "build_0" "#Build_0" "build_1" "#Build_1" "build_2" "#Build_2" "build_3" "#Build_3" "build_4" "#Build_4" "build_5" "#Build_5" "build_6" "#Build_6" "build_7" "#Build_7" "build_8" "#Build_8" "build_9" "#Build_9" } } "localization" { "english" { "Set_GameControls" "Game Controls" "Set_MenuControls" "Menu Controls" "Layer_UnitMenu" "Unit Menu" "Layer_BuildMenu" "Build Menu" "Action_MoveCursor" "Move Cursor" "Action_CameraPan" "Pan camera" "Action_CameraZoom" "Zoom camera" "Action_Click" "Click mouse" "Action_Cancel" "Cancel" "Action_Select" "Select" "Action_AddRemove" "Add/remove from selection" "Action_SelectType" "Select all units of type" "Action_SelectIdle" "Select idle worker" "Action_MoveAttack" "Attack-Move" "Action_Move" "Move (no attack)" "Action_Attack" "Attack target" "Action_AssignGroup" "Assign group" "Action_AddRemoveGroup" "Add/remove from group" "Action_SelectGroup" "Select group" "Action_Group0" "Group 0" "Action_Group1" "Group 1" "Action_Group2" "Group 2" "Action_Group3" "Group 3" "Action_Group4" "Group 4" "Action_Group5" "Group 5" "Action_Group6" "Group 6" "Action_Group7" "Group 7" "Action_Group8" "Group 8" "Action_Group9" "Group 9" "Menu_Up" "Up" "Menu_Down" "Down" "Menu_Left" "Left" "Menu_Right" "Right" "Menu_Affirm" "Affirm" "Menu_Cancel" "Cancel" "Menu_Other" "Other" "Menu_ScrollUp" "Scroll Up" "Menu_ScrollDown" "Scroll Down" "Menu_DismissMenu" "Dismiss Menu" "Unit_Stop" "Stop" "Unit_Hold" "Hold ground" "Unit_Patrol" "Patrol" "Unit_Follow" "Follow" "Unit_Queue" "Queue action/waypoint" "Unit_Ability1" "Ability 1" "Unit_Ability2" "Ability 2" "Build_0" "Build option 0" "Build_1" "Build option 1" "Build_2" "Build option 2" "Build_3" "Build option 3" "Build_4" "Build option 4" "Build_5" "Build option 5" "Build_6" "Build option 6" "Build_7" "Build option 7" "Build_8" "Build option 8" "Build_9" "Build option 9" } } } [/code] [section=4x] Strategi 4X[/section] Ini digunakan untuk game strategi 4X sederhana, di mana kamu dapat menggerakkan unit di map utama, menguasai teritori (baik planet, pulau, ataupun kota), dan bertempur dengan kerajaan lain. …
Misalnya, di map utama kamu memiliki tindakan tambahan seperti selesaikan putaran, atau jalan-jalan di sekitar kolonimu. Dalam pertempuran, kamu bisa mengganti unit, dan memerintahkan untuk bergerak, menyerang, atau mundur. …
Untuk yang memiliki pengalaman dengan alat pengembangan Windows, jalan termudah ke pengembangan Linux adalah dengan menggunakan Visual Studio untuk Windows dan [url=https://marketplace.visualstudio.com/items?…
Into the Breach menggunakan gambar buatan mereka sendiri untuk kontroler Xbox/Steam Controller: [docimg=intothebreach_xbox.PNG]intothebreach_xbox.PNG[/docimg] PlayStation: [docimg=intothebreach_ps4.PNG]intothebreach_ps4.PNG[/docimg] dan kontroler Nintendo Switch: [docimg=intothebreach_switchpro.PNG]intothebreach_switchpro.PNG[/docimg] [callout=green]Catatan: Bahkan jika menggunakan gambar sendiri, kami menyarankanmu untuk tetap menggunakan gambar dari Steam ketika ada kontroler yang tidak dikenali, atau panggil fungsi pembantu kami untuk menemukan opsi terdekat yang ada saat game-mu dirilis sehingga ketika perangkat baru ditambahkan, glif yang cocok sudah tersedia.[/callout] [subsection]Menampilkan Glif Steam yang Siap Digunakan di Masa Depan[/subsection] Kamu harus memanfaatkan fungsi-fungsi berikut ini: [list] [*] [url=https://partner.steamgames.com/doc/api/ISteamInput#GetControllerForGamepadIndex]ISteamInput::GetControllerForGamepadIndex[/url] [*] [url=https://partner.steamgames.com/doc/api/ISteamInput#GetActionOriginFromXboxOrigin]ISteamInput::GetAnalogActionOriginFromXboxOrigin[/url] [*] [url=https://partner.steamgames.com/doc/api/isteaminput#GetGlyphForActionOrigin]ISteamInput::GetGlyphForActionOrigin[/url] [/list] Contoh kode: [code] // Berikan inisial pada antarmuka sebelum menggunakan fungsi individunya—ini hanya perlu dipanggil sekali! …
Sepertinya, Steam telah menambahkan dukungan untuk // kontroler baru. Mari kita ambil nilai terdekat yang didukung oleh SDK bawaan buttonOrigin = SteamInput()->TranslateActionOrigin( k_ESteamInputType_Unknown, buttonOrigin ); } // Ganti ini dengan fungsi dari game yang mengembalikan ilustrasimu dengan tombol int glyphTextureID = getHardCodedButtonGlyphTexture( buttonOrigin ); [/code] [subsection]Menggunakan RawInput untuk Mendeteksi Perangkat[/subsection] Beberapa game akan menggunakan RawInput untuk mendukung lebih dari 4 kontroler atau akan menggunakannya untuk menentukan apakah ada kontroler PlayStation yang terhubung. …
Secara default, kami tidak akan mengembalikan lobi yang sudah penuh, dan filter jarak ditentukan ke [apitype]ISteamMatchmaking::k_ELobbyDistanceFilterDefault[/apitype] (terdekat). Untuk menambahkan filter, sebelum kamu memanggil [code-inline]RequestLobbyList[/code-inline], kamu perlu memanggil satu atau beberapa fungsi pemfilteran ini: [list] [*] [api]ISteamMatchmaking::AddRequestLobbyListStringFilter[/api] - Menambahkan filter perbandingan string. [*] [api]ISteamMatchmaking::AddRequestLobbyListNumericalFilter[/api] - Menambahkan filter perbandingan numerik. [*] [api]ISteamMatchmaking::AddRequestLobbyListNearValueFilter[/api] - Mengurutkan hasil yang paling mendekati nilai yang ditentukan. [*] [api]ISteamMatchmaking::AddRequestLobbyListFilterSlotsAvailable[/api] - Memfilter untuk hanya mengembalikan lobi dengan jumlah slot tersedia yang ditentukan. [*] [api]ISteamMatchmaking::AddRequestLobbyListDistanceFilter[/api] - Mengatur jarak fisik ruang lobi yang harus dicari, berdasarkan alamat IP pengguna dan peta lokasi IP yang disimpan di Steam. [*] [api]ISteamMatchmaking::AddRequestLobbyListResultCountFilter[/api] - Menetapkan jumlah maksimum lobi yang akan dikembalikan. …
Beberapa opsi yang dapat dipertimbangkan: Ganti jenis game-mu menjadi game premium (sekali beli) atau F2P dengan transaksi mikro atau konten tambahan sebagai DLC. Silakan lihat artikel [doclink=/marketing/advertising]Beriklan di Steam[/doclink] untuk rinciannya. …
Misalnya, jika dibutuhkan 20 kemenangan, kamu dapat memanggil ini di 10 kemenangan untuk memberi tahu bahwa pengguna sudah mencapai setengah jalan. [*] Setiap kali satu atau lebih pencapaian dibuka, panggil [api]ISteamUserStats::SetAchievement[/api] untuk setiap pencapaian yang dibuka dan [api]ISteamUserStats::StoreStats[/api] untuk langsung mengunggahnya. …
[/td][/tr] [/table] [b]Contoh respons:[/b] [code] "response": { "results": [ { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "Package", "packageid": 123, "bundleid":777 "package_sale_type": "Steam", "platform": "Windows", "country_code": "AU", "base_price": "3995", "sale_price": "1995", "currency": "AUD", "gross_units_sold": 10, "gross_units_returned": -2, "gross_sales_usd": "311.7201", "gross_returns_usd": "-25.5322", "net_tax_usd": "26.0431", "primary_appid": 999, "additional_revenue_share_tier": 0, "net_units_sold": 8, "net_sales_usd": "260.1448", "combined_discount_id": 8888, "total_discount_percentage": 50 }, { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "Package", "packageid": 456, "package_sale_type": "Steam", "platform": "Windows", "country_code": "CA", "base_price": "5999", "sale_price": "5999", "currency": "CAD", "gross_units_sold": 100, "gross_units_returned": 0, "gross_sales_usd": "4309.0101", "gross_returns_usd": "0.0000", "net_tax_usd": "517.0812", "primary_appid": 1099, "additional_revenue_share_tier": 1, "viw_grant_partnerid": "5200", "net_units_sold": 100, "net_sales_usd": "3791.9288", }, { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "MicroTxn", "appid": 1099, "game_item_id": 1, "country_code": "US", "currency": "USD", "gross_units_sold": 2, "gross_units_returned": 0, "gross_sales_usd": "9.9800", "gross_returns_usd": "0.0000", "net_tax_usd": "0.9980", "primary_appid": 1099, "additional_revenue_share_tier": 1, "net_units_sold": 2, "net_sales_usd": "8.9820", "avg_sale_price_usd": "4.9900" }, { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "Package", "packageid": 123, "package_sale_type": "Retail", "platform": "Unknown", "country_code": "AE", "primary_appid": 999, "key_request_id": 7100, "gross_units_activated": 10 }, ], "key_request_info": [ { "key_request_id": 7100, "key_request_notes": "Keys for Key Markets", "game_code_id": 842, "game_code_description": "Retail Distribution - Middle East & North Africa", "territory_code_id": 0, "territory_code_description": "UNUSED" } ], "package_info": [ { "packageid": 123, "package_name": "Grate Expectations: Cheese Preparation Simulator - Deluxe Edition" }, { "packageid": 456, "package_name": "Grate Expectations 2: Curd Your Loins - Launch Edition" } ] "app_info": [ { "appid": 999, "app_name": "Grate Expectations: Cheese Preparation Simulator }, { "appid": 1099, "app_name": "Grate Expectations 2: Curd Your Loins" } ], "bundle_info": [ { "bundleid": 777, "bundle_name": "Grate Expectations Deluxe Bundle" }, ], "combined_discount_info": [ { "combined_discount_id": 8888, "combined_discount_name": "Bundle Discount", "total_discount_percentage": 50, "discount_ids": [11111] }, ], "game_item_info": [ { "appid": 1099, "game_item_id": 1, "game_item_description": "500 Grams of Whey", "game_item_category": "Essential Cheese Product" } ], "country_info": [ { "country_code": "AE", "country_name": "United Arab Emirates", "region": "Middle East & North Africa" }, { "country_code": "AU", "country_name": "Australia", "region": "Oceania" }, { "country_code": "CA", "country_name": "Canada", "region": "North America" }, { "country_code": "US", "country_name": "United States", "region": "North America" }, ], "max_id": "29481179373" [/code] [section=GetAppWishlistReporting]GetAppWishlistReporting[/section] [code=http]GET https://partner.steam-api.com/IPartnerFinancialsService/GetAppWishlistReporting/v001/[/code] [b]Nilai permintaan[/b][table] [tr][th]Nama[/th][th]Jenis[/th][th]Diperlukan[/th][th]Description[/th][/tr] [tr] [td][b]key[/b][/td][td]string[/td] [td]✔[/td] [td]Web API Steamworks [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]key penerbit[/url] dengan perizinan [b]Finansial[/b].…
[b]CATATAN:[/b] Jika [api]ISteamMatchmaking::AddRequestLobbyListDistanceFilter[/ap] tidak dipanggil, maka [apitype]ISteamMatchmaking::k_ELobbyDistanceFilterDefault[/apitype] akan digunakan dan hanya akan mencari kecocokan di wilayah yang sama atau yang terdekat. [b]CATATAN:[/b] Ini hanya akan mengembalikan lobi yang tidak penuh dan berjenis [apitype]ISteamMatchmaking::k_ELobbyTypePublic[/apitype] atau [apitype]ISteamMatchmaking::k_ELobbyTypeInvisible[/apitype], serta diatur sebagai lobi terbuka melalui fungsi [api]ISteamMatchmaking::SetLobbyJoinable[/api]. …
[/td][/tr] [tr][td]Pembalikan Pengikat Lingkar Luar[/td][td]Nyala, Mati[/td][td]Jika nyala, perintah akan dikirimkan saat berada di dalam radius dan bukan di luarnya. Sebagai contoh, perintah "Jalan" atau "Menyelinap" dapat dikirimkan saat berada di area tertentu.[/td][/tr] [/table] [section]Pad Tombol[/section] Input ini akan berfungsi sebagai set tombol. …
[/td][/tr] [tr][td]Pembalikan Pengikat Lingkar Luar[/td][td]Nyala, Mati[/td][td]Jika nyala, perintah akan dikirimkan saat berada di dalam radius dan bukan di luarnya. Sebagai contoh, perintah "Jalan" atau "Menyelinap" dapat dikirimkan saat berada di area tertentu.[/td][/tr] [tr][td]Mengembalikan Posisi Mouse Saat Berhenti[/td][td]Nyala, Mati[/td][td]Saat kamu berhenti menyentuh atau mematikan mode alternatif, haruskah mouse kembali ke posisi semula sebelum mode alternatif diaktifkan?…
[/td][/tr] [/table] Mengonfigurasi ulang kontroler untuk menggunakan set tindakan yang dimaksud (cth. "Menu", "Jalan", atau "Menyetir"). Ini dapat dipanggil berulang kali dengan aman dan tidak membutuhkan banyak sumber daya. Sering kali lebih mudah untuk berulang kali memanggilnya di siklus status, dibandingkan dengan mencoba menempatkannya di semua transisi status. …
Sepertinya, Steam telah menambahkan dukungan untuk // kontroler baru. Mari kita ambil nilai terdekat yang didukung oleh SDK bawaan buttonOrigin = SteamController()->TranslateActionOrigin( k_ESteamInputType_Unknown, buttonOrigin ) } // Ini adalah fungsi dari game yang mencoba untuk mendapatkan ilustrasi glif kustom int glyphTextureID = getHardCodedButtonGlyphTexture( actionOrigin ); [/code] [subsection=GetControllerBindingRevision]GetControllerBindingRevision[/subsection] [code=cpp]bool GetControllerBindingRevision( ControllerHandle_t controllerHandle, int *pMajor, int *pMinor );[/code] [table] [tr][th]Nama[/th][th]Jenis[/th][th]Deskripsi[/th][/tr] [tr][td][b]controllerHandle[/b][/td][td][apitype]ISteamController::ControllerHandle_t[/apitype][/td][td]Handle kontroler yang ingin dikueri.…
[/td][/tr] [/table] Mengonfigurasi ulang kontroler untuk menggunakan set tindakan yang ditentukan (mis. "Menu", "Walk (Jalan)", atau "Drive (Menyetir)"). Ini dapat dipanggil berulang kali dengan aman dan tidak membutuhkan banyak sumber daya. …