diff --git a/Data/Sys/GameSettings/RZDK01.ini b/Data/Sys/GameSettings/RZDK01.ini index 6f93b872ab..c260263504 100644 --- a/Data/Sys/GameSettings/RZDK01.ini +++ b/Data/Sys/GameSettings/RZDK01.ini @@ -1,41 +1,41 @@ -# RZDK01 - The Legend of Zelda: Twilight Princess [Wii] - -[OnFrame] -# Add memory patches to be applied every frame here. -$Hyrule Field Speed Hack -0x80047DEC:dword:0x60000000 -0x80047E08:dword:0x60000000 -0x80047E20:dword:0x60000000 -0x80047E3C:dword:0x60000000 - -0x80047E40:dword:0x60000000 -0x80047E44:dword:0x60000000 -0x80047E48:dword:0x60000000 -0x80047E4C:dword:0x60000000 -0x80047E50:dword:0x60000000 -0x80047E54:dword:0x60000000 -0x80047E58:dword:0x60000000 -0x80047E5C:dword:0x60000000 -0x80047E60:dword:0x60000000 -0x80047E64:dword:0x60000000 -0x80047E68:dword:0x60000000 -0x80047E6C:dword:0x60000000 -0x80047E70:dword:0x60000000 -0x80047E74:dword:0x60000000 -0x80047E78:dword:0x60000000 -0x80047E7C:dword:0x60000000 -0x80047E80:dword:0x60000000 -0x80047E84:dword:0x60000000 -0x80047E88:dword:0x60000000 -0x80047E8C:dword:0x60000000 - -0x80047E94:dword:0x60000000 -0x80047EB0:dword:0x60000000 -0x80047EC8:dword:0x60000000 -0x80047EE4:dword:0x60000000 - -[Patches_RetroAchievements_Verified] -$Hyrule Field Speed Hack - -[ActionReplay] -# Add action replay cheats here. +# RZDK01 - The Legend of Zelda: Twilight Princess [Wii] + +[OnFrame] +# Add memory patches to be applied every frame here. +$Hyrule Field Speed Hack +0x80047DEC:dword:0x60000000 +0x80047E08:dword:0x60000000 +0x80047E20:dword:0x60000000 +0x80047E3C:dword:0x60000000 + +0x80047E40:dword:0x60000000 +0x80047E44:dword:0x60000000 +0x80047E48:dword:0x60000000 +0x80047E4C:dword:0x60000000 +0x80047E50:dword:0x60000000 +0x80047E54:dword:0x60000000 +0x80047E58:dword:0x60000000 +0x80047E5C:dword:0x60000000 +0x80047E60:dword:0x60000000 +0x80047E64:dword:0x60000000 +0x80047E68:dword:0x60000000 +0x80047E6C:dword:0x60000000 +0x80047E70:dword:0x60000000 +0x80047E74:dword:0x60000000 +0x80047E78:dword:0x60000000 +0x80047E7C:dword:0x60000000 +0x80047E80:dword:0x60000000 +0x80047E84:dword:0x60000000 +0x80047E88:dword:0x60000000 +0x80047E8C:dword:0x60000000 + +0x80047E94:dword:0x60000000 +0x80047EB0:dword:0x60000000 +0x80047EC8:dword:0x60000000 +0x80047EE4:dword:0x60000000 + +[Patches_RetroAchievements_Verified] +$Hyrule Field Speed Hack + +[ActionReplay] +# Add action replay cheats here. diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt index aa4157a54b..295d1abf1a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt @@ -1,132 +1,132 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.skylanders.ui - -import android.app.AlertDialog -import android.content.Intent -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.AdapterView -import android.widget.AdapterView.OnItemClickListener -import android.widget.ArrayAdapter -import android.widget.Toast -import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import org.dolphinemu.dolphinemu.R -import org.dolphinemu.dolphinemu.activities.EmulationActivity -import org.dolphinemu.dolphinemu.databinding.DialogCreateSkylanderBinding -import org.dolphinemu.dolphinemu.databinding.ListItemNfcFigureSlotBinding -import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig -import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig.removeSkylander -import org.dolphinemu.dolphinemu.features.skylanders.model.SkylanderPair - -class SkylanderSlotAdapter( - private val slots: List, - private val activity: EmulationActivity -) : RecyclerView.Adapter(), OnItemClickListener { - class ViewHolder(var binding: ListItemNfcFigureSlotBinding) : - RecyclerView.ViewHolder(binding.getRoot()) - - private lateinit var binding: DialogCreateSkylanderBinding - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val inflater = LayoutInflater.from(parent.context) - val binding = ListItemNfcFigureSlotBinding.inflate(inflater, parent, false) - return ViewHolder(binding) - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val slot = slots[position] - holder.binding.textFigureName.text = slot.label - - holder.binding.buttonClearFigure.setOnClickListener { - removeSkylander(slot.portalSlot) - activity.clearSkylander(slot.slotNum) - } - - holder.binding.buttonLoadFigure.setOnClickListener { - val loadSkylander = Intent(Intent.ACTION_OPEN_DOCUMENT) - loadSkylander.addCategory(Intent.CATEGORY_OPENABLE) - loadSkylander.type = "*/*" - activity.setSkylanderData(0, 0, "", position) - activity.startActivityForResult( - loadSkylander, - EmulationActivity.REQUEST_SKYLANDER_FILE - ) - } - - val inflater = LayoutInflater.from(activity) - binding = DialogCreateSkylanderBinding.inflate(inflater) - - val nameList = SkylanderConfig.REVERSE_LIST_SKYLANDERS.keys.toMutableList() - nameList.sort() - val skylanderNames: ArrayList = ArrayList(nameList) - - binding.skylanderDropdown.setAdapter( - ArrayAdapter( - activity, R.layout.support_simple_spinner_dropdown_item, - skylanderNames - ) - ) - binding.skylanderDropdown.onItemClickListener = this - - holder.binding.buttonCreateFigure.setOnClickListener { - if (binding.getRoot().parent != null) { - (binding.getRoot().parent as ViewGroup).removeAllViews() - } - val createDialog = MaterialAlertDialogBuilder(activity) - .setTitle(R.string.create_skylander_title) - .setView(binding.getRoot()) - .setPositiveButton(R.string.create_figure, null) - .setNegativeButton(R.string.cancel, null) - .show() - createDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { - if (binding.skylanderId.text.toString().isNotBlank() && - binding.skylanderVar.text.toString().isNotBlank() - ) { - val createSkylander = Intent(Intent.ACTION_CREATE_DOCUMENT) - createSkylander.addCategory(Intent.CATEGORY_OPENABLE) - createSkylander.type = "*/*" - val id = binding.skylanderId.text.toString().toInt() - val variant = binding.skylanderVar.text.toString().toInt() - val name = SkylanderConfig.LIST_SKYLANDERS[SkylanderPair(id, variant)] - if (name != null) { - createSkylander.putExtra( - Intent.EXTRA_TITLE, - "$name.sky" - ) - activity.setSkylanderData(id, variant, name, position) - } else { - createSkylander.putExtra( - Intent.EXTRA_TITLE, - "Unknown(ID: " + id + "Variant: " + variant + ").sky" - ) - activity.setSkylanderData(id, variant, "Unknown", position) - } - activity.startActivityForResult( - createSkylander, - EmulationActivity.REQUEST_CREATE_SKYLANDER - ) - createDialog.dismiss() - } else { - Toast.makeText( - activity, R.string.invalid_skylander, - Toast.LENGTH_SHORT - ).show() - } - } - } - } - - override fun getItemCount(): Int { - return slots.size - } - - override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { - val skylanderIdVar = - SkylanderConfig.REVERSE_LIST_SKYLANDERS[parent.getItemAtPosition(position)] - binding.skylanderId.setText(skylanderIdVar!!.id.toString()) - binding.skylanderVar.setText(skylanderIdVar.variant.toString()) - } -} +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.skylanders.ui + +import android.app.AlertDialog +import android.content.Intent +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.AdapterView.OnItemClickListener +import android.widget.ArrayAdapter +import android.widget.Toast +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.dolphinemu.dolphinemu.R +import org.dolphinemu.dolphinemu.activities.EmulationActivity +import org.dolphinemu.dolphinemu.databinding.DialogCreateSkylanderBinding +import org.dolphinemu.dolphinemu.databinding.ListItemNfcFigureSlotBinding +import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig +import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig.removeSkylander +import org.dolphinemu.dolphinemu.features.skylanders.model.SkylanderPair + +class SkylanderSlotAdapter( + private val slots: List, + private val activity: EmulationActivity +) : RecyclerView.Adapter(), OnItemClickListener { + class ViewHolder(var binding: ListItemNfcFigureSlotBinding) : + RecyclerView.ViewHolder(binding.getRoot()) + + private lateinit var binding: DialogCreateSkylanderBinding + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ListItemNfcFigureSlotBinding.inflate(inflater, parent, false) + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val slot = slots[position] + holder.binding.textFigureName.text = slot.label + + holder.binding.buttonClearFigure.setOnClickListener { + removeSkylander(slot.portalSlot) + activity.clearSkylander(slot.slotNum) + } + + holder.binding.buttonLoadFigure.setOnClickListener { + val loadSkylander = Intent(Intent.ACTION_OPEN_DOCUMENT) + loadSkylander.addCategory(Intent.CATEGORY_OPENABLE) + loadSkylander.type = "*/*" + activity.setSkylanderData(0, 0, "", position) + activity.startActivityForResult( + loadSkylander, + EmulationActivity.REQUEST_SKYLANDER_FILE + ) + } + + val inflater = LayoutInflater.from(activity) + binding = DialogCreateSkylanderBinding.inflate(inflater) + + val nameList = SkylanderConfig.REVERSE_LIST_SKYLANDERS.keys.toMutableList() + nameList.sort() + val skylanderNames: ArrayList = ArrayList(nameList) + + binding.skylanderDropdown.setAdapter( + ArrayAdapter( + activity, R.layout.support_simple_spinner_dropdown_item, + skylanderNames + ) + ) + binding.skylanderDropdown.onItemClickListener = this + + holder.binding.buttonCreateFigure.setOnClickListener { + if (binding.getRoot().parent != null) { + (binding.getRoot().parent as ViewGroup).removeAllViews() + } + val createDialog = MaterialAlertDialogBuilder(activity) + .setTitle(R.string.create_skylander_title) + .setView(binding.getRoot()) + .setPositiveButton(R.string.create_figure, null) + .setNegativeButton(R.string.cancel, null) + .show() + createDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + if (binding.skylanderId.text.toString().isNotBlank() && + binding.skylanderVar.text.toString().isNotBlank() + ) { + val createSkylander = Intent(Intent.ACTION_CREATE_DOCUMENT) + createSkylander.addCategory(Intent.CATEGORY_OPENABLE) + createSkylander.type = "*/*" + val id = binding.skylanderId.text.toString().toInt() + val variant = binding.skylanderVar.text.toString().toInt() + val name = SkylanderConfig.LIST_SKYLANDERS[SkylanderPair(id, variant)] + if (name != null) { + createSkylander.putExtra( + Intent.EXTRA_TITLE, + "$name.sky" + ) + activity.setSkylanderData(id, variant, name, position) + } else { + createSkylander.putExtra( + Intent.EXTRA_TITLE, + "Unknown(ID: " + id + "Variant: " + variant + ").sky" + ) + activity.setSkylanderData(id, variant, "Unknown", position) + } + activity.startActivityForResult( + createSkylander, + EmulationActivity.REQUEST_CREATE_SKYLANDER + ) + createDialog.dismiss() + } else { + Toast.makeText( + activity, R.string.invalid_skylander, + Toast.LENGTH_SHORT + ).show() + } + } + } + } + + override fun getItemCount(): Int { + return slots.size + } + + override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { + val skylanderIdVar = + SkylanderConfig.REVERSE_LIST_SKYLANDERS[parent.getItemAtPosition(position)] + binding.skylanderId.setText(skylanderIdVar!!.id.toString()) + binding.skylanderVar.setText(skylanderIdVar.variant.toString()) + } +} diff --git a/Source/Android/app/src/main/res/layout/dialog_create_skylander.xml b/Source/Android/app/src/main/res/layout/dialog_create_skylander.xml index b367fbb278..7a3513a6ca 100644 --- a/Source/Android/app/src/main/res/layout/dialog_create_skylander.xml +++ b/Source/Android/app/src/main/res/layout/dialog_create_skylander.xml @@ -1,72 +1,72 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/Common/MinizipUtil.h b/Source/Core/Common/MinizipUtil.h index 29b365c028..87c6231fa0 100644 --- a/Source/Core/Common/MinizipUtil.h +++ b/Source/Core/Common/MinizipUtil.h @@ -1,48 +1,48 @@ -// Copyright 2019 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include - -#include - -#include "Common/CommonTypes.h" -#include "Common/ScopeGuard.h" - -namespace Common -{ -// Reads all of the current file. destination must be big enough to fit the whole file. -inline bool ReadFileFromZip(unzFile file, u8* destination, u64 len) -{ - const u64 MAX_BUFFER_SIZE = 65535; - - if (unzOpenCurrentFile(file) != UNZ_OK) - return false; - - Common::ScopeGuard guard{[&] { unzCloseCurrentFile(file); }}; - - u64 bytes_to_go = len; - while (bytes_to_go > 0) - { - // NOTE: multiples of 4G can't cause read_len == 0 && bytes_to_go > 0, as MAX_BUFFER_SIZE is - // small. - const u32 read_len = static_cast(std::min(bytes_to_go, MAX_BUFFER_SIZE)); - const int rv = unzReadCurrentFile(file, destination, read_len); - if (rv < 0) - return false; - - const u32 bytes_read = static_cast(rv); - bytes_to_go -= bytes_read; - destination += bytes_read; - } - - return unzEndOfFile(file) == 1; -} - -template -bool ReadFileFromZip(unzFile file, ContiguousContainer* destination) -{ - return ReadFileFromZip(file, reinterpret_cast(destination->data()), destination->size()); -} -} // namespace Common +// Copyright 2019 Dolphin Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include + +#include + +#include "Common/CommonTypes.h" +#include "Common/ScopeGuard.h" + +namespace Common +{ +// Reads all of the current file. destination must be big enough to fit the whole file. +inline bool ReadFileFromZip(unzFile file, u8* destination, u64 len) +{ + const u64 MAX_BUFFER_SIZE = 65535; + + if (unzOpenCurrentFile(file) != UNZ_OK) + return false; + + Common::ScopeGuard guard{[&] { unzCloseCurrentFile(file); }}; + + u64 bytes_to_go = len; + while (bytes_to_go > 0) + { + // NOTE: multiples of 4G can't cause read_len == 0 && bytes_to_go > 0, as MAX_BUFFER_SIZE is + // small. + const u32 read_len = static_cast(std::min(bytes_to_go, MAX_BUFFER_SIZE)); + const int rv = unzReadCurrentFile(file, destination, read_len); + if (rv < 0) + return false; + + const u32 bytes_read = static_cast(rv); + bytes_to_go -= bytes_read; + destination += bytes_read; + } + + return unzEndOfFile(file) == 1; +} + +template +bool ReadFileFromZip(unzFile file, ContiguousContainer* destination) +{ + return ReadFileFromZip(file, reinterpret_cast(destination->data()), destination->size()); +} +} // namespace Common