이 강의는 MPPC (미소녀 & PocketPC)Pure Ani에게 저작권이 있습니다.

음..

저번 강의에서 미처 발견못한.. 파트를 추가하겠습니다.
(컨버터 만들면서 계속 나오기 때문에 그때마다 수정하는게 일이긴 합니다.)


이러한 것이 존재하는데, 보이스가 계속 증가하는게 아닌, 특정 보이스를 재생할때 사용됩니다.

예를 들면, 위의 이미지처럼 숫자가 아닌 문자가 조합되어있는 경우에도 사용을 합니다.

이것을 구현해보겠습니다.

  elsif ($line =~ /^\[voice type=\S name=\"(\S*)\"]$/)
# 만일 라인에 [voice type=문자 name="문자"]가 존재할경우..
  {
   print OUT "dwave 0,\"voice\\".$1."\.ogg\"\n";
# dwave 0,"voice\문자.ogg"를 작성한다.
  }


이런것도 한번 구현해보겠습니다.

[p2]를 작업했던 라인 바로 위에 추가합니다.

  elsif ($line =~ /^\[voice type=m number=(\d*)\](\S*)\[p2\]$/)
# 만일 라인에 [voice type=m number=숫자]문자[p2]가 존재할경우..
# 이 명령어로 재생하는 보이스는 m캐릭터 뿐이라 이렇게 코딩했습니다.
  {
   printf OUT ("dwave 0,\"voice\\m_%03d\.ogg\"\n",$1);
# dwave 0,"voice\m_숫자.ogg"를 작성한다.
   print OUT $2."\\\n";
# 문자를 작성한다.
  }


이러한 파트도 존재를 합니다.

  elsif ($line =~ /^\[(\S*) name=\"(\S*)\"\](\S*)\[p2\]$/)
# 라인에 [문자 name="문자2"]문자3[p2]가 존재할경우
  {
   my $text = $3;
# 변수 $text에 문자3을 넣는다.

   print OUT "dwave 0,\"voice\\".$2."\.ogg\"\n";
# dwave 0,"voice\문자2.ogg"를 작성한다.

   if ($1 =~ /m/)
# 만일 문자에 m이 존재할경우..
   {
    print OUT "深雪\n「".$text."\\\n";
# 深雪 줄바꿈 「문자3\를 작성한다.
   }
   elsif ($1 =~ /z/)
   {
    print OUT "静名\n「".$text."\\\n";
   }
   elsif ($1 =~ /ss/)
   {
    print OUT "深里\n「".$text."\\\n";
   }
  }


이러한것도 존재를 하는군요.

이것의 경우는 과거 작성해둔 elsif ($line =~ /^\[layer storage=\"(\S*)\" visible=true pos=center\]$/)를 부분적으로 수정하여 쓰겠습니다.

  elsif ($line =~ /^\[layer storage=(\S*)/)
# 기존의 코드를 사용하지 못하는 이유는 "가 존재하기 때문에 그것과 뒤의 파트를 날려버렸습니다.
  {
   print OUT "ld c,\"image\\".$1."\.png\"\nprint 1\n";
  }


표시를 했으면 지워야 하겠지요?

지우는 명령어를 코딩해보겠습니다.

  elsif ($line =~ /^\[layer visible=false]$/)
# 만일 라인에 [layer visible=false] 가 존재할경우..
  {
   print OUT "cl c\nprint 1\n";
# 가운데의 타치에를 지웁니다.
  }


이 문장의 경우는 [l][r]의 경우는 온스크립터의 @에 해당합니다.

다행히도 이 게임에서 캐릭터명과 함께 출력되는 없군요.

  elsif ($line =~ /(\S*)\[l\]\[r\]$/)
# 만일 라인에 [l][r]가 존재한다면..
  {
   print OUT $1."@\n";
# 변수$1@를 작성한다.
  }


루트분기 명령어입니다.

어느 호감도가 가장 높은지 선정해서 루트를 탑니다.

확인해본결과 z캐릭터가 호감도 최대 4상승, s캐릭터가 호감도 최대 2상승, m캐릭터가 1번 상승이군요.
(역시 센터캐릭은 뭔가 다르군요.)

  elsif ($line =~ /^\[route/)
# 만일 라인에 [route가 존재한다면..
  {
   print OUT "if %fm > %fz && %fm > %fs goto \*first_m_root\n";
# if %fm > %fz && %fm > %fs goto *first_m_root 를 작성합니다.
# m캐릭터의 호감도가 가장 클 경우 *first_m_root 라벨로 이동합니다.
# 구현은 이것 외에도 && 대신에 : if 등으로 작성해도 됩니다.
# 어느 한가지의 구현에는 여러가지 방법이 있고, 어떤 것을 선택할지는 프로그램을 작성하는 자의 선택입니다.
   print OUT "if %fz > %fm && %fz > %fs goto \*first_z_root\n";
   print OUT "if %fs > %fm && %fs > %fz goto \*first_s_root\n";
   print OUT "goto \*first_z_root\n";
# 만일 호감도가 가장 큰 캐릭이 없을 경우 *first_z_root 라벨로 이동합니다.
  }


대사를 보다보면 위의 이미지 2장과 같은 부분이 있는데..

딱 봤을때 반각이 있죠.
(더 있을 가능성도 있습니다. 대충 휘리릭 넘기면서 본거라.. 못본게 있을지도..)

저것을 전각으로 바꿔보겠습니다.

일단 기존의 [l][r]에 추가를 해보겠습니다.

  elsif ($line =~ /(\S*)\[l\]\[r\]$/)
  {
   my $text = $1;
   $text =~ s/"/”/ig;
# 반각 "가 존재할경우 전각 ”로 변환한다.
   $text =~ s/C/C/g;
# 반각 C가 존재할경우 전각 C로 변환다.
   $text =~ s/D/D/g;
   $text =~ s/F/F/g;
   print OUT $text."@\n";
  }

또 있을지 모르겠지만, 그건 추후에 발견되면 또 적겠습니다.

작성자 Pure Ani
출 처 MPPC (미소녀 & PocketPC)

Posted by Pure Ani

RE:D Cherish! -Eternity Blood- CRYSTALiA

放課後シンデレラ2 HOOKSOFT

花鐘カナデ*グラム NanaWind

フタマタ恋愛 ASa Project

スタディ§ステディ2 ま~まれぇど

リンパにATATA! ~メス牡蠣ミルクどぴゅらっしゅ~ Hending

創作彼女の恋愛公式 Aino+Links

流星ワールドアクター Heliodor

Secret Agent~騎士学園の忍びなるもの~ ensemble

天冥のコンキスタ エウシュリー

HaremKingdom -ハーレムキングダム- SMEE

ラズベリーキューブ まどそふと

ノラと皇女と野良猫ハート2 -Nora, Princess, and Crying Cat.- HARUKAZE

『ノラと皇女と野良猫ハート2』応援中♪

ピュアソングガーデン PULLTOP

はにデビ! Honey&Devil eufonie

姫繰三六五 HIMEKURI365

姫繰三六五 公式ウェブサイト

はるるみなもに! クロシェット

死に逝く君、館に芽吹く憎悪 バグシステム

Sanguinea-サングイネア- すにぃる

麗華の館 しすたーそふと

カスタムメイドオンライン KISS