рдХреБрд▓реА рджреГрд╢реНрдп рдЙрдкрдиреНрдпрд╛рд╕ рдЗрдВрдЬрди рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛



рджреГрд╢реНрдп рд▓рдШреБ рдХрдерд╛рдУрдВ рдХрд╛ рдПрдХ рд╢реМрдХрд┐рдпрд╛ рдЕрдиреБрд╡рд╛рдж, рдЬрдм рдЕрдиреНрдп рдЦреЗрд▓реЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╕рднреА рджреГрд╢реНрдп рдЙрдкрдиреНрдпрд╛рд╕реЛрдВ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╛рдкрд╛рдиреА рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЗрд╡рд▓ рдХреБрдЫ рдХрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдпрд╛ рд╢реМрдХреАрдиреЛрдВ рджреНрд╡рд╛рд░рд╛), рдФрд░ рдЗрд╕рд╕реЗ рднреА рдХрдо рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕рд▓рд┐рдП, рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЬрд╛рдкрд╛рдиреА рдЗрдВрдЬрдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рдЕрд╣рд╕рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд╛рдж рдХреМрд╢рд▓, рднрд╛рд╖рд╛ рдХрд╛ рдЬреНрдЮрд╛рди, рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣ рдФрд░ рдЦрд╛рд▓реА рд╕рдордп рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЦреЗрд▓ рдХреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬрд▓реНрдж рд╣реА рджрд┐рди рдХрд╛ рдкреНрд░рдХрд╛рд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдмрд╣реБрдд рд╣реА рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рдЦреЗрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рди рд╕рд┐рд░реНрдл рджреГрд╢реНрдп рд▓рдШреБ рдХрдерд╛рдПрдБ) рдХрд╛ рдЕрд░реНрде рд╣реИ:

  • рдЦреЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдирд╛ (рдпрджрд┐ рд╡реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ)
  • рдЖрд╡рд╢реНрдпрдХ рднрд╛рдЧреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж
  • рд░рд┐рд╡рд░реНрд╕ рдкреИрдХрд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрд╛рдкрд╛рдиреА рджреГрд╢реНрдп рд▓рдШреБ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  • рдЦреЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛
  • рдЦреЗрд▓ рдХреЗ рдкрд╛рда рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж (рдЦреЗрд▓ рд▓рд┐рдкрд┐)
  • рдЦреЗрд▓ рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХ рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж
  • рд░рд┐рд╡рд░реНрд╕ рдкреИрдХрд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
  • рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

2013 рдореЗрдВ рд╡рд╛рдкрд╕ (рдФрд░ рд╕рдВрднрд╡рддрдГ рдкрд╣рд▓реЗ) рдореИрдВрдиреЗ рдЬрд╛рдкрд╛рдиреА рдЙрдкрдиреНрдпрд╛рд╕ рд╡рд┐рдЬрд╝реБрдУ рдЙрдкрдиреНрдпрд╛рд╕ рдмрд┐рдВрдЬрд╝реЛ рдордВрдЧреЗрдХреАрдЙ-рдиреЛрд░реЛрд╡рд╛рд░реЗрд╢реА рдбреЗрдВрд╕реЗрдЯреНрд╕реВ рдиреЛ рд╢реБрдЬрд╝реЛ- (ч╛О х░Схе│ ф╕З шПп щПб хСк - хСк уВП possibly possibly possibly possibly х░Схе│ -) рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯрд┐рдВрдЧ рдЧреЗрдореНрд╕ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдХрд┐рд░рдХрд┐рд░реА рдЬреИрд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рдЗрдВрдЬрдиреЛрдВ рдкрд░ рдХреЗрд╡рд▓ рд▓рдШреБ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдерд╛ред

рдпрд╣рд╛рдВ, рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рдХреА рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ рдЗрд╕ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд╣рд╛рдиреА рдХреЗ рдЗрдВрдЬрди рдХреЛ рдЦреЛрд▓рдирд╛ рдерд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╛рда рдореЗрдВ рдЦреБрдж рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрдВред

рдЖрдЗрдП .exe рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд░реНрдгрди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ QLIE рдФрд░ IMOSURUME рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реА рд▓рд╛рдЗрди FastMM рдмреЛрд░рд▓реИрдВрдб рд╕рдВрд╕реНрдХрд░рдг 2004, 2005 рдкрд┐рдпрд░реЗ рд▓реЗ рд░рд┐рдЪреЗ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрдВрдЬрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдбреЗрд▓реНрдлреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред



рдПрдХ рддреНрд╡рд░рд┐рдд рдЧреБрдЧрд▓реА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреВрд▓реА рд╡рд╛рд░реНрдорде рдПрдВрдЯрд░рдЯреЗрдирдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рджреГрд╢реНрдп рдЙрдкрдиреНрдпрд╛рд╕ рдЗрдВрдЬрди рдХрд╛ рдирд╛рдо рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ IMOSURUME рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдирд╛рдо рд╣реИ, рдФрд░ Qlie рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдирд╛рдо рд╣реИред рдПрдХ рд╕рд╛рдЗрдЯ qlie.net рд╣реИ , рдЬреЛ рдЗрд╕ рдЗрдВрдЬрди рдкрд░ рдЬрд╛рд░реА рдЦреЗрд▓реЛрдВ рдФрд░ рд╡рд╛рд░реНрдорде рдПрдВрдЯрд░рдЯреЗрдирдореЗрдВрдЯ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИред

рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рди рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрдкрдХрд░рдг рд╣реИрдВ, рди рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ, рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП, рдЦреЗрд▓ рд╕реЗ рдЦреБрдж рдХреЛ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЦреЗрд▓ рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЧреЗрдо рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ \ GameData рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ data0.pack, data1.pack рдФрд░ data7.pack рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ \ GameData \ рдореВрд╡реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдЙрдиреНрд╣реЗрдВ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдоред рдкреИрдХ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╣реЗрдбрд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рдорд╛рди рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдФрд░ рдлрд╛рдЗрд▓рдкреИрдХ рд╡реАрд░ 3.0 рд▓реЗрдмрд▓


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдирдкреИрдХрд░ рд╣реИ рдФрд░ рдПрдХ рднреА рдирд╣реАрдВред рд╣рдордиреЗ asmodean рд╕реЗ рдХрдВрд╕реЛрд▓ exfp3_v3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЦреЛрд▓рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЗрдВрдЬрди рдХрдИ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рд░реВрдкреЛрдВ (FilePackVer1.0, FilePackVer1.0, FilePackVer3.0) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ FilePackVer3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╣реА рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреБрдВрдЬреА рдлрд╝рд╛рдЗрд▓ key.fkey рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ \ Dll рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, exfp3_v3 рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдЦреЗрд▓ рд╕реЗ рдЕрдирдкреИрдХрд┐рдВрдЧ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдирдкреИрдХрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реВрдЪреА рд╕реЗ рдЧреЗрдо рдирдВрдмрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЧреЗрдо рдмрд┐рдЬрд╝реЛрдЙ рдордВрдЧреЗрд╕реНрдХреА рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ 15 рдирдВрдмрд░ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИрдВ), рдпрд╛ рдЕрдирдкреИрдХ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЗрдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред


рдЧреЗрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛: рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреИрд╕реЗ рдЦреЗрд▓ рдХреЛ рддреИрдпрд╛рд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдирдкреИрдХрд░ рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдкрд░, w8m (рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж) рдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо arc_conv.exe рдореЗрдВ рдЧреЗрдо рдЖрд░реНрдХрд╛рдЗрд╡реНрд╕ рдХреЛ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реАред рдпрд╣ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдирдП рд╕рдВрдЧреНрд░рд╣ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, data8.pack) рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕реЗ рдЧреЗрдордбрд╛рдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧреЗрдо рдореЗрдВ рдЦреБрдж рдХреЛ рдЦреАрдВрдЪ рд▓реЗрдВрдЧреЗред

рдЕрдирдкреИрдХ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред Data0.pack рдкреБрд░рд╛рд▓реЗрдЦ рд╕реЗ рдЧреЗрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ \ рдкрд░рд┐рджреГрд╢реНрдп \ ks_01 \ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╛рдЗрд▓реЗрдВ .s рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ Shift Jis рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рджреВрд░ рддрдХ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВ, рдФрд░ рдЗрдВрдЬрди рдХрд┐рд╕реА рднреА рдпреВрдирд┐рдХреЛрдб рдПрдирдХреЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрд╡рд╛рдж рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рдЧрднрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:

