mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-03 07:10:42 -07:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c0698a3872 | |||
| 1ed3521091 | |||
| 0dda920448 | |||
| 5f7580b69e |
@@ -1,3 +1,8 @@
|
|||||||
|
09/22/2025 [spice2x]
|
||||||
|
Add Polaris Chord lights
|
||||||
|
Add boot.dll to Gitadora patches target
|
||||||
|
Misc fixes
|
||||||
|
|
||||||
09/20/2025 [spice2x]
|
09/20/2025 [spice2x]
|
||||||
Polaris Chord support for knobs/turntables/mouse as fader input
|
Polaris Chord support for knobs/turntables/mouse as fader input
|
||||||
Misc fixes
|
Misc fixes
|
||||||
|
|||||||
@@ -415,6 +415,19 @@ namespace games::pc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct PolarisChordLight {
|
||||||
|
int data_index;
|
||||||
|
games::pc::Lights::pc_lights_t light;
|
||||||
|
PolarisChordLight(
|
||||||
|
int data_index, games::pc::Lights::pc_lights_t light) :
|
||||||
|
data_index(data_index), light(light) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void set_led_value(games::pc::Lights::pc_lights_t light, uint8_t value) {
|
||||||
|
auto &lights = games::pc::get_lights();
|
||||||
|
GameAPI::Lights::writeLight(RI_MGR, lights.at(light), value / 255.f);
|
||||||
|
}
|
||||||
|
|
||||||
void __fastcall aioIob2Bi2xAC1_SetTapeLedDataPart(AIO_IOB2_BI2X_AC1 *i_pNodeCtl, uint32_t i_TapeLedCh,
|
void __fastcall aioIob2Bi2xAC1_SetTapeLedDataPart(AIO_IOB2_BI2X_AC1 *i_pNodeCtl, uint32_t i_TapeLedCh,
|
||||||
uint32_t i_Offset, uint8_t *i_pData,
|
uint32_t i_Offset, uint8_t *i_pData,
|
||||||
uint32_t i_cntTapeLed, bool i_bReverse) {
|
uint32_t i_cntTapeLed, bool i_bReverse) {
|
||||||
@@ -422,8 +435,82 @@ namespace games::pc {
|
|||||||
return aioIob2Bi2xAC1_SetTapeLedDataPart_orig(i_pNodeCtl, i_TapeLedCh, i_Offset, i_pData, i_cntTapeLed, i_bReverse);
|
return aioIob2Bi2xAC1_SetTapeLedDataPart_orig(i_pNodeCtl, i_TapeLedCh, i_Offset, i_pData, i_cntTapeLed, i_bReverse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO implement tape led
|
// log_info(
|
||||||
// there are >200 lights in total, adding each one separately probably isn't the best idea...
|
// "pc",
|
||||||
|
// "lamp [{}] [{}] = {},{},{}, cnt={}",
|
||||||
|
// i_TapeLedCh,
|
||||||
|
// i_Offset,
|
||||||
|
// i_pData[0], i_pData[1], i_pData[2],
|
||||||
|
// i_cntTapeLed);
|
||||||
|
|
||||||
|
// [channel 0]
|
||||||
|
// these are button lamps; there are 12 buttons (columns) with this layout:
|
||||||
|
//
|
||||||
|
// 0 5 8 11 14 16 | 18 20 22 25 28 31
|
||||||
|
// 1 6 9 12 15 17 | 19 21 23 26 29 32
|
||||||
|
// 2 7 10 13 | 24 27 30 33
|
||||||
|
// 3 | 34
|
||||||
|
// 4 | 35
|
||||||
|
//
|
||||||
|
// 36 RGB lamps * 3 = 108 LEDs
|
||||||
|
// each value ranges from [0, 255]
|
||||||
|
// (we only care about the top row)
|
||||||
|
|
||||||
|
static PolarisChordLight button_lights_mapping[] = {
|
||||||
|
{(0 * 3) + 0, games::pc::Lights::pc_lights_t::Button1_R},
|
||||||
|
{(0 * 3) + 1, games::pc::Lights::pc_lights_t::Button1_G},
|
||||||
|
{(0 * 3) + 2, games::pc::Lights::pc_lights_t::Button1_B},
|
||||||
|
|
||||||
|
{(5 * 3) + 0, games::pc::Lights::pc_lights_t::Button2_R},
|
||||||
|
{(5 * 3) + 1, games::pc::Lights::pc_lights_t::Button2_G},
|
||||||
|
{(5 * 3) + 2, games::pc::Lights::pc_lights_t::Button2_B},
|
||||||
|
|
||||||
|
{(8 * 3) + 0, games::pc::Lights::pc_lights_t::Button3_R},
|
||||||
|
{(8 * 3) + 1, games::pc::Lights::pc_lights_t::Button3_G},
|
||||||
|
{(8 * 3) + 2, games::pc::Lights::pc_lights_t::Button3_B},
|
||||||
|
|
||||||
|
{(11 * 3) + 0, games::pc::Lights::pc_lights_t::Button4_R},
|
||||||
|
{(11 * 3) + 1, games::pc::Lights::pc_lights_t::Button4_G},
|
||||||
|
{(11 * 3) + 2, games::pc::Lights::pc_lights_t::Button4_B},
|
||||||
|
|
||||||
|
{(14 * 3) + 0, games::pc::Lights::pc_lights_t::Button5_R},
|
||||||
|
{(14 * 3) + 1, games::pc::Lights::pc_lights_t::Button5_G},
|
||||||
|
{(14 * 3) + 2, games::pc::Lights::pc_lights_t::Button5_B},
|
||||||
|
|
||||||
|
{(16 * 3) + 0, games::pc::Lights::pc_lights_t::Button6_R},
|
||||||
|
{(16 * 3) + 1, games::pc::Lights::pc_lights_t::Button6_G},
|
||||||
|
{(16 * 3) + 2, games::pc::Lights::pc_lights_t::Button6_B},
|
||||||
|
|
||||||
|
{(18 * 3) + 0, games::pc::Lights::pc_lights_t::Button7_R},
|
||||||
|
{(18 * 3) + 1, games::pc::Lights::pc_lights_t::Button7_G},
|
||||||
|
{(18 * 3) + 2, games::pc::Lights::pc_lights_t::Button7_B},
|
||||||
|
|
||||||
|
{(20 * 3) + 0, games::pc::Lights::pc_lights_t::Button8_R},
|
||||||
|
{(20 * 3) + 1, games::pc::Lights::pc_lights_t::Button8_G},
|
||||||
|
{(20 * 3) + 2, games::pc::Lights::pc_lights_t::Button8_B},
|
||||||
|
|
||||||
|
{(22 * 3) + 0, games::pc::Lights::pc_lights_t::Button9_R},
|
||||||
|
{(22 * 3) + 1, games::pc::Lights::pc_lights_t::Button9_G},
|
||||||
|
{(22 * 3) + 2, games::pc::Lights::pc_lights_t::Button9_B},
|
||||||
|
|
||||||
|
{(25 * 3) + 0, games::pc::Lights::pc_lights_t::Button10_R},
|
||||||
|
{(25 * 3) + 1, games::pc::Lights::pc_lights_t::Button10_G},
|
||||||
|
{(25 * 3) + 2, games::pc::Lights::pc_lights_t::Button10_B},
|
||||||
|
|
||||||
|
{(28 * 3) + 0, games::pc::Lights::pc_lights_t::Button11_R},
|
||||||
|
{(28 * 3) + 1, games::pc::Lights::pc_lights_t::Button11_G},
|
||||||
|
{(28 * 3) + 2, games::pc::Lights::pc_lights_t::Button11_B},
|
||||||
|
|
||||||
|
{(31 * 3) + 0, games::pc::Lights::pc_lights_t::Button12_R},
|
||||||
|
{(31 * 3) + 1, games::pc::Lights::pc_lights_t::Button12_G},
|
||||||
|
{(31 * 3) + 2, games::pc::Lights::pc_lights_t::Button12_B},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (i_TapeLedCh == 0 && i_Offset == 0 && i_cntTapeLed == 108) {
|
||||||
|
for (const auto &map : button_lights_mapping) {
|
||||||
|
set_led_value(map.light, i_pData[map.data_index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void __fastcall aioIob2Bi2x_SetTapeLedDataGroup(AIO_IOB2_BI2X_AC1* i_pNodeCtl, uint32_t i_bfGroup) {
|
void __fastcall aioIob2Bi2x_SetTapeLedDataGroup(AIO_IOB2_BI2X_AC1* i_pNodeCtl, uint32_t i_bfGroup) {
|
||||||
|
|||||||
@@ -71,7 +71,55 @@ std::vector<Light> &games::pc::get_lights() {
|
|||||||
&lights,
|
&lights,
|
||||||
"IC Reader R",
|
"IC Reader R",
|
||||||
"IC Reader G",
|
"IC Reader G",
|
||||||
"IC Reader B"
|
"IC Reader B",
|
||||||
|
|
||||||
|
"Button 1 R",
|
||||||
|
"Button 1 G",
|
||||||
|
"Button 1 B",
|
||||||
|
|
||||||
|
"Button 2 R",
|
||||||
|
"Button 2 G",
|
||||||
|
"Button 2 B",
|
||||||
|
|
||||||
|
"Button 3 R",
|
||||||
|
"Button 3 G",
|
||||||
|
"Button 3 B",
|
||||||
|
|
||||||
|
"Button 4 R",
|
||||||
|
"Button 4 G",
|
||||||
|
"Button 4 B",
|
||||||
|
|
||||||
|
"Button 5 R",
|
||||||
|
"Button 5 G",
|
||||||
|
"Button 5 B",
|
||||||
|
|
||||||
|
"Button 6 R",
|
||||||
|
"Button 6 G",
|
||||||
|
"Button 6 B",
|
||||||
|
|
||||||
|
"Button 7 R",
|
||||||
|
"Button 7 G",
|
||||||
|
"Button 7 B",
|
||||||
|
|
||||||
|
"Button 8 R",
|
||||||
|
"Button 8 G",
|
||||||
|
"Button 8 B",
|
||||||
|
|
||||||
|
"Button 9 R",
|
||||||
|
"Button 9 G",
|
||||||
|
"Button 9 B",
|
||||||
|
|
||||||
|
"Button 10 R",
|
||||||
|
"Button 10 G",
|
||||||
|
"Button 10 B",
|
||||||
|
|
||||||
|
"Button 11 R",
|
||||||
|
"Button 11 G",
|
||||||
|
"Button 11 B",
|
||||||
|
|
||||||
|
"Button 12 R",
|
||||||
|
"Button 12 G",
|
||||||
|
"Button 12 B"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,55 @@ namespace games::pc {
|
|||||||
IC_READER_R,
|
IC_READER_R,
|
||||||
IC_READER_G,
|
IC_READER_G,
|
||||||
IC_READER_B,
|
IC_READER_B,
|
||||||
|
|
||||||
|
Button1_R,
|
||||||
|
Button1_G,
|
||||||
|
Button1_B,
|
||||||
|
|
||||||
|
Button2_R,
|
||||||
|
Button2_G,
|
||||||
|
Button2_B,
|
||||||
|
|
||||||
|
Button3_R,
|
||||||
|
Button3_G,
|
||||||
|
Button3_B,
|
||||||
|
|
||||||
|
Button4_R,
|
||||||
|
Button4_G,
|
||||||
|
Button4_B,
|
||||||
|
|
||||||
|
Button5_R,
|
||||||
|
Button5_G,
|
||||||
|
Button5_B,
|
||||||
|
|
||||||
|
Button6_R,
|
||||||
|
Button6_G,
|
||||||
|
Button6_B,
|
||||||
|
|
||||||
|
Button7_R,
|
||||||
|
Button7_G,
|
||||||
|
Button7_B,
|
||||||
|
|
||||||
|
Button8_R,
|
||||||
|
Button8_G,
|
||||||
|
Button8_B,
|
||||||
|
|
||||||
|
Button9_R,
|
||||||
|
Button9_G,
|
||||||
|
Button9_B,
|
||||||
|
|
||||||
|
Button10_R,
|
||||||
|
Button10_G,
|
||||||
|
Button10_B,
|
||||||
|
|
||||||
|
Button11_R,
|
||||||
|
Button11_G,
|
||||||
|
Button11_B,
|
||||||
|
|
||||||
|
Button12_R,
|
||||||
|
Button12_G,
|
||||||
|
Button12_B
|
||||||
|
|
||||||
} pc_lights_t;
|
} pc_lights_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#include "avs/game.h"
|
||||||
#include "games/io.h"
|
#include "games/io.h"
|
||||||
#include "cfg/screen_resize.h"
|
#include "cfg/screen_resize.h"
|
||||||
#include "hooks/graphics/backends/d3d9/d3d9_backend.h"
|
#include "hooks/graphics/backends/d3d9/d3d9_backend.h"
|
||||||
@@ -88,13 +89,32 @@ namespace overlay::windows {
|
|||||||
void GenericSubScreen::touch_transform(const ImVec2 xy_in, LONG *x_out, LONG *y_out) {}
|
void GenericSubScreen::touch_transform(const ImVec2 xy_in, LONG *x_out, LONG *y_out) {}
|
||||||
|
|
||||||
void GenericSubScreen::build_content() {
|
void GenericSubScreen::build_content() {
|
||||||
|
this->flags |= ImGuiWindowFlags_NoBackground;
|
||||||
|
|
||||||
if (this->disabled_message.has_value()) {
|
if (this->disabled_message.has_value()) {
|
||||||
this->flags &= ~ImGuiWindowFlags_NoBackground;
|
this->flags &= ~ImGuiWindowFlags_NoBackground;
|
||||||
ImGui::TextColored(YELLOW, "%s", this->disabled_message.value().c_str());
|
ImGui::TextColored(YELLOW, "%s", this->disabled_message.value().c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->draw_texture();
|
this->draw_texture();
|
||||||
|
|
||||||
|
if (!this->texture) {
|
||||||
|
this->flags &= ~ImGuiWindowFlags_NoBackground;
|
||||||
|
ImGui::TextColored(YELLOW, "Failed to acquire surface texture for subscreen.");
|
||||||
|
if (avs::game::is_model("LDJ")) {
|
||||||
|
ImGui::TextColored(
|
||||||
|
YELLOW,
|
||||||
|
"Ensure that you are using the correct DLL type, \n"
|
||||||
|
"or patch the DLL to properly enable TDJ mode.");
|
||||||
|
} else if (avs::game::is_model("KFC")) {
|
||||||
|
ImGui::TextColored(
|
||||||
|
YELLOW,
|
||||||
|
"Ensure that you did not accidentally enable a patch \n"
|
||||||
|
"that turns off subscreen rendering.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if OVERLAYDBG
|
#if OVERLAYDBG
|
||||||
if (this->status_message.has_value()) {
|
if (this->status_message.has_value()) {
|
||||||
log_warning("sub::overlay", "{}", this->status_message.value().c_str());
|
log_warning("sub::overlay", "{}", this->status_message.value().c_str());
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace overlay::windows {
|
|||||||
if (GRAPHICS_IIDX_WSUB) {
|
if (GRAPHICS_IIDX_WSUB) {
|
||||||
this->disabled_message =
|
this->disabled_message =
|
||||||
"Close this overlay and use the second window.\n"
|
"Close this overlay and use the second window.\n"
|
||||||
"Or, turn on -iidxnosub to use the overlay instead.";
|
"If you don't see the window, double check your DLL type and apply TDJ I/O patches as needed.";
|
||||||
this->draws_window = false;
|
this->draws_window = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace overlay::windows {
|
|||||||
{"arkmmd.dll", {"gamemmd.dll"}},
|
{"arkmmd.dll", {"gamemmd.dll"}},
|
||||||
{"arkklp.dll", {"lpac.dll"}},
|
{"arkklp.dll", {"lpac.dll"}},
|
||||||
{"arknck.dll", {"weac.dll"}},
|
{"arknck.dll", {"weac.dll"}},
|
||||||
{"gdxg.dll", {"game.dll", "libshare-pj.dll"}}
|
{"gdxg.dll", {"game.dll", "libshare-pj.dll", "boot.dll"}}
|
||||||
};
|
};
|
||||||
|
|
||||||
static size_t url_recent_idx = -1;
|
static size_t url_recent_idx = -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user