advmame 연사 기능 추가

advmame 에 연사 기능 추가하기 위해 advmame 메뉴 구조를 파악해 봅니다.

메뉴 추가

메뉴 표시를 위한 스크립트를 정의 하고 추가해 줍니다.

ui_text.h 에 script index 추가

UI_autofire,
UI_autofiredelay,

ui_text.c 에 script 문구를 추가해 줍니다.

"Set Autofire",			
"Autofire delay",

usrintrf.c 에 메뉴 선택히 호출되는 함수menu_set_autofire를 등록해 준다.

ADD_MENU(UI_autofire, menu_set_autofire, 0);

호출 되는 함수는 아래와 같은 구조를 갖음

static UINT32 menu_set_autofire(UINT32 state)

선택된 메뉴의 index는 아래와 같이 변환해서 사용합니다.

int selected = state & 0x3fff;

메뉴를 표시하기 위한 구조체를 초기화 하고

ui_menu_item item_list[10];
memset(item_list, 0, sizeof(item_list));

메뉴의 대표 항목(.text) 과 설정 값 항목(.subtext) 에 문자열을 대입하며 메뉴를 구성할 수 있습니다. 아래의 total 값은 전체 메뉴 개수에 해당합니다.

item_list[total].text = input_port_name(in);

if (in->autofire)
  item_list[total].subtext = ui_getstring(UI_on);
else
  item_list[total].subtext = ui_getstring(UI_off);

아래 함수를 호출하면 초기화된 메뉴 정보를 바탕으로 표시합니다.

ui_draw_menu(item_list, total, sel);

메뉴의 마지막 항목 선택 시 그리고 메뉴 빠져나가기 키 ESC 입력시 처리는 아래와 같이 합니다. return ui_menu_stack_pop(); 를 해야 이전 메뉴 화면이 표출이 됩니다.

if (input_ui_pressed(IPT_UI_SELECT))
{
  if (sel == total - 1) return ui_menu_stack_pop();
}

if (input_ui_pressed(IPT_UI_CANCEL))
  return ui_menu_stack_pop();

연사 동작 구현

inptport.c 에서

 static UINT8  autopressed[MAX_BITS_PER_PORT];

 int pressed = seq_pressed(input_port_seq(port, SEQ_TYPE_STANDARD));

 if (pressed) {
   if (port->autofire) {
     extern UINT32		autofiredelay;
     if (autopressed[bitnum] >= autofiredelay)
     {
       pressed = 0;
       autopressed[bitnum] = 0;
     }
     else
       autopressed[bitnum]++;							
   }
 }

게임별 딜레이 값 조절

Autofire delay 값은 기본 10 으로 하고 올림픽 게임인 trackfld 은 5 정도 너무 숫자가 낮으면 각도나 허들 점프시 타이밍 잡기 어려우니 적당한 수준으로 맞춘다.

한글 문구 표시

hangul.lng 파일내 문구 추가

Set Autofire
자동 연사설정			
Autofire delay
딜레이

advmame.rc 와 연동

advmame.rc 에서 항목 추가

autofire_delay 8

추가한 함수 emu.h

int get_autofire_delay(void);
void set_autofire_delay(int delay);

추가한 함수 input.c

int get_autofire_delay(void)
{
	struct advance_input_context* context = &CONTEXT.input;
	return context->config.autofire_delay;
}

void set_autofire_delay(int delay)
{
	struct advance_input_context* context = &CONTEXT.input;
	context->config.autofire_delay = delay;

	adv_conf* cfg_context = CONTEXT.cfg;
	conf_int_set_if_different(cfg_context, "", "autofire_delay", context->config.autofire_delay);
}

conf_int_set_if_different(cfg_context, "", "autofire_delay", context->config.autofire_delay); 할 때 default 값과 같으면 advmame.rc 에서 해당 항목이 삭제된다. 그외의 값은 변경된 값으로 advmame.rc 값이 갱신 됩니다.

  • 참고 ) conf_int_register_default(cfg_context, “autofire_delay”, 10);

    adv_error advance_input_init(struct advance_input_context* context, adv_conf* cfg_context) { …

      conf_int_register_default(cfg_context, "autofire_delay", 10);
    

    adv_error advance_input_config_load(struct advance_input_context* context, adv_conf* cfg_context) { …

      context->config.autofire_delay = conf_int_get_default(cfg_context, "autofire_delay");
    

변경된 소스 및 빌드 방법

git clone https://github.com/trngaje/advancemame.git

2023

rgb30 빌드 환경

1 분 소요

rgb30 기기를 위한 이미지는 크게 jelos와 arkos가 존재합니다. 각각 다른 빌드 환경에서 에뮬레이터/프론트엔드/코어를 빌드 합니다.

8bitdo m30 for linux

최대 1 분 소요

Press and hold for 5 sec. If LED blinks, the mode has changed. There are three modes that can be set, and they are as follows.

rgnano build sm64

최대 1 분 소요

빌드를 하기 위해서는 docker 환경 내에서 작업 합니다.

rgnano ffmpeg build

1 분 소요

ffmpeg, ffplay 를 구동하기 위한 빌드환경을 설명합니다.

rgnano build 환경

1 분 소요

rgnano 용 이미지는 2종 (anbernic 생산 버젼, funkey DrUm78 custom 버젼) 존재합니다. 빌드 환경이 서로 다르기 때문에 각각 빌드된 프로그램은 실행되지 않음

rgnano simplemenu 구동

1 분 소요

rgnano는 240x240 해상도를 갖고 있다. 하지만 simplemenu는 320x240, 640x480 테마만 가지고 있다. rgnano에서 simplemenu 프론트엔드를 적용하기 위해서 기존 테마를 가공한 필요가 있었다.

miyoo mini + advmenu ip 및 배터리 값 표시

최대 1 분 소요

휴대용 기기를 위한 ip 주소 값과 배터리 상태 값을 표시한다. advmenu.rc 상에서 값 읽는 스크립트를 자유롭게 바꿀 수 있게 설계 한다. 메뉴 일부분을 한글로 구현 한다. core와 에뮬레이터를 advmenu 메뉴를 통해 변경할 수 있다.

miyoo mini + docker

최대 1 분 소요

mm+ 용 에뮬레이터를 빌드하기 위해서는 아래 toolchain을 사용해야 합니다. build 확인된 commit 시점으로 이동합니다.

miyoo mini + key value

최대 1 분 소요

miyoo mini + generates keyboard value when press each button. button value is below.

ogu linapple 구동

1 분 소요

linapple은 sdl1.2 기반으로 구현되어 있습니다. ogu에서 구동하기 위해서는 sdl2.0으로 변경 필요합니다.

ogu bluealsa 설치

1 분 소요

bt a2dp sink 출력을 하기 위해서는 pulseaudio를 설치해야 합니다만, bt 오디오 출력이 없어도 일정 수준으로 cpu를 사용하고 있기 때문에 다른 대안 중에 하나가 bluealsa 입니다.

ogu xpadneo 구동

3 분 소요

BT gamepad에서 진동 기능을 사용하려면 xpadneo를 설치해야 합니다. 기기 내에 linuxheader 를 설치 하고

ogu dosbox pure 로 windows95/98 설치

1 분 소요

ogu 에서 windows 95/98 용 프로그램을 실행하기 위해서는 dosbox pure를 사용하여 windows 95/98을 설치해야 합니다. 설치하기 위한 hdd.img 를 만들고, window 95/98 cd를 설치한 후, 원하는 게임롬과 함께 windows 95/98 os...

ogu flycast

1 분 소요

libretro core github에 있는 flycast 동작이 이상합니다. 개선을 위해 보다 최신 github 소스를 사용해 봅니다

맨 위로 이동 ↑

2022

ogu devilutionX 구동

최대 1 분 소요

diablo 이미지를 구동하기 위한 엔진입니다. 아래 방법으로 빌드 할 수 있습니다. docker 환경에서 빌드 가능합니다.

ogu gl4es

최대 1 분 소요

64bit / 32bit 모두 빌드 가능합니다.

ogu box86,box64

최대 1 분 소요

pc linux 용 x86/x64 를 arm 기기에서 실행하기 위해서는 box86,box64 가 필요합니다.

ogu sdcard 인식문제 해결 방법

2 분 소요

v1.1 (2022/09/26) ubuntu 20.04 기본 이미지에서는 reboot 시 sdcard 인식되지 않는 문제를 해결하기 위해서는 uboot와 kernel을 수정해야 합니다.

ogu mame current

최대 1 분 소요

mame는 빌드시 memory를 많이 필요로 하기 때문에 빌드 중간에 멈추는 현상을 방지하려면 사전에 swap 메모리 확보가 필요합니다.

ogu backup image

최대 1 분 소요

recovery mode 진입 : l2 + r2 + power 키로 전원을 키면 recovery mode로 진입한다.

ogu log

최대 1 분 소요

불필요한 log 가 쌓이는 것을 막기 위해서는 사이즈 제한을 해야 합니다.

ogu openbor

최대 1 분 소요

sudo apt install libvpx-dev libvorbisidec-dev git clone https://github.com/DCurrent/openbor

ogu easyrpg

최대 1 분 소요

easyrpg standalone 사용방법

ogu toolchain

1 분 소요

pc 환경에서 ogu 소스를 빌드하기 위해서는 toolchain을 설치해야 합니다. pc에서 빌드해야 하는 소스는 linux kernel과 uboot 이 있습니다.

ogu core build

최대 1 분 소요

retroarch core build 관련해서 정리해 봅니다.

ogu attractmode

최대 1 분 소요

ogu 장치에 맞게 attracmode 구동을 위한 sfml 라이브러리를 변경합니다.

ogu libgo2 코드 libgou로 수정

최대 1 분 소요

libgo2 로 작성된 코드를 libgou로 대체하기. retrorun go2와 gou 코드를 비교하여 기존에 작성된 코드를 수정한다.

ogu 자동실행 구문 수정

1 분 소요

ubuntu 에서 부팅시 자동으로 emulationstation을 실행해 주고 있으나, killall 로 죽여도 살아나기 때문에 개발에는 적합하지 않아 수정해 줍니다.

miyoo-mini rumble motor 제어 방법

2 분 소요

기술 관련 전문 (motor 테스트 앱에 포함되어 있는 pdf 에 적혀 있는 내용을 내마음 대로 번역해 보았습니다.)

하루전날 테스트

최대 1 분 소요

Welcome 포스팅이 되지 않아 하루전날 파일 생성해서 테스트 해봅니다.

맨 위로 이동 ↑