уАРуВнуГкуВиуАС я╝Е1_kiri1478я╝Е уАМуБ╕уБИтАжтАжхИЖуБЛуБгуБжуБДуВЛуБШуВГуБкуБДуАН чзБуБМчМоф╕КуБЧуБЯуГнуВ╖уВвуГ│уГЖуВгуГ╝уВТшжЛуБжуАБуВнуГкуВиуБпхмЙуБЧуБЭуБЖуБлчЫоуВТч┤░уВБуВЛуАВ ^cface,,ш╡дчЫох╛очмС01 уАРуВнуГкуВиуАС я╝Е1_kiri1479я╝Е уАМцЧецЬмф║║уБпуАБуВ╕уГгуГауВТч┤ЕшМ╢уБлхЕеуВМуБжщг▓уВАуБоуБМуАБуГнуВ╖уВвуГ│уГЖуВгуГ╝уБауБихЛШщБХуБДуБЧуБжуБДуВЛф║║уБМхдЪуБДуБоуБауБСуВМуБйтАжтАжуАН 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рдкрд╛рдиреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬрд╛рдкрд╛рдиреА рдХреЛрд╖реНрдардХ рдореЗрдВ рдирд╛рдпрдХ рдХреЗ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред ((In), рдЬреЛ рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдХрд░рддрд╛ рд╣реИ (рдЦреЗрд▓ рдореЗрдВ рдпрд╣ рдкрд╛рда рдХреЗ рд╕рд╛рде рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ)ред рдпрд╛, рдпрджрд┐ рдпреЗ рд▓реЗрдЦрдХ рдХреЗ рд╢рдмреНрдж рд╣реИрдВ, рддреЛ рдирд╛рдо рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╕реЗрд╡рд╛ рджрд▓ рд╣реИрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрдВрдЬрди рдХрдорд╛рдВрдб рдХреБрдЫ рд╣рдж рддрдХ TeX рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд░реАрдХрд┐рд░реА рдпрд╛ рд░реЗрдирдкреА рдХрдорд╛рдВрдбреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдФрд░ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред

рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ:

@@@ рдПрдХ рдЯреНрд░рд┐рдкрд▓ рдбреЙрдЧ рд╣реИред рдЕрдХреНрд╕рд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╛рдЗрд▓реЗрдВ рдЗрд╕ рдХрдорд╛рдВрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 @@@Library\Avg\header.s 

@@ рдПрдХ рджреЛрд╣рд░рд╛ рдХреБрддреНрддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗрдмрд▓ред рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

я╝Е1_kiri1478я╝Е - рдзреНрд╡рдирд┐ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБред рдпреЗ рдХрдорд╛рдВрдб рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реАрд░реЛ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдирд╛рдо рдХреЗ рдмреАрдЪ рдбрд╛рд▓реА рдЧрдИ рд╣реИрдВред "A_kiri1478" - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, data1.pack рдлрд╝рд╛рдЗрд▓ рдХреЗ \ voice \ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЯреАрдо рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмрдЬрд╛рдп рдЬрд╛рдкрд╛рдиреА рдкреНрд░рддрд┐рд╢рдд (я╝Е) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

^savedate, ^saveroute, ^savescene, - рддреАрди рдЯреАрдореЗрдВ рдЬреЛ рдЧреЗрдо рдХреЗ рд╕реЗрд╡ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рдЬрдЧрд╣ рдФрд░ рд╕рдордп рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╕реЗрд╡ рдЧреЗрдо рдореЗрдВ рдмрдЪрд╛рдИ рдЧрдИ рдереАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 ^savedate,"чП╛хЬи" ^saveroute,"ч╛Ох░Схе│ф╕ЗшПпщПбя╝Ня╝Ся╝Н" ^savescene,"хСкуВПуВМуБЧф╝ЭшкмуБох░Схе│ уВкуГ╝уГЧуГЛуГ│уВ░" 

рд╡рд╣ рд╣реИ, рддрд┐рдерд┐: рд╡рд░реНрддрдорд╛рди, рд╢рд╛рдЦрд╛: рдмрд┐рд╕реНрд╕реБрдУ рдордВрдЧреЗрдХреАрдЙ -1-, рджреГрд╢реНрдп: рдиреЛрд░реЛрд╡рд╛рд░реЗрд╢реА рдбреЗрдВрд╕реЗрдЯреНрд╕реБ рдиреЛ рд╢реМрдЬреЛ рдУрдкрдирд┐рдВрдЧред рдпрд╣ рдбреЗрдЯрд╛ рд╕реЗрд╡ рд╕реНрд▓реЙрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдирддреАрдЬрддрди, ^saveroute рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ ^saveroute рд╣реИ, ^savedate "рд╡рд░реНрддрдорд╛рди рдХреНрд╖рдг" рд╕реЗ "рд╕рдкрдиреЗ," рдФрд░ ^savescene рдЦреЗрд▓ рдХреЗ рджрд┐рдиреЛрдВ (рдпрд╛ рдмрд▓реНрдХрд┐ рд░рд╛рддреЛрдВ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди ^savescene рд╣реИрдВред

^facewindow, - рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ред (рджрд┐рдЦрд╛рдпрд╛ - 1 рдпрд╛ рдирд╣реАрдВ - 0)

^sload, - рдЗрд╕реА рдЪреИрдирд▓ рдкрд░ \ sound \ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЗрди-рдЧреЗрдо рдзреНрд╡рдирд┐рдпрд╛рдВ ^sload, ред

 sload,Env1,тЧЖуВ╗уГЯ01уВвуГЦуГйуВ╝уГЯ 

Env1 рдкрд░ cicadas рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИ

рдЯреАрдо рдореЗрдВ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдзреНрд╡рдирд┐ рдХреЛ рд▓реВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЦреЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 ^sload,SE1,тЦауВпуГБуГещЯ│01,1 

рдЪреИрдирд▓ SE1 рдкрд░ рд▓реВрдкрдмреИрдХ рд╕рд╛рдЙрдВрдб рдмрдЬрд╛рдирд╛ред

^eeffect - рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХрдИ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЙрддреНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

 ^eeffect,WhiteFlash 

рдПрдХ рд╕рдлреЗрдж рдлреНрд▓реИрд╢ рдХрд╛ рдкреНрд░рднрд╛рд╡ред

^ffade - рд╕реНрдХреНрд░реАрди рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рд╕рдВрдХреНрд░рдордг рдкреНрд░рднрд╛рд╡ред
рдЗрд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ: рд╕рдВрдХреНрд░рдордг рдкреНрд░рднрд╛рд╡ рдХрд╛ рдирд╛рдо, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд┐рддреНрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдФрд░ рд╕рдВрдХреНрд░рдордг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордпред

 ^ffade,Overlap,,1000 

рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ, 1 рд╕реЗрдХрдВрдб рдореЗрдВ рднрдВрдЧ рдХрд░рдирд╛ред

^iload - рд╕реНрдХреНрд░реАрди рдкрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рд▓реЛрдб рдХрд░реЗрдВред рдЫрд╡рд┐ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдбреА рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

 ^iload,BG1,0_black.png 

рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ 0_black.png рдЖрдИрдбреА BG1 рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░реВрдк рдореЗрдВ

^we рдФрд░ ^wd - рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЫрд╡рд┐ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░реЗрдВред

^facewindow,1 рдФрд░ ^facewindow,0 рд╣реАрд░реЛ рдХреА рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рддрд╛ рд╣реИред

^mload - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреИрдирд▓ рдкрд░ рд╕рдВрдЧреАрдд рдЪрд▓рд╛рдПрдВред

 ^mload,BGM1,nbgm13 

рдЪреИрдирд▓ BGM1 рдкрд░ рдЯреНрд░реИрдХ nbgm13 рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИ

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯреАрдореЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ:
\jmp - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВред

^select - рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрдпрди рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 ^select, ,  \jmp,"@@route01a"+ResultBtnInt[0] @@route01a0 

рдпрд╣рд╛рдВ рдкреНрд░рд╢реНрди рдХреЗ рдЙрддреНрддрд░ рдХреЗ рдмрд╛рдж рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЦреНрдпрд╛ (0 рдпрд╛ 1) ResultBtnInt [0] рд╕реЗ рд▓реМрдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, \jmp рдХрд╣рд╛рдиреА рдХреЛ рд▓реЗрдмрд▓ рдкрд░ рд▓реЗ \jmp @@ path01a + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЦреНрдпрд╛ред рд╡рд╣ рд╣реИ, @@ path01a0 рдпрд╛ @@ path01a1

рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдХрдорд╛рдВрдбреЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рдкрд╛рдирд┐рдпреЛрдВ рдХреЛ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдЬрд╛рдкрд╛рдиреА рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо (problem) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЛ U (U + 201A SINGLE LOW-9 QUOTATION MARK) рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 ^select, тАЪ  , тАЪ  

рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ рд╢реЗрд╖ рдЯреАрдореЗрдВ рдЗрддрдиреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред

рдмреЗрд╢рдХ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреБрдЫ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреВрдЯреАрдПрдл -8 рдореЗрдВ, рд╕рд┐рд░рд┐рд▓рд┐рдХ рдФрд░ рдЬрд╛рдкрд╛рдиреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЗрдВрдЬрди (рдЗрд╕ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЦреЗрд▓ рд░реВрд╕реА рдкрд╛рда рдФрд░ рдЬрд╛рдкрд╛рдиреА рджреЛрдиреЛрдВ рдХреЛ рдорд╛рдирддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Shift Jis рдореЗрдВ рдЬрд╛рдкрд╛рдиреА рд╡рд░реНрдг рдФрд░ Cp1251 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рд╛рдЗрд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╣рдордиреЗ рдЬрд▓реНрджреА рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рдХрд┐рдпрд╛ред

UTF8 рд╕реЗ cp1251 рдФрд░ ShiftJIS
 # -*- coding: utf-8 -*- # UTF8 to cp1251 and ShiftJIS recoder # by Chtobi and Nazon, 2016 import codecs import argparse from os import path JAPANESE_CODEPAGE = 'shift_jis' UTF_CODEPAGE = 'utf-8' RUS_CODEPAGE = 'cp1251' def nonrus_handler(e): if e.object[e.start:e.end] == 'я╜Ю': # UTF-8: 0xEFBD9E -> SHIFT-JIS: 0x8160 japstr_byte = b'\x81\x60' elif e.object[e.start:e.end] == 'я╝Н': # UTF-8: 0xEFBC8D -> SHIFT-JIS: 0x817C japstr_byte = b'\x81\x7c' else: japstr_byte = (e.object[e.start:e.end]).encode(JAPANESE_CODEPAGE) return japstr_byte, e.end if __name__ == '__main__': arg_parser = argparse.ArgumentParser(prog="Recode to cp1251 and ShiftJIS", description="Program to encode UTF8 text file to " "cp1251 for all cyrillic symbols and ShiftJIS for others. " "Output file will be inputfilename.s", usage="recode_to_cp1251_shiftjis.py file_name") arg_parser.add_argument('file_name', nargs=1, type=argparse.FileType(mode='r', bufsize=-1), help="Input text file name. Only files coded in UTF8 are allowed.\n") codecs.register_error('nonrus_handler', nonrus_handler) input_name = arg_parser.parse_args().file_name[0].name output_name = path.splitext(input_name)[0] + ".s" with open(input_name, 'rt', encoding=UTF_CODEPAGE) as input_file: with open(output_name, 'wb') as output_file: for line in input_file: for char1 in line: bytes_out = bytes(line, UTF_CODEPAGE) output_file.write(char1.encode(RUS_CODEPAGE, "nonrus_handler")) print("Done.") 


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬрдм "рдЯрд┐рд▓реНрдб" рдкреНрд░рддреАрдХ рдпреВ (U + FF5E FULLWIDTH TILDE) рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реБрдИ "рдпреВрдирд┐рдХреЛрдб рдИрдХреЛрдбрдХреЛрдб: 'рд╢рд┐рдлреНрдЯ рдЬреАрд╕' рдХреЛрдбрдХ 0 рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдореЗрдВ \" uff5e "рдХреЛ рдПрдирдХреЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛: рдЕрд╡реИрдз рдорд▓реНрдЯреАрдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо"

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдкрд░ рдкрд╛рдк рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпреВрдирд┐рдХреЛрдб рдФрд░ рдЧреИрд░-рдпреВрдирд┐рдХреЛрдб рдЬрд╛рдкрд╛рдиреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╣рд╕рдВрдмрдВрдз рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИред

рдирддреАрдЬрддрди, рд╡рд┐рдВрдбреЛрдЬ рд╢рд┐рдлреНрдЯ рдЬреАрд╕ рдЪрд░рд┐рддреНрд░ рдХреЛ 0x8160 рдХреЛрдб рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдХреЛрдб я╜Ю (U + FF5E FULLWIDTH TILDE), рдФрд░ рдЕрдиреНрдп рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░реНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, iconv рдЙрдкрдпреЛрдЧрд┐рддрд╛) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдпреВрдирд┐рдХреЛрдб рдЕрдиреБрдкрд╛рдд рдЕрдиреБрдкрд╛рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ character (U + 301C WAVE DASH) рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╡рд░реНрдг рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред - ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFT JIS.TXT

рд╡рд░реНрдгреЛрдВ рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Microsoft рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ cp932 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдХрд┐ рд╢рд┐рдлреНрдЯis рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдЪрд░рд┐рддреНрд░ рдХреЛрдб 0x817C рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдпреВрдЯреАрдПрдл 8 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ - (U + FF0D FULLWIDTH HYPHEN-MINUS) рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдпрд╛ рдЬреИрд╕реЗ- (U + 2212 MINUS) рдЖрдЗрдХреЙрди рдореЗрдВред

рдЪреВрдВрдХрд┐ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╛рдЗрд▓реЗрдВ рдкрд╣рд▓реЗ Notepad ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Shift Jis рд╕реЗ UTF8 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреА рдЧрдИ рдереАрдВ (рдФрд░ рд╡рд╣ рд╣рдорд╛рд░реЗ Windows рдореЗрдВ рдЕрдкрдирд╛рдП рдЧрдП рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рдЬрдм рд╣рдорд╛рд░реЗ Python рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ UTF8 рд╕реЗ Shift Jis рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЦреНрдпрд╛рдд рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреАред

рдЗрд╕рд▓рд┐рдП, - рдФрд░ - рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдШрдЯрдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рдЕрдиреНрдп рдЫреЛрдЯреА рдЦрд╛рдорд┐рдпрд╛рдВ рдереАрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд▓рд┐рдкреНрд╕рд┐рд╕ ... (U + 2026 HORIZONTAL ELLIPSIS) рдХреЛ Cyr1251 рд╕реЗ Cyrillic ellipsis рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рди рдХрд┐ рд╢рд┐рдлреНрдЯ рдЬреАрд╕ рд╕реЗ рдЬрд╛рдкрд╛рдиреА рдХреЛред

рдкрд╛рда рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЧреЗрдо рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЧреЗрдо рдХреА рдЧреНрд░рд╛рдлрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рд╕рдорд╛рди рдкреИрдХ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рднреА рдЙрдиреНрд╣реЗрдВ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреА рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рдЧрднрдЧ рд╕рднреА png рдЪрд┐рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирдореВрдиреЗ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирдкреИрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВ + DPNG000 + x32y0.png рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, png рдЪрд┐рддреНрд░ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреНрд░рд┐рдкреНрд╕ 88 рд╕реЗрдореА рдореЛрдЯреА рдореЗрдВ рдХрд╛рдЯреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯреНрдЯреА рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдк (DPNG000 ... 009) рдФрд░ x, y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рдореИрдВ рдЕрдм рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рдерд╛ред рдпрджрд┐ рдЦреЗрд▓ рд╕реЗ рддреЗрдЬрд╕реНрд╡реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдХрдард┐рдирд╛рдИ рдХреЗ рд▓рд┐рдП, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдХрдЯ рдкреАрдВрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЧреЛрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Asmodeus рд╕реЗ рдкрд░реНрд▓ рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ merge_dpng, рдЬреЛ ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдПрдХ рд╕рдордп рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдереАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдкрд░реНрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рдереАред

рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рд╣рдордиреЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛:

Qlie рдЗрдВрдЬрди dpng рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рддрд╛ рд╣реИ
 # -*- coding: utf-8 -*- # Qlie engine dpng files merger # by Chtobi and Nazon, 2016 # Requires ImageMagick magick.exe on the path. import os import glob import re import argparse import subprocess IMGMAGIC = os.path.dirname(os.path.abspath(__file__)) + '\\' + 'magick.exe' IMGMAGIC_PARAMS1 = ['-background', 'rgba(0,0,0,0)'] IMGMAGIC_PARAMS2 = ['-mosaic'] INPUT_FILES_MASK = '*+DPNG[0-9][0-9][0-9]+*.png' SPLIT_MASK = '+DPNG' x_y_ajusts_re = re.compile('(.+)\+DPNG[0-9][0-9][0-9]\+x(\d+)y(\d+)\.') if __name__ == '__main__': arg_parser = argparse.ArgumentParser(prog="DPNG Merger\n" "Program to merge sliced png files from QLIE engine. " "All files with mask *+DPNG[0-9][0-9][0-9]+*.png" "into the input directory will be merged and copied to the" "output directory.\n", usage="connect_png.py input_dir [output_dir]\n") arg_parser.add_argument("input_dir_param", nargs=1, help="Full path to the input directory.\n") arg_parser.add_argument("output_dir_param", nargs='?', default=os.path.dirname(os.path.abspath(__file__)), help="Full path to the output directory. " "It would be a script parent directory if not specified.\n") input_dir = arg_parser.parse_args().input_dir_param[0] output_dir = arg_parser.parse_args().output_dir_param[0] os.chdir(input_dir) all_append_files = glob.glob(INPUT_FILES_MASK) # Select only files with DPNG prep_bunches = [] for file_in_dir in all_append_files: # Check all files and put all splices that should be connected in separate list for num, bunch in enumerate(prep_bunches): name_first_part = bunch[0].partition(SPLIT_MASK)[0] # Part of the filename before +DPNG should be unique if name_first_part == file_in_dir.partition(SPLIT_MASK)[0]: prep_bunches[num].append(file_in_dir) break else: prep_bunches.append([file_in_dir]) os.chdir(os.path.dirname(os.path.abspath(__file__))) # Go to the script parent dir for prepared_bunch in prep_bunches: sorted_bunch = sorted(prepared_bunch) # Prepare -page params for imgmagic png_pages_params = [["(", "-page", "+{0}+{1}".format(*[(x_y_ajusts_re.match(part_file).group(2)), x_y_ajusts_re.match(part_file).group(3)]), input_dir+part_file, ")"] for part_file in sorted_bunch] connect_png_list = \ [imgmagick_page for imgmagick_pages in png_pages_params for imgmagick_page in imgmagick_pages] output_file = output_dir + sorted_bunch[0].partition(SPLIT_MASK)[0] + ".png" subprocess.check_output([IMGMAGIC] + IMGMAGIC_PARAMS1 + connect_png_list + IMGMAGIC_PARAMS2 + [output_file]) 


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╣рдореЗрдВ рдЦреЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ? рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ - рдпрджрд┐ рдЖрдк рд╕рднреА рдЕрднрд┐рд▓реЗрдЦреЛрдВ рд╕реЗ рд╕рднреА рдЬреБрдбрд╝реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рднреА рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреБрдЫ рдЧрд╛рдпрдм рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЦреЗрд▓ рдореЗрдВ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рд╣реИ - рдПрдХреНрд╕рдЯреЗрдВрд╢рди .b рдХреЗ рд╕рд╛рдеред рдпрд╣ рдЕрдВрджрд░ рджрд░реНрдЬ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИред

рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП .b рдлрд╝рд╛рдЗрд▓ рдЕрдирдкреИрдХрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рддреЛ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдЕрдирдкреИрдХреНрдб рд░рд╣ рдЧрдИрдВ, рдпрд╛ рдЬрд╛рдкрд╛рдиреА рдирд╛рдореЛрдВ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ, рдФрд░ рдореИрдВ рдЬрд╛рдкрд╛рдиреА рд▓реЛрдХреЗрд▓ рд╕реЗ рдмреВрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╣рдорд╛рд░реА рд▓рд┐рдкрд┐ рдЙрдкрдпреЛрдЧреА рдереАред рддрдм рд╕реЗ рд╣рдо рдХреИрддрд╛рдИ рд╕рдВрд░рдЪрдирд╛ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдереЗ, рд╣рдореЗрдВ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рдЧрднрдЧ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

.B рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╕рд░рд▓ рд╣реБрдЖ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдЕрдирдкреИрдХрд░ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рдЦреЗрд▓ рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпреВрд▓реА рдЗрдВрдЬрди рдкрд░ рдЕрдиреНрдп рдЦреЗрд▓реЛрдВ рдореЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрди .b рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рдЙрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред

рддреЛ, рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХрд┐рд╕реА рднреА .b рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЗрдЦреЗрдВред рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рд▓рд┐рдЯрд┐рд▓-рдПрдВрдбрд┐рдпрди рд╣реЛрдЧрд╛ред

  • Abmp12 рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░
  • рджрд╕ рдмрд╛рдЗрдЯреНрд╕ 0x00
  • рдУрд╡рд░рд╣реЗрдб рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдЦрдВрдб abdata12 рдХрд╛ рд╢реАрд░реНрд╖рдХред
  • рдЖрда рдмрд╛рдЗрдЯреНрд╕ 0x00
  • рдЕрдиреБрднрд╛рдЧ рдЖрдХрд╛рд░ abdata12, рдЪрд╛рд░-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХред рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
  • Abimage10 рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖ рд▓реЗрдЦ
  • рд╕рд╛рдд рдмрд╛рдЗрдЯреНрд╕ 0x00
  • рдПрдХ рдЦрдВрдб рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдПрдХрд▓-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИред
  • рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖ рд▓реЗрдЦ abgimgdat13
  • рдЫрд╣ рдмрд╛рдЗрдЯреНрд╕ 0x00
  • рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рд▓рдВрдмрд╛рдИ, рдПрдХ рджреЛ-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рдВрдмрд╛рдИ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
  • рд╢рд┐рдлреНрдЯ Jis рдПрдиреНрдХреЛрдбреЗрдб рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
  • рдлрд╝рд╛рдЗрд▓ рдЪреЗрдХрд╕рдо рд░рд┐рдХреЙрд░реНрдб рд▓рдВрдмрд╛рдИ, рдбрдмрд▓-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХред
  • рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪреЗрдХрд╕рдоред
  • рдЕрдЬреНрдЮрд╛рдд рдмрд╛рдЗрдЯ рд╣рдореЗрд╢рд╛ 0x03 рдпрд╛ 0x02 рд▓рдЧрддрд╛ рд╣реИ
  • рдмрд╛рд░рд╣ рдЕрдЬреНрдЮрд╛рдд рдмрд╛рдЗрдЯреНрд╕, рд╕рдВрднрд╡рддрдГ рдПрдиреАрдореЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ
  • рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрджрд░ png рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдЪрд╛рд░-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреАрдПрдирдЬреА рдлрд╝рд╛рдЗрд▓ рд╣реАред


рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЦрдВрдб рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдкрд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИред

AnimatedBMP рдЪрд┐рдордЯрд╛
 # -*- coding: utf-8 -*- # Extract b # AnimatedBMP extractor for Bishoujo Mangekyou game files # by Chtobi and Nazon, 2016 import glob import os import struct import argparse from collections import namedtuple b_hdr = b'abmp12'+bytes(10) signa_len = 16 b_abdata = (b'abdata10'+bytes(8), b'abdata11'+bytes(8), b'abdata12'+bytes(8), b'abdata13'+bytes(8)) b_imgdat = (b'abimgdat10'+bytes(6), b'abimgdat11'+bytes(6), b'abimgdat14'+bytes(6)) b_img = (b'abimage10'+bytes(7), b'abimage11'+bytes(7), b'abimage12'+bytes(7), b'abimage13'+bytes(7), b'abimage14'+bytes(7)) b_sound = (b'absound10'+bytes(7), b'absound11'+bytes(7), b'absound12'+bytes(7)) # not sure about structure of sound11 and sound12 b_snd = (b'absnddat11'+bytes(7), b'absnddat10'+bytes(7), b'absnddat12'+bytes(7)) Abimgdat13_pattern = namedtuple('Abimgdat13', ['signa', 'name_size_len', 'hash_size_len', 'unknown1_len', 'unknown2_len', 'data_size_len']) Abimgdat13 = Abimgdat13_pattern(signa=b'abimgdat13'+bytes(6), name_size_len=2, hash_size_len=2, unknown1_len=1, unknown2_len=12, data_size_len=4) Abimgdat14_pattern = namedtuple('Abimgdat14', ['signa', 'name_size_len', 'hash_size_len', 'unknown1_len', 'data_size_len']) Abimgdat14 = Abimgdat14_pattern(signa=b'abimgdat14'+bytes(6), name_size_len=2, hash_size_len=2, unknown1_len=77, data_size_len=4) Abimgdat_pattern = namedtuple('Abimgdat', ['name_size_len', 'hash_size_len', 'unknown1_len', 'data_size_len']) # probably, abimgdat10,abimgdat11 and others Other_imgdat = Abimgdat_pattern(name_size_len=2, hash_size_len=2, unknown1_len=1, data_size_len=4) Absnddat11_pattern = namedtuple('Absnddat11', ['signa', 'name_size_len', 'hash_size_len', 'unknown1_len', 'data_size_len']) Absnddat11 = Absnddat11_pattern(signa=b'absnddat11'+bytes(7), name_size_len=2, hash_size_len=2, unknown1_len=1, data_size_len=4) def create_parser(): arg_parser = argparse.ArgumentParser(prog='AnimatedBMP extractor\n', usage='extract_b input_file_name output_dir\n', description='AnimatedBMP extractor for QLIE engine *.b files.\n') arg_parser.add_argument('input_file_name', nargs='+', help="Input file with full path(wildcards are supported).\n") arg_parser.add_argument('output_dir', nargs=1, help="Output directory.\n") return arg_parser def check_type(file_buf): if file_buf.startswith(b'\x89' + b'PNG'): return '.png' elif file_buf.startswith(b'BM'): return '.bmp' elif file_buf.startswith(b'JFIF', 6): return '.jpg' elif file_buf.startswith(b'IMOAVI'): return '.imoavi' elif file_buf.startswith(b'OggS'): return '.ogg' elif file_buf.startswith(b'RIFF'): return '.wav' else: return '' def bytes_shiftjis_to_utf8(shiftjis_bytes): shiftjis_str = shiftjis_bytes.decode('shift_jis', 'strict') utf_str = shiftjis_str.encode('utf-8', 'strict').decode('utf-8', 'strict') return utf_str def check_signa(f_buffer): if f_buffer.endswith(b_abdata): return 'abdata' elif f_buffer.endswith(b_img): return 'abimgdat' elif f_buffer.endswith(b_sound): return 'absound' def prepare_filename(out_file_name, out_dir, postfix=''): ready_name = out_dir + os.path.basename(out_file_name) + postfix return ready_name def create_file(file_name_hndl, out_buffer): if len(out_buffer) != 0: with open(file_name_hndl, 'wb') as ext_file: ext_file.write(out_buffer) else: print("Zero file. Skipped.") def check_file_header(file_handle, bytes_num): file_handle.seek(0) readed_bytes = file_handle.read(bytes_num) if readed_bytes == b_hdr: print("File is valid abmp") return True else: print("Can't read header. Probably, wrong file...") return False if __name__ == '__main__': parser = create_parser() arguments = parser.parse_args() all_b_files = glob.glob(arguments.input_file_name[0]) output_dir = arguments.output_dir[0] for b_file in all_b_files: file_buffer = bytearray(b'') with open(b_file, 'rb') as bfile_h: check_file_header(bfile_h, len(b_hdr)) read_byte = bfile_h.read(1) file_buffer.extend(read_byte) while read_byte: read_byte = bfile_h.read(1) file_buffer.extend(read_byte) # Finding content sections signature check_result = check_signa(file_buffer) if check_result: if check_result == 'abdata': file_buffer = bytearray(b'') read_length = bfile_h.read(4) size = struct.unpack('<L', read_length)[0] file_buffer.extend(bfile_h.read(size)) # Adding _abdata to separate from other parts outfile_name = prepare_filename(b_file, output_dir, '_abdata') create_file(outfile_name, file_buffer) elif check_result == 'abimgdat': images_number = struct.unpack('B', bfile_h.read(1))[0] # Number of pictures in section for i1 in range(images_number): file_buffer = bytearray(b'') file_name = '' imgsec_hdr = bfile_h.read(signa_len) if imgsec_hdr == Abimgdat13.signa: file_name_size = struct.unpack('<H', bfile_h.read(Abimgdat13.name_size_len))[0] # Decode filename to utf8 file_name = bytes_shiftjis_to_utf8(bfile_h.read(file_name_size)) # CRC size hash_size = struct.unpack('<H', bfile_h.read(Abimgdat13.hash_size_len))[0] # Picture CRC (don't need it) pic_hash = bfile_h.read(hash_size) unknown1 = bfile_h.read(Abimgdat13.unknown1_len) unknown2 = bfile_h.read(Abimgdat13.unknown2_len) pic_size = struct.unpack('<L', bfile_h.read(Abimgdat13.data_size_len))[0] print("pic_size:", pic_size) file_buffer.extend(bfile_h.read(pic_size)) elif imgsec_hdr == Abimgdat14.signa: file_name_size = struct.unpack('<H', bfile_h.read(Abimgdat14.name_size_len))[0] file_name = bytes_shiftjis_to_utf8(bfile_h.read(file_name_size)) hash_size = struct.unpack('<H', bfile_h.read(Abimgdat14.hash_size_len))[0] pic_hash = bfile_h.read(hash_size) bfile_h.seek(Abimgdat14.unknown1_len, os.SEEK_CUR) pic_size = struct.unpack('<L', bfile_h.read(Abimgdat14.data_size_len))[0] file_buffer.extend(bfile_h.read(pic_size)) else: # probably abimgdat10, abimgdat11... file_name_size = struct.unpack('<H', bfile_h.read(Other_imgdat.name_size_len))[0] file_name = bytes_shiftjis_to_utf8(bfile_h.read(file_name_size)) hash_size = struct.unpack('<H', bfile_h.read(Other_imgdat.hash_size_len))[0] pic_hash = bfile_h.read(hash_size) bfile_h.seek(Other_imgdat.unknown1_len, os.SEEK_CUR) pic_size = struct.unpack('<L', bfile_h.read(Other_imgdat.data_size_len))[0] file_buffer.extend(bfile_h.read(pic_size)) for i, letter in enumerate(file_name): # Replace any unusable symbols from filename with _ if letter == '<' or letter == '>' or letter == '*' or letter == '/': file_name = file_name.replace(letter, "_") # Checking file signature and adding proper extension outfile_name = prepare_filename(b_file, output_dir, '_' + file_name + check_type(file_buffer)) create_file(outfile_name, file_buffer) file_buffer = bytearray(b'') elif check_result == 'absound': sound_files_number = struct.unpack('B', bfile_h.read(1))[0] for i2 in range(sound_files_number): file_buffer = bytearray(b'') file_name = '' sndsec_hdr = bfile_h.read(signa_len) if sndsec_hdr == Absnddat11.signa: file_name_size = struct.unpack('<H', bfile_h.read(Absnddat11.name_size_len))[0] file_name = bytes_shiftjis_to_utf8(bfile_h.read(file_name_size)) hash_size = struct.unpack('<H', bfile_h.read(Absnddat11.hash_size_len))[0] snd_hash = bfile_h.read(hash_size) unknown1 = bfile_h.read(Absnddat11.unknown1_len) snd_size = struct.unpack('<L', bfile_h.read(Absnddat11.data_size_len))[0] file_buffer.extend(bfile_h.read(snd_size)) else: file_name_size = struct.unpack('<H', bfile_h.read(Absnddat11.name_size_len))[0] file_name = bytes_shiftjis_to_utf8(bfile_h.read(file_name_size)) hash_size = struct.unpack('<H', bfile_h.read(Absnddat11.hash_size_len))[0] snd_hash = bfile_h.read(hash_size) unknown1 = bfile_h.read(Absnddat11.unknown1_len) snd_size = struct.unpack('<L', bfile_h.read(Absnddat11.data_size_len))[0] file_buffer.extend(bfile_h.read(snd_size)) for i, letter in enumerate(file_name): if letter == '<' or letter == '>' or letter == '*' or letter == '/': file_name[i] = '_' outfile_name = prepare_filename(b_file, output_dir, '_' + file_name + check_type(file_buffer)) print("create absound") create_file(outfile_name, file_buffer) file_buffer = bytearray(b'') 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рдП рдЧрдП png, jpg, bmp, ogg рдФрд░ wav рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЬреНрдЮрд╛рдд рдЗрдореЛрдЬреА рдлрд╝рд╛рдЗрд▓реЗрдВ рднреА рдЕрдВрджрд░ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред

рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдЦреЗрд▓ рдореЗрдВ рд╕рднреА рдПрдирд┐рдореЗрд╢рди рдпрд╛ рддреЛ рдУрдЧрд╡ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рд╡реАрдбрд┐рдпреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдЗрдВрдЬрди-рдПрдирд┐рдореЗрдЯреЗрдб рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ .b рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ imoavi рдкреНрд░рд╛рд░реВрдк рдореЗрдВ jpg рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдирд┐рдореЗрдЯреЗрдб рджреГрд╢реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ jpg рдЗрдореЗрдЬреЗрд╕ рдореЗрдВ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рдереА, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдирд╕реЗ рднреА рдирд┐рдкрдЯрдирд╛ рдерд╛ред

рдЗрдореЛрдЬреА рдореЗрдВ рджреЛ рдЦрдВрдб рд╣реИрдВ: рдзреНрд╡рдирд┐ рдФрд░ MOVIEред MOVIE рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣реЗрдбрд░ рдХреЗ рдмрд╛рдж 47 рдмрд╛рдЗрдЯреНрд╕, jpg рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдирдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, 19 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдЧрд▓реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЦреЗрд▓ рдореЗрдВ рдЖрд╡рд╛рдЬрд╝ рд╡рд╛рд▓рд╛ рдЗрдореЛрдЬреА рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрдпрд╛, рдЗрд╕рд▓рд┐рдП рдзреНрд╡рдирд┐ рдЕрдиреБрднрд╛рдЧ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рд░рд╣рддрд╛ рд╣реИред

рдЦреИрд░, рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЦреЗрд▓ рдХреЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдЙрд╕реА рд╕рдордп рдПрдХ рдЫреЛрдЯреА рд╕реА рдкрдЯрдХрдерд╛ рд▓рд┐рдЦреА рдЧрдИ рдереА рдЬрд┐рд╕рдореЗрдВ рдЬреЗрдореВ рдХреЛ рдЗрдореЛрд╡реА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдерд╛ред

рдЗрдореМрд╡реА рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛
 # -*- coding: utf-8 -*- # Extract imoavi # Imoavi extractor for Bishoujo Mangekyou game files # by Chtobi and Nazon, 2016 import glob import os import struct import argparse imoavi_hdr = b'IMOAVI' hdr_len = len(imoavi_hdr) def create_file(file_name, out_buffer, wr_mode='wb'): if len(out_buffer) != 0: with open(file_name, wr_mode) as ext_file: ext_file.write(out_buffer) else: print("Zero file. Skipped.") def prepare_filename(file_name, out_dir, postfix=''): ready_name = out_dir + os.path.basename(file_name) + postfix return ready_name def create_parser(): arg_parser = argparse.ArgumentParser(prog='Imoavi extractor\n', usage='extract_imoavi input_file_name output_dir\n', description='Imoavi extractor for QLIE engine *.imoavi files.\n') arg_parser.add_argument('input_file_name', nargs='+', help="Input file with full path(wildcards are supported).\n") arg_parser.add_argument('output_dir', nargs='+', help="Output directory.\n") return arg_parser if __name__ == '__main__': parser = create_parser() arguments = parser.parse_args() all_imoavi = glob.glob(arguments.input_file_name[0]) output_dir = arguments.output_dir[0] for imoavi_f in all_imoavi: file_buffer = bytearray(b'') with open(imoavi_f, 'rb') as imoavi_h: # Read imoavi file header imoavi_h.read(hdr_len) imoavi_h.seek(2, os.SEEK_CUR) # 0x00 imoavi_h.seek(1, os.SEEK_CUR) # 0x64 imoavi_h.seek(3, os.SEEK_CUR) # 0x00 imoavi_h.seek(5, os.SEEK_CUR) # SOUND imoavi_h.seek(3, os.SEEK_CUR) # 0x00 imoavi_h.seek(1, os.SEEK_CUR) # 0x64 imoavi_h.seek(11, os.SEEK_CUR) imoavi_h.seek(5, os.SEEK_CUR) # Movie imoavi_h.seek(3, os.SEEK_CUR) # 00 ?? imoavi_h.seek(1, os.SEEK_CUR) # 0x64 imoavi_h.seek(3, os.SEEK_CUR) # 0x00 ?? imoavi_h.seek(4, os.SEEK_CUR) # ?? imoavi_h.seek(1, os.SEEK_CUR) # Number of jpg files in section imoavi_h.seek(4, os.SEEK_CUR) # 0x00 imoavi_h.seek(1, os.SEEK_CUR) # 0x05 ??? imoavi_h.seek(2, os.SEEK_CUR) # 0x00 ?? imoavi_h.seek(4, os.SEEK_CUR) # 720 ?? imoavi_h.seek(4, os.SEEK_CUR) # Full size without header? to_next_size = struct.unpack('<L', imoavi_h.read(4))[0] # Bytes till next header imoavi_h.seek(16, os.SEEK_CUR) # 0x00 jpg_size = struct.unpack('<L', imoavi_h.read(4))[0] imoavi_h.seek(4, os.SEEK_CUR) # 0x00 file_num = 0 file_buffer.extend(imoavi_h.read(jpg_size)) outfile_name = prepare_filename(imoavi_f, output_dir, '_' + (str(file_num)).zfill(3) + '.jpg') create_file(outfile_name, file_buffer) while to_next_size != 0: file_buffer = bytearray(b'') to_next_size = struct.unpack('<L', imoavi_h.read(4))[0] if to_next_size == 24: # 0x1C header for index part file_buffer.extend(imoavi_h.read(to_next_size)) outfile_name = prepare_filename(imoavi_f, output_dir, '_' + '.index') create_file(outfile_name, file_buffer, 'ab') # concatenate with index file else: imoavi_h.seek(2, os.SEEK_CUR) # unknown imoavi_h.seek(2, os.SEEK_CUR) # Unknown, almost always FF FF or FF FE file_num = struct.unpack('B', imoavi_h.read(1))[0] # File number imoavi_h.seek(11, os.SEEK_CUR) # 0x00 jpg_size = struct.unpack('<L', imoavi_h.read(4))[0] imoavi_h.seek(4, os.SEEK_CUR) # 0x00 file_buffer.extend(imoavi_h.read(jpg_size)) outfile_name = prepare_filename(imoavi_f, output_dir, '_' + (str(file_num)).zfill(3) + '.jpg') create_file(outfile_name, file_buffer) 


рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдиреВ рдореЗрдВ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рд╕реЗ рдПрдиреАрдореЗрд╢рди рд╕рд┐рд░реНрдл рдлрд╝рд╛рдЗрд▓ 1_ уГИ уГл you you you you you уГ╝ .b рдореЗрдВ imoavi рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдпрд╣ рд╕рдм рдЦреЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдиреБрд╡рд╛рдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЗ рдХрдИ рдФрд░ рдЕрдкреНрд░рд┐рдп рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬреЛ рджреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ред рдЦреЗрд▓, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛, рдпреВрдирд┐рдХреЛрдб рдПрдирдХреЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рдЕрдиреБрд╡рд╛рджрд┐рдд рдкрд╛рда рдЧрд▓рдд рдкрддреНрд░ рд░рд┐рдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмреИрдХрдкреИрдХ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдкрд╛рдиреА рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЧреЗрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред

рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо (рдпрд╛ рдмрд▓реНрдХрд┐, рдЬреЛ рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рддрдХрдиреАрдХреА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдереЗ) рдиреЗ рд╕реЛрдЪрд╛: рд╢рд╛рдпрдж рд╣рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдШреВрдордирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд░реЗрдирдкреА рдЗрдВрдЬрди рдореЗрдВ рдЙрдкрдиреНрдпрд╛рд╕ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛, рдЙрд╕реА рд╕рдордп рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛?
рд╢рд╛рдпрдж рд╣рдо рдЬрд▓реНрджреА рдореЗрдВ рдереЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рд╣рдордиреЗ рдЬреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЙрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрдпрд╛ рдереА рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рдерд╛ред

рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╣рдордиреЗ рдХреНрдпрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛?
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВред

рдХрдбрд╝рд┐рдпрд╛рдБ: рдЬрд╛рдкрд╛рдиреА рдХреНрдпреВрд▓реА рдЗрдВрдЬрди рд╢рд┐рдлреНрдЯ рдЬрд┐рд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЯреЗрдмрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╣рдорд╛рд░реА

рдмрд┐рдЯрдмрдХреЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд┐рдлреНрдЯ рдЬреАрд╕ рд╕реЗ рдпреВрдЯреАрдПрдл -8 рдПрд╕рдореЛрдбрд┐рдпрди exfp3_v3 рдпреВрдЯрд┐рд▓рд┐рдЯреА рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ





Source: https://habr.com/ru/post/hi426431/


All Articles