From 0603dae6ce327b52c8f96b21451dbc31b1e97b98 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Fri, 6 Jan 2012 17:54:03 +0200 Subject: [PATCH] Fix controller logical numbers Controller logical numbers were incorrect if port 1 was multitap but port 2 wasn't. Fix this. --- src/core/controller.cpp | 23 +++++++++++------------ src/core/misc.cpp | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/core/controller.cpp b/src/core/controller.cpp index bf406490..797a9e9b 100644 --- a/src/core/controller.cpp +++ b/src/core/controller.cpp @@ -273,23 +273,22 @@ namespace int controller_index_by_logical(unsigned lid) throw() { - bool p1multitap = (porttypes[0] == PT_MULTITAP); unsigned p1devs = port_types[porttypes[0]].devices; unsigned p2devs = port_types[porttypes[1]].devices; if(lid >= p1devs + p2devs) return -1; - if(!p1multitap) - if(lid < p1devs) - return lid; - else - return 4 + lid - p1devs; + //Exceptional: If p1 is none, map all to p2. + if(!p1devs) + return lid + MAX_CONTROLLERS_PER_PORT; + //LID 0 Is always PID 0 unless out of range. + if(lid == 0) + return 0; + //LID 1-n are on port 2. + else if(lid < 1 + p2devs) + return lid - 1 + MAX_CONTROLLERS_PER_PORT; + //From there, those are on port 1 (except for the first). else - if(lid == 0) - return 0; - else if(lid < 5) - return lid + 3; - else - return lid - 4; + return lid - p2devs; } int controller_index_by_analog(unsigned aid) throw() diff --git a/src/core/misc.cpp b/src/core/misc.cpp index 0392cd41..3304dae7 100644 --- a/src/core/misc.cpp +++ b/src/core/misc.cpp @@ -307,4 +307,4 @@ std::string format_address(void* addr) } std::string bsnes_core_version; -std::string lsnes_version = "1-β0"; +std::string lsnes_version = "1-β1"; -- 2.11.4.GIT