Разработка и ромхакинг > Ромхакинг и программирование
Обращение к создателям эмуляторов NES
<< < (3/3)
Sharpnull:
Мелочь, но... Я выбрал неправильный термин для горячей клавиши и переменных. Mirroring - в компьютерной сфере обычно означает "клонирование" экрана или как клоны сайтов (зеркала), хотя можно сказать mirror image (отражённое изображение). К тому же у NES есть понятие Mirroring. Для такого поворота изображения/картинки принято Horizontal/Vertical Flip(ping), а глагол Flip Horizontal(ly)/Vertical(ly). Так что нужно было назвать "Toggle Horizontal Flip" или "Toggle Horizontally Flipped Screen" (?).
Phil:

--- Цитата: Sharpnull от 19 Май 2019, 19:52:45 ---Что было изменено в коде:
Код:

### src/fceu.cpp
// В конец функции
void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int skip) {
// добавить
    extern int screenMirroring;
    if (screenMirroring) {
        for (int y = 0; y < 256; y++) {
            for (int x = 0; x < 256; x++) {
                XBuf[y * 256 + x] = XBackBuf[y * 256 + 255 - x];
            }
        }
    }

### src/input.h
// Вместо EMUCMD_MAX
EMUCMD_TOOL_MIRRORING, EMUCMD_MAX

### src/input.cpp
// Вместо #include "drivers/win/taseditor.h"
#include "drivers/win/taseditor.h"
#include "drivers/win/input.h"
// Вместо static void DebuggerStepInto(void);
static void DebuggerStepInto(void);
static void ScreenMirroring(void);
// После "Debugger - Step Into", EMUCMDFLAG_TASEDITOR }, добавить
{ EMUCMD_TOOL_MIRRORING, EMUCMDTYPE_MISC, ScreenMirroring, 0, 0, "Toggle Screen Mirroring", EMUCMDFLAG_TASEDITOR },

// Добавить в конец
int screenMirroring = 0;
void ScreenMirroring(void)
{
    screenMirroring ^= 1;
    extern ButtConfig GamePadConfig[4][12];
    for (int i = 0; i < 4; i++)
        swap(GamePadConfig[6], GamePadConfig[7]);
}

### src/drivers/win/main.cpp
// Вместо SaveConfig(TempArray);
extern ButtConfig GamePadConfig[4][12];
    extern int screenMirroring;
    for (int i = 0; screenMirroring && i < 4; i++)
        swap(GamePadConfig[6], GamePadConfig[7]);
    SaveConfig(TempArray);

--- Конец цитаты ---

Попробовал в Линухе скомпилировать исправленную версию (оригинальный код компилируется), но вот такая беда:
..........
/usr/include/c++/7/bits/exception_ptr.h:166:5: note:   'std::__exception_ptr::swap'
     swap(exception_ptr& __lhs, exception_ptr& __rhs)
     ^~~~
src/input.cpp: At global scope:
src/input.cpp:927:13: warning: 'void CommandUnImpl()' defined but not used [-Wunused-function]
 static void CommandUnImpl(void)
             ^~~~~~~~~~~~~
scons: *** [src/input.o] Error 1
scons: building terminated because of errors.


Phil:
Ну, соответственно, здесь кину ссылку на тему-близнец с информацией о puNES 0.106  с функцией зеркалирования.
http://www.emu-land.net/forum/index.php/topic,76586.msg1475560.html#msg1475560
Dukatti:

--- Цитата: Ogr от 17 Май 2019, 21:46:23 ---Quote from: Mr2 on 17 May 2019, 21:07:57
менять конфиг RetroArch
можно в CRT-Royale отзеркалить, поставив в настройках присета ширину экрана в минус.
--- Конец цитаты ---
в ReShade Depth3D тоже работает. При отрицательных или экстремально больших вне диапазона [обычного двойного клика] значениях.
Существует еще Actual Multiple Monitors, где имея 2 монитора можно иметь и оригинальное, и отраженное изображение одновременно.
[не недооценивайте эту возможность и не откладывайте ее настройки на потом, особенно если работаете с графикой]
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии