[ONScripter] 나는 이렇게 컨버터를 제작했다. #011 빠트린것이 없는지 한번 확인해보쟈 강의이야기 | Posted on 2011. 9. 7. 23:03
게임마다 특정 명령어로 특별한 작업을 하는 게임들이 있습니다.
그런것들을 알아보겠습니다.
이 게임의 경우..
이러한 명령어들이 존재합니다.
[layer~ 의 경우 이미지 최 상단에 출력하는 명령어인데, 그냥 ld를 사용하여 구현하겠습니다.
(워차피 같은 위치라 캐릭터 이미지는 안보일테니까요.)
저것을 구현해보겠습니다.
elsif ($line =~ /^\[layer storage=\"(\S*)\" visible=true pos=center\]$/)
# 만일 라인에 [layer storage="문자" ~일경우..
{
print OUT "ld c,\"image\\".$1."\.png\"\n\nprint 1\n";
# ld c,"image\문자.png" 줄바꿈 print 1 을 작성합니다.
# 아랫라인에서 다시 타치에 명령어가 나오니 여기서는 타치에변수는 건드리지 않도록 하겠습니다.
}
위의 이미지에는 작업한 적이 없는 [fadeoutbgm time=3000] 라는것도 보이는데, 이것은 배경음악을 설정된 시간동안 페이드아웃해서 BGM을 종료하는 명령어입니다.
구현해보겠습니다.
elsif ($line =~ /\[fadeoutbgm time=(\d*)\]/)
# 만일 라인에 [fadeoutbgm time=숫자] 가 존재할경우..
{
print OUT "bgmfadeout ".$1."\n";
# bgmfadeout 숫자 를 작성한다.
}
그리고 [cross_m storage=문자 ~가 존재하는데, 이것은 화면에 달력을 표시하는 명령어입니다.
구현해보도록하겠습니다.
elsif ($line =~ /^\[cross_m storage=(\S{5})/)
# 만일 라인에 [cross_m storage=문자 가 존재할경우..
{
$tm = 0;
$tz = 0;
$ts = 0;
# 타치에변수 전부 초기화.
print OUT "cl a\nprint 1\n";
# 화면에 표시된 타치에는 전부 지웁니다.
print OUT "bg \"image\\".$1."\.png\",2\n";
# bg "image\문자.png",2 를 작성합니다.
}
이렇게 변환이 되게 됩니다.
달력을 표시하는 명령어에는 한가지가 더 있습니다.
이 명령어의 위편에는 웨이트가 존재하고 아래에는 이번에 추가할 명령어가 있습니다.
위편의 명령어에는 can~이 추가적으로 붙어있습니다.
기존에 작성했었던, elsif ($line =~ /\[wait time=(\d*)\]/)를 elsif ($line =~ /\[wait time=(\d*)/)로 수정합니다.
2번째 라인의 적용은 elsif ($line =~ /^\[cross_m storage=(\S{5})/)를 elsif ($line =~ /^\[cross_m(|2) storage=(\S{5})/)로 수정합니다.
그렇게 하면 두개의 라인이 적용이 됩니다.
그 다음에 빼먹은것이..
이것입니다.
앞의 문자는 캐릭터 뒤의 클리어는 클리어데이터를 작성하는 명령어입니다.
아래의 점프문장은 파일간의 점프를 의미합니다.
2가지를 코딩해보겠습니다.
elsif ($line =~ /^\[(\S)_clear\]$/)
# 만일 라인에 [문자_clear]이 존재할경우..
{
if ($1 =~ /m/)
# 만일 변수$1에 m이 존재할 경우..
{
print OUT "mov %cm,1\n";
# mov %cm,1 을 작성한다.
# clear캐릭명의 약자로 cm을 사용할 예정입니다.
}
elsif ($1 =~ /z/)
{
print OUT "mov %cz,1\n";
}
elsif ($1 =~ /s/)
{
print OUT "mov %cs,1\n";
}
}
elsif ($line =~ /^\[jump storage=(\S*).ks\]$/)
# 만일 라인에 [jump~가 존재할경우.
{
print OUT "goto \*L_".$1."\n";
# goto *L_파일명 을 작성합니다.
}
그 다음에 이벤트 CG를 봤는지 안봤는지를 저장하는 부분을 코딩해보겠습니다.
이미지는 [cross storage=파일명]으로 불러왔었으니 이곳에 추가를 하겠습니다.
print OUT "bg \"image\\".$bg[0]."\.png\",2\n";
if ($bg[0] =~ /event/)
# 만일 $bg[0]에 event가 존재한다면..
{
print OUT "mov %".$bg[0].",1\n";
# mov %$bg[0],1 을 작성합니다.
# 변수를 파일명 그대로를 사용할겁니다.
}
for (my $i=1; $i < @bg; $i++)
이렇게 하나의 스크립트 파일이 종료되었습니다.
다음 강의에서부터는 오마케루트 파일의 코딩을 시작하려고 합니다.
이 게임이 본편과 오마케편이 명령어가 다르더군요.
(다음 강의는 내일로 예정되어있습니다. 일단 오늘은 여기까지만 하고 자로갈거기에..)
작성자 Pure Ani
출 처 MPPC (미소녀 & PocketPC)