"рдореИрдВ рдкрддреНрдерд░ рдирд╣реАрдВ рджреЗрддрд╛" рдпрд╛ "рд╢рд╛рдкрд┐рдд рднреВрдорд┐" рдЦреЗрд▓ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


рдХреНрдпрд╛ рдЖрдк рдХрдИ рд░реВрд╕реА рдЦреЗрд▓реЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ? рдЧреБрдгрд╡рддреНрддрд╛? рдпрд╛рджрдЧрд╛рд░? рд╣рд╛рдБ, рд╡реЗ рдереЗред рдпрджрд┐ рдЖрдкрдХреА рдЙрдореНрд░ 35 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдЖрдк рд░реВрд╕реА рдЦреЗрд▓ рдЙрджреНрдпреЛрдЧ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╢рд╛рдкрд┐рдд рднреВрдорд┐ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред


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


рдЦреЗрд▓ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реЛрдЧреА рдХрд┐ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ?


рдкрд░рд┐рдЪрдп


рдЦреЗрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА


рд╢рд╛рдкрд┐рдд рднреВрдорд┐ - рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реАрдЖрдИрдПрд╕, рдПрд╡рд┐рд▓ рдЖрдЗрд▓реИрдВрдбреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ : рд▓рд╛рдирдд рдЖрддреНрдорд╛ рдХрд╛ рдЕрднрд┐рд╢рд╛рдк , 2000 рдореЗрдВ рдЬрд╛рд░реА рдПрдХ рдЪреБрдкрдХреЗ-рдЖрд░рдкреАрдЬреА рдЧреЗрдоред рдЦреЗрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдирд┐рд╡рд▓ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЙрд╕ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд▓реЛрдбрд╛ рдЧреЗрдореНрд╕ (рд╡рд┐рджреЗрд╢реЛрдВ рдореЗрдВ рд░реЗрдЬ рдСрдл рдореИрдЬреЗрд╕) рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЪреБрдХрд╛ рдерд╛ред рдореЙрд╕реНрдХреЛ рд╕реНрдЯреЗрдЯ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдХреЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реНрдирд╛рддрдХ рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рдереЗ - рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреАрди рдЖрдпрд╛рдореА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдЦреЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рд╛рдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдХреНрд╖рдо рдереЗред
2010 рдореЗрдВ, Mail.Ru ( рд╕реВрдЪрдирд╛ ) рдиреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдирд╛рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЦреЗрд▓ рдЕрднреА рднреА Nival рдХреА рдУрд░ рд╕реЗ GOG рд╕реНрдЯреЛрд░ рдореЗрдВ рдмреЗрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред


рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЦреЗрд▓ 18 рд╕рд╛рд▓ рдХрд╛ рд╣реЛ рдЧрдпрд╛ - рдЬрдиреНрдорджрд┐рди 26 рдЕрдХреНрдЯреВрдмрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реАрдЖрдИрдПрд╕ рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХреА рддрд╛рд░реАрдЦред рдЙрдореНрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдЕрднреА рднреА рд╕реЗрд╡рд╛ рдореЗрдВ рд╣реИ: рд╕рдордп-рд╕рдордп рдкрд░, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЧреАрдкрд╛рдЯ рдХреЗ рдЬрдВрдЧрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдПрдХ рджрд╕реНрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рджрд░реНрдЬрди рдпрд╛ рджреЛ рдХрдВрдХрд╛рд▓реЛрдВ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкрд╛рдпрдерди 3 рдореЗрдВ "рдЦреБрдж рдХреЗ рд▓рд┐рдП" рдПрдХ рддрд░рдлрд╝рд╛ рдХрдирд╡рд░реНрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕реНрд╡рд░реВрдкреЛрдВ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ, рдХрд┐рд╕реА рддрд░рд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдХреБрдЫ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреИрддрд╛рдИ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рд╕рдм рдХреБрдЫ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рдФрд░ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рд╡рд┐рдХреА рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реБрдЖред


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


... рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдП


рд╕рднреА рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛рдПрдВ (.ksy рдлрд╛рдЗрд▓реЗрдВ) рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдореЗрдВ рджреЛ-рдХреНрд▓рд┐рдХ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдгреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдореНрдорд╛рдирд┐рдд рд╣рдмрд░ YAML (рдФрд░ JSON) рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рднреА рдпреЛрдЬрдирд╛рдПрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдВрдкрд╛рджрдХ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдирдкреАрдкреАред


рд╕рдВрд╕рд╛рдзрди рдФрд░ рд╡реЗ рдХрд╣рд╛рдБ рд░рд╣рддреЗ рд╣реИрдВ


рдЦреЗрд▓ рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЬрди рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рд▓рд╛рдВрдЪрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреИрдХ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиред


рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдЦреЗрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЬреАрдУрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреИрдорд░рд╛ рдмрдЧ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╕рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЧреЗрдо рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╣рдо рддреБрд░рдВрдд рдирдП рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ: рдПрдПрд╕рдЖрдИ рдФрд░ рдЖрд░рдИрдЬреАред
рдкрд╣рд▓рд╛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдЦреЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рд╣реИред


REG


рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЬрд╛рдиреЗ-рдорд╛рдиреЗ рдЯреЗрдХреНрд╕реНрдЯ INI рдлрд╛рдЗрд▓реЛрдВ рдХреА рдмрд╛рдЗрдирд░реА рдХреНрд░рдордмрджреНрдзрддрд╛ рд╣реИрдВред
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреБрдВрдЬреА рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЖрд░рдИрдЬреА рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЧрддрд┐ - 2000 рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЗрд╕ рдЖрд░реЗрдЦ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
meta: id: reg title: Evil Islands, REG file (packed INI) application: Evil Islands file-extension: reg license: MIT endian: le doc: Packed INI file seq: - id: magic contents: [0xFB, 0x3E, 0xAB, 0x45] doc: Magic bytes - id: sections_count type: u2 doc: Number of sections - id: sections_offsets type: section_offset doc: Sections offset table repeat: expr repeat-expr: sections_count types: section_offset: doc: Section position in file seq: - id: order type: s2 doc: Section order number - id: offset type: u4 doc: Global offset of section in file instances: section: pos: offset type: section types: section: doc: Section representation seq: - id: keys_count type: u2 doc: Number of keys in section - id: name_len type: u2 doc: Section name lenght - id: name type: str encoding: cp1251 size: name_len doc: Section name - id: keys type: key doc: Section's keys repeat: expr repeat-expr: keys_count types: key: doc: Named key seq: - id: order type: s2 doc: Key order in section - id: offset type: u4 doc: Key offset in section instances: key_record: pos: _parent._parent.offset + offset type: key_data key_data: seq: - id: packed_type type: u1 doc: Key value info - id: name_len type: u2 doc: Key name lenght - id: name type: str encoding: cp1251 size: name_len doc: Key name - id: value type: value doc: Key value instances: is_array: value: packed_type > 127 doc: Is this key contain array value_type: value: packed_type & 0x7F doc: Key value type types: value: doc: Key value seq: - id: array_size type: u2 if: _parent.is_array doc: Value array size - id: data type: switch-on: _parent.value_type cases: 0: s4 1: f4 2: string repeat: expr repeat-expr: '_parent.is_array ? array_size : 1' doc: Key value data string: doc: Sized string seq: - id: len type: u2 doc: String lenght - id: value type: str encoding: cp1251 size: len doc: String 

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: 2002 рдореЗрдВ, рдирд┐рд╡рд▓ рдиреЗ рдЦреЗрд▓ рдХреЗ рд╕рдореБрджрд╛рдп ( рд╕рд╛рдЗрдЯ рд╕реНрдиреИрдкрд╢реЙрдЯ ) рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрдкрдХрд░рдг рд╕рд╛рдЭрд╛ рдХрд┐рдП - рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд░реАрдВрдЧ рдореЗрдВ рдЖрдИрдПрдирдЖрдИ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝рд░ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рднрд▓реЗ рд╣реА рд╡рд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рди рд╣реЛред

рдкреНрд░рд╛рд░рдВрдн рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдЪрд▓реЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рд╕реАрдПрдПрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓реЗ рдХреИрдорд░рд╛ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдкрдбрд╝рддреА рд╣реИред


рд╕реАрдПрдПрдо


рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд░рд╛рд░реВрдк рдмрд╕ рд╕рдордп рдХреЗ рд╕рд╛рде рдХреИрдорд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреИрдХ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреИрдорд░рд╛ рд╕реНрдерд┐рддрд┐ рдФрд░ рд░реЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЕрдиреНрдп рджреЛ рдХреНрд╖реЗрддреНрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╕рдордп рдФрд░ рдХрджрдо рд╣реИрдВред



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: cam title: Evil Islands, CAM file (cameras) application: Evil Islands file-extension: cam license: MIT endian: le doc: Camera representation seq: - id: cams type: camera repeat: eos types: vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis quat: doc: quaternion seq: - id: w type: f4 doc: w component - id: x type: f4 doc: x component - id: y type: f4 doc: y component - id: z type: f4 doc: z component camera: doc: Camera parameters seq: - id: unkn0 type: u4 doc: unknown - id: unkn1 type: u4 doc: unknown - id: position type: vec3 doc: camera's position - id: rotation type: quat doc: camera's rotation 

рдЕрдЧрд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ - Res, (рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ!) RES рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред


рдЖрд░рдИрдПрд╕


рдпрд╣ рдкреНрд░рд╛рд░реВрдк рдХрднреА-рдХрднреА рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рддрд╣рдд рдЫрд┐рдкрд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рдЕрднреА рднреА RES рд╣реИред
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ: рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░, рдирд╛рдореЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╣реИрдВред
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕реАрдзреЗ рдирд╛рдореЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред


рдпрд╣ рджреЛ рдмреЗрд╣рдж рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:


  1. рдмрдВрдж рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЬрд╛рдирдХрд╛рд░реА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  2. рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдмрд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдирд╛рдореЛрдВ рдХреЗ рддрд╣рдд рджреЗрдЦреЗрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдПрдХ рдлреИрди рд░рд┐рдкреИрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдЦреЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдмрд╣реБрдд рдХрдо рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдореВрд▓ рд╡рд┐рддрд░рдг рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: res title: Evil Islands, RES file (resources archive) application: Evil Islands file-extension: res license: MIT endian: le doc: Resources archive seq: - id: magic contents: [0x3C, 0xE2, 0x9C, 0x01] doc: Magic bytes - id: files_count type: u4 doc: Number of files in archive - id: filetable_offset type: u4 doc: Filetable offset - id: nametable_size type: u4 doc: Size of filenames instances: nametable_offset: value: filetable_offset + 22 * files_count doc: Offset of filenames table filetable: pos: filetable_offset type: file_record repeat: expr repeat-expr: files_count doc: Files metadata table types: file_record: doc: File metadata seq: - id: next_index type: s4 doc: Next file index - id: file_size type: u4 doc: Size of file in bytes - id: file_offset type: u4 doc: File data offset - id: last_change type: u4 doc: Unix timestamp of last change time - id: name_len type: u2 doc: Lenght of filename - id: name_offset type: u4 doc: Filename offset in name array instances: name: io: _root._io pos: name_offset + _parent.nametable_offset type: str encoding: cp1251 size: name_len doc: File name data: io: _root._io pos: file_offset size: file_size doc: Content of file 

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдЦреЗрд▓ рдХреЗ рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, Speech.res рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЖрдХрд╛рд░ рджреЛ рдмрд╛рд░ рдмрдбрд╝рд╛ рд╣реИ - рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЦреЗрд▓ рдПрдХ рд╕реАрдбреА рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЕрдм рдЖрдк рд╕рднреА рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдиреЗрд╕реНрдЯреЗрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ):


  • рдЖрд░рдИрдПрд╕ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ,
  • MPR - рдЦреЗрд▓ рд╕реНрддрд░реЛрдВ рдХрд╛ рдкрд░рд┐рджреГрд╢реНрдп,
  • MQ - рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА,
  • рдПрдПрдирдПрдо - рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ,
  • MOD - 3 рдбреА рдореЙрдбрд▓,
  • рдмреЙрди - рдореЙрдбрд▓ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рд╕реНрдерд╛рдиред

рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо BON рдФрд░ ANM рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рд▓ рджреЗрдВрдЧреЗред


рдЖрдк рд╕рднреА рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд╛рд░ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  1. рдмрдирд╛рд╡рдЯ;
  2. рдбреЗрдЯрд╛рдмреЗрд╕;
  3. рдореЙрдбрд▓;
  4. рд╕реНрддрд░ рдХреА рдлрд╛рдЗрд▓реЗрдВред

рдЖрдЗрдП рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рдеред


рдПрдордПрдордкреА


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



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: mmp title: Evil Islands, MMP file (texture) application: Evil Islands file-extension: mmp license: MIT endian: le doc: MIP-mapping texture seq: - id: magic contents: [0x4D, 0x4D, 0x50, 0x00] doc: Magic bytes - id: width type: u4 doc: Texture width - id: height type: u4 doc: Texture height - id: mip_levels_count type: u4 doc: Number of MIP-mapping stored levels - id: fourcc type: u4 enum: pixel_formats doc: FourCC label of pixel format - id: bits_per_pixel type: u4 doc: Number of bits per pixel - id: alpha_format type: channel_format doc: Description of alpha bits - id: red_format type: channel_format doc: Description of red bits - id: green_format type: channel_format doc: Description of green bits - id: blue_format type: channel_format doc: Description of blue bits - id: unused size: 4 doc: Empty space - id: base_texture type: switch-on: fourcc cases: 'pixel_formats::argb4': block_custom 'pixel_formats::dxt1': block_dxt1 'pixel_formats::dxt3': block_dxt3 'pixel_formats::pnt3': block_pnt3 'pixel_formats::r5g6b5': block_custom 'pixel_formats::a1r5g5b5': block_custom 'pixel_formats::argb8': block_custom _: block_custom types: block_pnt3: seq: - id: raw size: _root.bits_per_pixel block_dxt1: seq: - id: raw size: _root.width * _root.height >> 1 block_dxt3: seq: - id: raw size: _root.width * _root.height block_custom: seq: - id: lines type: line_custom repeat: expr repeat-expr: _root.height types: line_custom: seq: - id: pixels type: pixel_custom repeat: expr repeat-expr: _root.width types: pixel_custom: seq: - id: raw type: switch-on: _root.bits_per_pixel cases: 8: u1 16: u2 32: u4 instances: alpha: value: '_root.alpha_format.count == 0 ? 255 : 255 * ((raw & _root.alpha_format.mask) >> _root.alpha_format.shift) / (_root.alpha_format.mask >> _root.alpha_format.shift)' red: value: '255 * ((raw & _root.red_format.mask) >> _root.red_format.shift) / (_root.red_format.mask >> _root.red_format.shift)' green: value: '255 * ((raw & _root.green_format.mask) >> _root.green_format.shift) / (_root.green_format.mask >> _root.green_format.shift)' blue: value: '255 * ((raw & _root.blue_format.mask) >> _root.blue_format.shift) / (_root.blue_format.mask >> _root.blue_format.shift)' channel_format: doc: Description of bits for color channel seq: - id: mask type: u4 doc: Binary mask for channel bits - id: shift type: u4 doc: Binary shift for channel bits - id: count type: u4 doc: Count of channel bits enums: pixel_formats: 0x00004444: argb4 0x31545844: dxt1 0x33545844: dxt3 0x33544E50: pnt3 0x00005650: r5g6b5 0x00005551: a1r5g5b5 0x00008888: argb8 

рд╕рдВрднрд╡ рдкрд┐рдХреНрд╕реЗрд▓ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк:


FourCCрд╡рд┐рд╡рд░рдг
рекрек рекрек режреж режрежARGB4
рекрек рел релрек рейрезDXT1
рекрек рел релрек рейрейDXT3
50 4 рдИ 54 33PNT3 - RLE рд╕рдВрдкреАрдбрд╝рд┐рдд ARGB8
релреж релрем режреж режрежR5G5B5
релрез релрел режреж режрежA1R5G5B5
88 88 00 00ARGB8

PNT3 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдпрджрд┐ рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдк PNT3 рд╣реИ , рддреЛ рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдВрд░рдЪрдирд╛ ARGB8 рд╣реИ; bits_per_pixel - рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕рдВрдХреБрдЪрд┐рдд рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ред


PNT3 рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдирд╛


 n = 0 destination = b"" while src < size: v = int.from_bytes(source[src:src + 4], byteorder='little') src += 4 if v > 1000000 or v == 0: n += 1 else: destination += source[src - (1 + n) * 4:src - 4] destination += b"\x00" * v n = 0 

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдХреБрдЫ рдмрдирд╛рд╡рдЯ рд▓рдВрдмрд╡рдд рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИрдВ (рдпрд╛ рдХреБрдЫ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ?)ред
рдФрд░ рдЦреЗрд▓ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╕реЗ рдмрд╣реБрдд рдИрд░реНрд╖реНрдпрд╛ рдХрд░рддрд╛ рд╣реИ - рдЕрдЧрд░ рдЫрд╡рд┐ рдПрдХ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде рд╣реИ, рддреЛ рдкрд╛рд░рджрд░реНрд╢реА рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд░рдВрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рд╕рдлреЗрдж - рдпрд╣ рдХрд┐рддрдирд╛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИред

рд╕рд░рд▓ рдкреНрд░рд╛рд░реВрдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВ, рдЖрдЗрдП рдЕрдзрд┐рдХ рдХрдареЛрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдВ - рдПрдХ рд╕рдордп рдореЗрдВ, рдореЙрдб рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рд░реИрдВрдХ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрдкрд╛рджрди рдЯреВрд▓ рдХреЛ рдХреНрд░реБрджреНрдз рдХрд┐рдпрд╛, рдФрд░ рд╡реНрдпрд░реНрде рдирд╣реАрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА рдереАред


рдбреЗрдЯрд╛рдмреЗрд╕ (* DB рдФрд░ рдЕрдиреНрдп)


рдпрд╣ рдкреНрд░рд╛рд░реВрдк рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдиреЛрдбреНрд╕ (рдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдЯреЗрдмрд▓) рдХрд╛ рдХреНрд░рдордмрджреНрдз рдкреЗрдбрд╝ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛: рдЯреЗрдмрд▓ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп "рд░реВрдЯ" рдиреЛрдб рдореЗрдВ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдПрдХ рдЯреЗрдмрд▓ рдХреЗ рдЕрдВрджрд░ рдиреЛрдб рд╣реЛрддреЗ рд╣реИрдВред


рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ, рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ:


 unsigned char type_index; unsigned char raw_size; //      unsigned length; //     read(raw_size); if (raw_size & 1) { length = raw_size >> 1; for (int i = 0; i < 3; i++) length <<= 8; read(raw_size); length += raw_size; } else length = raw_size >> 1; 

рддрд╛рд▓рд┐рдХрд╛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдкреНрд░рдХрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред


рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░
рдкрджрд╡рд┐рд╡рд░рдг
рдПрд╕рддрд╛рд░
рдореИрдВ4 рдмреА рдЗрдВрдЯ
рдпреВ4 рдмреА рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд
рдПрдл4 рдмреА рдлреНрд▓реЛрдЯ
рдПрдХреНрд╕рдмрд┐рдЯреНрд╕ рдмрд╛рдЗрдЯ
рдЪрдлреНрд▓реЛрдЯ рдРрд░реЗ
рдореИрдВint рд╕рд░рдгреА
рдмреАbool
рдЦрдмреВрд▓ рд╕рд░рдгреА
рдПрдЪрдЕрдЬреНрдЮрд╛рдд рд╣реЗрдХреНрд╕ рдмрд╛рдЗрдЯреНрд╕
рдЯреАрд╕рдордп
0рдХрд╣рд╛ рдирд╣реАрдВ
10FII
2SUFF
3FFFF
40SISS
50SISS00000U

рдЖрдзрд╛рд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг

рдЖрдЗрдЯрдо (.idb)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рд╕рд╛рдордЧреНрд░реАSSSIFFFIFIFfIX
рд╣рдерд┐рдпрд╛рд░SSISIIIFFFFIFIXB00000IHFFFfHHFF
рдХрд╡рдЪSSISIIIFFFFIFIXB00000ffBiHH
рддреНрд╡рд░рд┐рдд рдЖрдЗрдЯрдоSSISIIIFFFFIFIXB00000IIFFSbH
рдЖрдЗрдЯрдо рдЦреЛрдЬреЗрдВSSISIIIFFFFIFIXB00000Is
рдЖрдЗрдЯрдо рдмреЗрдЪрдирд╛SSISIIIFFFFIFIXB00000IHI

рд╕реНрд╡рд┐рдЪ (.ldb)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВSfIFTSSS

рдХреМрд╢рд▓ рдФрд░ рдХреМрд╢рд▓ (.pdb)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдХреМрд╢рд▓SSI0000000s
рдХреМрд╢рд▓SSI0000000SSIIIFFFIIIIBI

рдкреИрд░реЛрдВ рдХреЗ рдирд┐рд╢рд╛рди (рдкреНрд░рд┐рдВрдЯ)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдЦреВрди рдХреЗ рдирд┐рд╢рд╛рди0S11
рдЬреНрд╡рд╛рд▓рд╛ рдХреЗ рдирд┐рд╢рд╛рди0S110000001
рдкреИрд░реЛрдВ рдХреЗ рдирд┐рд╢рд╛рди0S11

рдордВрддреНрд░ (.sdb)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкSSSFIFIFFFFIIIIUSSIIbIXFFFFF
рд╕рдВрд╢реЛрдзрдХSSFIFFISX
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕0SssSX
рдХрд╡рдЪ рддрддреНрд░0SssSX
рд╣рдерд┐рдпрд╛рд░ рдкреИрдЯрд░реНрди0SssSX

рдЬреАрд╡ (.udb)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рднрд╛рдЧреЛрдВSffUU
рджреМрдбрд╝SUFFUUFfFUUf222222000000000000SssFSsfUUfUUIUSBFUUUU
рд░рд╛рдХреНрд╖рд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкSSIUIFFFSFFFFFFFFFUFFFFFFff33sfssSFFFFFUFUSF
рдПрдирдкреАрд╕реАSUFFFFbbssssFUB

рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ (acks.db)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдЙрддреНрддрд░0S0000000044444444444444444444445444444444444
рдЪрд┐рд▓реНрд▓рд╛рд╣рдЯ0S0000000044444
рдЕрдиреНрдп0S0000000044

Quests (.qdb)


рддрд╛рд▓рд┐рдХрд╛рд╕рдВрд░рдЪрдирд╛
рдХрд╛рд░реНрдпSFIISIIs
рдмреНрд░реАрдлрд┐рдВрдЧSFFsSsssssI

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: 16 рдЬрдирд╡рд░реА, 2002 рдХреЛ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдиреЗ рд╕реАрдПрд╕рд╡реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдХреЗ рд╕реНрд░реЛрдд рд╕реНрд░реЛрдд, рд╕рд╛рде рд╣реА рдЧреЗрдо рдкреНрд░рд╛рд░реВрдк ( рд╕рд╛рдЗрдЯ рд╕реНрдиреИрдкрд╢реЙрдЯ ) рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛-рдХрдирд╡рд░реНрдЯрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЙрд▓рдЯрд╛ рдХрдирд╡рд░реНрдЯрд░ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдзреАрдорд╛ рдирд╣реАрдВ рдерд╛ред рдореЙрдбрдореЗрдХрд░реНрд╕ рд╕реЗ рдлрд╝реАрд▓реНрдб рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдо рд╕реЗ рдХрдо рджреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдПрд╢рд┐рдпрд╛рдИ рд╡рд┐рдХрд╛рд╕ рдмреИрдВрдХ


рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдиреАрдореЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд * DB рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдХрд╛рдлреА "рдорд╛рдирд╡" рд╣реИ - рдпрд╣ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХрд▓-рд╕реНрддрд░реАрдп рддрд╛рд▓рд┐рдХрд╛ рд╣реИред



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: adb title: Evil Islands, ADB file (animations database) application: Evil Islands file-extension: adb license: MIT endian: le doc: Animations database seq: - id: magic contents: [0x41, 0x44, 0x42, 0x00] doc: Magic bytes - id: animations_count type: u4 doc: Number of animations in base - id: unit_name type: str encoding: cp1251 size: 24 doc: Name of unit - id: min_height type: f4 doc: Minimal height of unit - id: mid_height type: f4 doc: Middle height of unit - id: max_height type: f4 doc: Maximal height of unit - id: animations type: animation doc: Array of animations repeat: expr repeat-expr: animations_count types: animation: doc: Animation's parameters seq: - id: name type: str encoding: cp1251 size: 16 doc: Animation's name - id: number type: u4 doc: Index in animations array - id: additionals type: additional doc: Packed structure with animation parameters - id: action_probability type: u4 doc: Percents of action probability - id: animation_length type: u4 doc: Lenght of animation in game ticks - id: movement_speed type: f4 doc: Movement speed - id: start_show_hide1 type: u4 - id: start_show_hide2 type: u4 - id: start_step_sound1 type: u4 - id: start_step_sound2 type: u4 - id: start_step_sound3 type: u4 - id: start_step_sound4 type: u4 - id: start_hit_frame type: u4 - id: start_special_sound type: u4 - id: spec_sound_id1 type: u4 - id: spec_sound_id2 type: u4 - id: spec_sound_id3 type: u4 - id: spec_sound_id4 type: u4 types: additional: seq: - id: packed type: u8 instances: weapons: value: 'packed & 127' allowed_states: value: '(packed >> 15) & 7' action_type: value: '(packed >> 18) & 15' action_modifyer: value: '(packed >> 22) & 255' animation_stage: value: '(packed >> 30) & 3' action_forms: value: '(packed >> 36) & 63' 

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдХрдИ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЫреЛрдЯрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реЛред

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╡рд┐рд░рд╛рдо рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рд╣рдорд╛рд░реА рдкрджреНрдзрддрд┐ рдирд╣реАрдВред рдмреЗрд╣рддрд░ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд╛рдо рдЖрддрд╛ рд╣реИ - рдЬреАрд╡ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдореЙрдбрд▓ рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рд░реВрдк


рдирд╛рдо рджреЛ рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рддрд╛рд░реНрдХрд┐рдХ "рд╕реНрддрд░" рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╣рд┐рд▓рд╛ рдкрд╛рддреНрд░ unhufe рд╣реЛрдЧрд╛ - Unit > Human > Female , рдФрд░ initwesp - Inventory > Item > Weapon > Spear , рдпрд╛рдиреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ рдПрдХ рд╕реНрдкреАрдпрд░ (рдмреИрдХ рдирд╣реАрдВ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ)ред


рдирд╛рдо рддрддреНрд╡реЛрдВ рдХрд╛ рдкреВрд░рд╛ рдкреЗрдбрд╝:
 un: # unit an: # animal wi: # wild ti # tiger ba # bat bo # boar hy # hyen de # deer gi # rat ra # rat cr # crawler wo # wolf ho: # home co # cow pi # pig do # dog ho # horse ha # hare or: # orc fe # female ma # male mo: # monster co # column (menu) un # unicorn cu # Curse be # beholder tr # troll el # elemental su # succub (harpie) ba # banshee dr # driad sh # shadow li # lizard sk # skeleton sp # spider go # golem, goblin ri # Rick og # ogre zo # zombie bi # Rik's dragon cy # cyclope dg # dragon wi # willwisp mi # octopus to # toad hu: # human fe # female ma # male in: # inventory it: # item qu # quest qi # interactive ar: # armor pl # plate gl # gloves lg # leggins bt # boots sh # shirt hl # helm pt # pants li: # loot mt # material tr # trade we: # weapon hm # hammer dg # dagger sp # spear cb # crossbow sw # sword ax # axe bw # bow gm # game menu fa: # faces un: # unit an: # animal wi: # wild ti: # tiger face # face ba: # bat face # face bo: # boar face # face de: # deer face # face ra: # rat face # face cr: # crawler face # face wo: # wolf face # face ho: # home co: # cow face # face pi: # pig face # face do: # dog face # face ho: # horse face # face ha: # hare face # face hu: # human fe: # female fa # me # th # ma: # male fa # me # th # mo: # monster to: # toad face # face tr: # troll face # face or: # orc face # face sp: # spider face # face li: # lizard face # face na: # nature fl: # flora bu # bush te # termitary tr # tree li # waterplant wa # waterfall sk # sky st # stone ef: # effects cu # ar # co # components st: # static si # switch bu: # building to # tower ho # house tr # trap br # bridge ga # gate we # well (waterhole) wa: # wall me # medium li # light to # torch st # static 

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдЗрд╕ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдорд╢рд░реВрдо рдкреЗрдбрд╝ рд╣реИрдВ, рдЧреЛрдмрд▓рд┐рди рдХреЗ рд╕рд╛рде рдЧреЛрд▓реЗ рднрд╛рдИ рд╣реИрдВ, рдФрд░ рдЯрдХрд╛-рд░рд┐рдХ рдПрдХ рд░рд╛рдХреНрд╖рд╕ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣рд╛рдВ рдЖрдк рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ "рдХрд╛рдордХрд╛рдЬреА" рдирд╛рдореЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрджрд┐рдЧреНрдз рд░реВрдк рд╕реЗ рдбреА рдПрдВрдб рдбреА рдХреЗ рд╕рдорд╛рди рд╣реИрдВ - рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ (рдмреБрд░реА рдирдЬрд░), рд╕рдХреНрдХрд╛ (рд╣рд╛рд░реНрдкреА), рдУрдЧрд░ (рдирд░рднрдХреНрд╖реА), рдбреНрд░рд╛рдпрдб (рд╡рдирд╡рд╛рд╕реА)ред

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


LNK


рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ - рдореЙрдбрд▓ рдХрд╛ рдЖрдзрд╛рд░ред рдЖрдзреБрдирд┐рдХ 3 рдбреА рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рдкрджрд╛рдиреБрдХреНрд░рдоред



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: lnk title: Evil Islands, LNK file (bones hierarchy) application: Evil Islands file-extension: lnk license: MIT endian: le doc: Bones hierarchy seq: - id: bones_count type: u4 doc: Number of bones - id: bones_array type: bone repeat: expr repeat-expr: bones_count doc: Array of bones types: bone: doc: Bone node seq: - id: bone_name_len type: u4 doc: Length of bone's name - id: bone_name type: str encoding: cp1251 size: bone_name_len doc: Bone's name - id: parent_name_len type: u4 doc: Length of bone's parent name - id: parent_name type: str encoding: cp1251 size: parent_name_len doc: Bone's parent name 

рдореВрд▓ рд╣рдбреНрдбреА рдХрд╛ рдореВрд▓ рдирд╛рдо рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ (рд▓рдВрдмрд╛рдИ 0)ред


рд╣рдбреНрдбрд┐рдпрд╛рдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рджреЗрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрдВрдХрд╛рд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдмреЛрди


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



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: bon title: Evil Islands, BON file (bone position) application: Evil Islands file-extension: bon license: MIT endian: le doc: Bone position seq: - id: position type: vec3 doc: Bone translation repeat: eos types: vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣реИрдВ - рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдЧреЗрдо рдЗрдВрдЬрди рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдереЗ - рдЯреНрд░рд┐рд▓рд┐рдирд┐рдпрд░ рдореЙрдбрд▓ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рдиред


рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдореЙрдбрд▓ рдХреЗ рддреАрди рдкреНрд░рдХреНрд╖реЗрдк рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ - рд╕рд╢рд░реНрдд, рддрд╛рдХрдд, рдирд┐рдкреБрдгрддрд╛, рд╡рд┐рдХрд╛рд╕ред рдореЙрдбрд▓ рдХреЗ 8 рдЪрд░рдо рд░рд╛рдЬреНрдп рднреА рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЯреНрд░рд┐рд▓рд┐рдирд┐рдпрд░ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реА
 def trilinear(val, coefs=[0, 0, 0]): # Linear interpolation by str t1 = val[0] + (val[1] - val[0]) * coefs[1] t2 = val[2] + (val[3] - val[2]) * coefs[1] # Bilinear interpolation by dex v1 = t1 + (t2 - t1) * coefs[0] # Linear interpolation by str t1 = val[4] + (val[5] - val[4]) * coefs[1] t2 = val[6] + (val[7] - val[6]) * coefs[1] # Bilinear interpolation by dex v2 = t1 + (t2 - t1) * coefs[0] # Trilinear interpolation by height return v1 + (v2 - v1) * coefs[2] 

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдЯреНрд░рд┐рд▓рд┐рдпрдирд┐рдпрд░ рдореЙрдбрд▓ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрддреНрдерд░ рдХрд╛ рджрд░рд╡рд╛рдЬрд╛ рдФрд░ рдЪреЗрд╕реНрдЯ рдЦреЛрд▓рдирд╛ред

рдЕрдм рдореЙрдбрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЦреБрдж рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рдЕрдВрдЬреАрд░


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



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: fig title: Evil Islands, FIG file (figure) application: Evil Islands file-extension: fig license: MIT endian: le doc: 3d mesh seq: - id: magic contents: [0x46, 0x49, 0x47, 0x38] doc: Magic bytes - id: vertex_count type: u4 doc: Number of vertices blocks - id: normal_count type: u4 doc: Number of normals blocks - id: texcoord_count type: u4 doc: Number of UV pairs - id: index_count type: u4 doc: Number of indeces - id: vertex_components_count type: u4 doc: Number of vertex components - id: morph_components_count type: u4 doc: Number of morphing components - id: unknown contents: [0, 0, 0, 0] doc: Unknown (aligment) - id: group type: u4 doc: Render group - id: texture_index type: u4 doc: Texture offset - id: center type: vec3 doc: Center of mesh repeat: expr repeat-expr: 8 - id: aabb_min type: vec3 doc: AABB point of mesh repeat: expr repeat-expr: 8 - id: aabb_max type: vec3 doc: AABB point of mesh repeat: expr repeat-expr: 8 - id: radius type: f4 doc: Radius of boundings repeat: expr repeat-expr: 8 - id: vertex_array type: vertex_block doc: Blocks of raw vertex data repeat: expr repeat-expr: 8 - id: normal_array type: vec4x4 doc: Packed normal data repeat: expr repeat-expr: normal_count - id: texcoord_array type: vec2 doc: Texture coordinates data repeat: expr repeat-expr: texcoord_count - id: index_array type: u2 doc: Triangles indeces repeat: expr repeat-expr: index_count - id: vertex_components_array type: vertex_component doc: Vertex components array repeat: expr repeat-expr: vertex_components_count - id: morph_components_array type: morph_component doc: Morphing components array repeat: expr repeat-expr: morph_components_count types: morph_component: doc: Morphing components indeces seq: - id: morph_index type: u2 doc: Index of morphing data - id: vertex_index type: u2 doc: Index of vertex vertex_component: doc: Vertex components indeces seq: - id: position_index type: u2 doc: Index of position data - id: normal_index type: u2 doc: Index of normal data - id: texture_index type: u2 doc: Index of texcoord data vec2: doc: 2d vector seq: - id: u type: f4 doc: u axis - id: v type: f4 doc: v axis vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis vec3x4: doc: 3d vector with 4 values per axis seq: - id: x type: f4 doc: x axis repeat: expr repeat-expr: 4 - id: y type: f4 doc: y axis repeat: expr repeat-expr: 4 - id: z type: f4 doc: z axis repeat: expr repeat-expr: 4 vertex_block: doc: Vertex raw block seq: - id: block type: vec3x4 doc: Vertex data repeat: expr repeat-expr: _root.vertex_count vec4x4: doc: 4d vector with 4 values per axis seq: - id: x type: f4 doc: x axis repeat: expr repeat-expr: 4 - id: y type: f4 doc: y axis repeat: expr repeat-expr: 4 - id: z type: f4 doc: z axis repeat: expr repeat-expr: 4 - id: w type: f4 doc: w axis repeat: expr repeat-expr: 4 

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


рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рд╕рдВрднрд╡рддрдГ, рдПрд╕рдПрд╕рдИ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдорджрдж рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ 1999 рд╕реЗ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛ред

рдареАрдХ рд╣реИ, рд╣рдордиреЗ рдореЙрдбрд▓ рдкрдврд╝рд╛ рдФрд░ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрд╛рдпрдм рд╣реИред рдмрд┐рд▓реНрдХреБрд▓ - рдПрдирд┐рдореЗрд╢рди!


рдПрдПрдирдПрдо


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



рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
 meta: id: anm title: Evil Islands, ANM file (bone animation) application: Evil Islands file-extension: anm license: MIT endian: le doc: Bone animation seq: - id: rotation_frames_count type: u4 doc: Number of rotation frames - id: rotation_frames type: quat repeat: expr repeat-expr: rotation_frames_count doc: Bone rotations - id: translation_frames_count type: u4 doc: Number of translation frames - id: translation_frames type: vec3 repeat: expr repeat-expr: translation_frames_count doc: Bone translation - id: morphing_frames_count type: u4 doc: Number of morphing frames - id: morphing_vertex_count type: u4 doc: Number of vertices with morphing - id: morphing_frames type: morphing_frame repeat: expr repeat-expr: morphing_frames_count doc: Array of morphing frames types: vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis quat: doc: quaternion seq: - id: w type: f4 doc: w component - id: x type: f4 doc: x component - id: y type: f4 doc: y component - id: z type: f4 doc: z component morphing_frame: doc: Array of verteces morphing seq: - id: vertex_shift type: vec3 repeat: expr repeat-expr: _parent.morphing_vertex_count doc: Morphing shift per vertex 

рдпрд╣ рдмрд╛рдд рд╣реИ - рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдореЙрдбрд▓ рд╣реИ, рдЖрдк рддрд╛рдЬрд╝реА рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣рд░реНрдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рд╡рд┐рд╖рд╛рдж рдХрд╛ рдПрдХ рдХреНрд╖рдг

рдЬрд╛рдиреЗрдВ рдХрд┐ рдЫрд┐рдкрдХрд▓реА рдХреА рдЬрд░реВрд░рдд рдХреНрдпрд╛ рд╣реИ


рдЕрдкрдиреЗ рдШрд░ рдореЗрдВ рдЫрд┐рдкрдХрд▓реА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд


рд╣рд░рдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рдЖрдк рдЖ рдЧрдП рд╣реИрдВ рдпрд╛рд░ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред


Zach: рдпрд╣ рд╣реИ рдХрд┐ рддреБрдо рд╕рдм рдореБрдЭреЗ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛?


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


рд╣рд░рдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рд▓реЛрдЧ рд╕реЛрдиреЗ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕реЛрдиреЗ рдХреА рдЫрд┐рдкрдХрд▓рд┐рдпрд╛рдВ рдирд┐рд░реНрдмрд╛рдз рд╣реЛрддреА рд╣реИрдВред рддреБрдо рдореЗрд░рд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░реЛрдЧреЗ, рдФрд░ рдореИрдВ рддреБрдореНрд╣реЗрдВ рд╡рд╣ рд╕реЛрдирд╛ рджреВрдВрдЧрд╛ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИред рдмрд╣реБрдд рд╕реЛрдирд╛ рд╣реИред


Zach (рд╕реЛрдЪ-рд╕рдордЭрдХрд░ рдФрд░ рдмрд┐рдирд╛ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рдХреЗ) : рд╣рдореНрдо ... рдЧреЛрд▓реНрдб ... рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ ...


Zach: рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдЬрд┐рд╕ рдкреБрд░рд╛рдиреЗ рдЬрд╛рджреВрдЧрд░ рдХреЛ рдореИрдВ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЫрд┐рдкрдХрд▓реА рдПрдХ рдкреНрд░рд╛рдЪреАрди рд▓реЛрдЧ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ!


рд╣рд░рдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рдЫрд┐рдкрдХрд▓реА рдПрдХ рдкреНрд░рд╛рдЪреАрди рд▓реЛрдЧ рд╣реИрдВред рдореИрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд╣рдо рдмреВрдврд╝реЗ рдЖрджрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рдорд┐рд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВ?


Zach: рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ! рдЧреМрд░ рдХреАрдЬрд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИред


рд╣рд░реНрдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА (рдЧрдВрднреАрд░рддрд╛ рд╕реЗ) : рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдзреЛрдЦрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?


Zach: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдПрдХ рдордЬрд╛рдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЕрдиреНрдпрдерд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдВрднреАрд░ рдереЗред


рдж рд╣рд░реНрдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдордЬрд╛рдХ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдордЬрд╛рдХ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рддрдмред рдФрд░ рдЕрдм рдореБрдЭреЗ рдЖрдкрдХреЛ рдирд╣рд░ рдореЗрдВ рдкрд╛рдиреА рд▓реМрдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Orcs рдиреЗ рд╣рдорд╕реЗ рдкрд╛рдиреА рдЪреБрд░рд╛рдпрд╛ред


рд╣рд░рдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рдкрд╛рдиреА рдХреЗ рд╕рд╛рде рджрдХреНрд╖рд┐рдг рдХреА рдУрд░ рдЬрд╛рдПрдВред рдЖрдк рдмрд╛рдВрдз рдФрд░ рдирд╣рд░ рджреЗрдЦреЗрдВрдЧреЗред рдмрд╛рдВрдз рдХреЛ рдЙрдард╛рдирд╛ рд╣реЛрдЧрд╛ред рд▓реАрд╡рд░ред рдореИрдВ рджреЗ рджреВрдВрдЧрд╛ред рдЪреИрдирд▓ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрддреНрдерд░ред рдореИрдВрдиреЗ рдПрдХ рдкрддреНрдерд░ рдирд╣реАрдВ рджрд┐рдпрд╛ред рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣рд░ рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╕реНрдерд┐рдд рд╣реИред рдмрд╛рдВрдз рдХреЗ рдКрдкрд░ред рдкрддреНрдерд░ рднрд╛рд░реА рд╣реИред рдЬрдм рдУрд░реНрдХреНрд╕ рдЦреЛрджрд╛ рдЧрдпрд╛, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрдард╛ рд▓рд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдЙрд╕реЗ рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдЬрд▓реНрджреА рд╕реЗ рд╡рд╛рдкрд╕ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред


рд╣рд░рдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡рд╛рдкрд╕ рдЖрдУред рдореИрдВ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рдЬрд╛рджреВрдЧрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрддрд╛рдКрдВрдЧрд╛ред


Zach: рд╣рд╛рде рдкрд░ рд╣рд╛рде! рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЖрдк рдХрд╣рд╛рдиреА рдореЗрдВ рдереЛрдбрд╝реЗ рд╕реЗ рд╕рд┐рдХреНрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред


рдж рд╣рд░реНрдорд┐рдЯ рдЫрд┐рдкрдХрд▓реА: рд╕рд┐рдХреНрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд░рд┐рд╢реНрддреЗрджрд╛рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдПрдВ рдЬреЛ рджрдХреНрд╖рд┐рдг рдореЗрдВ рдЖрдЧреЗ рдЙрдерд▓реЗ рд╣реИрдВред рд╕рдмрд╕реЗ рджреВрд░ рд░реЗрддреАрд▓реЗ рджреНрд╡реАрдк, рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреАрд╕рд░рд╛ред рдЦрдЬрд╝рд╛рдирд╛ рдЖрдкрдХрд╛ рд╣реЛрдЧрд╛!


рдЫрд┐рдкрдХрд▓реА рд╣рд░рдорд┐рдЯ (рдЦреБрдж рдХреЛ) : рдЕрдЬреАрдм рдмрд╛рдд рд╣реИред рдЗрд╕ рдЖрджрдореА рдХреЛ рд╣рд╛рд╕реНрдп рдкрд╕рдВрдж рд╣реИред рдореИрдВ рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╡рд╣ рдЖрджрдореА рдирд╣реАрдВ рд╣рдВрд╕рд╛ред рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред


рдЕрдм - рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк: рдирдХреНрд╢рд╛ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рд╛рдВрд╕рдж


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


рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╡рд░рдг рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  • "рд╡рд┐рдЦрдВрдбреВ" рдХреА рд╕рдВрдЦреНрдпрд╛ - рдХрд╛рд░реНрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ 32x32 рдореАрдЯрд░;
  • рдЕрдзрд┐рдХрддрдо рдКрдБрдЪрд╛рдИ (рдЪреВрдВрдХрд┐ рд▓рдореНрдмрд╛рдИ рдХреА рдКрдБрдЪрд╛рдИ рдкреВрд░реНрдгрд╛рдВрдХ рдкреИрдорд╛рдиреЗ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ);
  • рдЯрд╛рдЗрд▓ рдПрдЯрд▓рд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред

, тАФ , .



 meta: id: mp title: Evil Islands, MP file (map header) application: Evil Islands file-extension: mp license: MIT endian: le doc: Map header seq: - id: magic contents: [0x72, 0xF6, 0x4A, 0xCE] doc: Magic bytes - id: max_altitude type: f4 doc: Maximal height of terrain - id: x_chunks_count type: u4 doc: Number of sectors by x - id: y_chunks_count type: u4 doc: Number of sectors by y - id: textures_count type: u4 doc: Number of texture files - id: texture_size type: u4 doc: Size of texture in pixels by side - id: tiles_count type: u4 doc: Number of tiles - id: tile_size type: u4 doc: Size of tile in pixels by side - id: materials_count type: u2 doc: Number of materials - id: animated_tiles_count type: u4 doc: Number of animated tiles - id: materials type: material doc: Map materials repeat: expr repeat-expr: materials_count - id: id_array type: u4 doc: Tile type repeat: expr repeat-expr: tiles_count enum: tile_type - id: animated_tiles type: animated_tile doc: Animated tiles repeat: expr repeat-expr: animated_tiles_count types: material: doc: Material parameters seq: - id: type type: u4 doc: Material type by enum: terrain_type - id: color type: rgba doc: RGBA diffuse color - id: self_illumination type: f4 doc: Self illumination - id: wave_multiplier type: f4 doc: Wave speed multiplier - id: warp_speed type: f4 doc: Warp speed multiplier - id: unknown size: 12 types: rgba: doc: RGBA color seq: - id: r type: f4 doc: Red channel - id: g type: f4 doc: Green channel - id: b type: f4 doc: Blue channel - id: a type: f4 doc: Alpha channel enums: terrain_type: 0: base 1: water_notexture 2: grass 3: water animated_tile: doc: Animated tile parameters seq: - id: start_index type: u2 doc: First tile of animation - id: length type: u2 doc: Animation frames count enums: tile_type: 0: grass 1: ground 2: stone 3: sand 4: rock 5: field 6: water 7: road 8: empty 9: snow 10: ice 11: drygrass 12: snowballs 13: lava 14: swamp 15: highrock 

terrain type
0
1
2
3

material type
0grass
1ground
2stone
3sand
4rock
5field
6water
7road
8(empty)
9snow
10ice
11drygrass
12snowballs
13lava
14swamp
15highrock

, Res/aiinfo.res/tileDesc.reg .


: , тАФ .
: .

. !


SEC


тАФ 3232 . , ZonenameXXXYYY .



 meta: id: sec title: Evil Islands, SEC file (map sector) application: Evil Islands file-extension: sec license: MIT endian: le doc: Map sector seq: - id: magic contents: [0x74, 0xF7, 0x4B, 0xCF] doc: Magic bytes - id: liquids type: u1 doc: Liquids layer indicator - id: vertexes type: vertex doc: Vertex array 33x33 repeat: expr repeat-expr: 1089 - id: liquid_vertexes type: vertex doc: Vertex array 33x33 if: liquids != 0 repeat: expr repeat-expr: 'liquids != 0 ? 1089 : 0' - id: tiles type: tile doc: Tile array 16x16 repeat: expr repeat-expr: 256 - id: liquid_tiles type: tile doc: Tile array 16x16 if: liquids != 0 repeat: expr repeat-expr: 'liquids != 0 ? 256 : 0' - id: liquid_material type: u2 doc: Index of material if: liquids != 0 repeat: expr repeat-expr: 'liquids != 0 ? 256 : 0' types: vertex: doc: Vertex data seq: - id: x_shift type: s1 doc: Shift by x axis - id: y_shift type: s1 doc: Shift by y axis - id: altitude type: u2 doc: Height (z position) - id: packed_normal type: normal doc: Packed normal normal: doc: Normal (3d vector) seq: - id: packed type: u4 doc: Normal packed in 4b instances: x: doc: Unpacked x component value: packed >> 11 & 0x7FF y: doc: Unpacked y component value: packed & 0x7FF z: doc: Unpacked z component value: packed >> 22 tile: doc: Tile parameters seq: - id: packed type: u2 doc: Tile information packed in 2b instances: index: doc: Tile index in texture value: packed & 63 texture: doc: Texture index value: packed >> 6 & 255 rotation: doc: Tile rotation (*90 degrees) value: packed >> 14 & 3 

тАФ .



10 z, 11 x y


 unsigned packed_normal; float x = ((float)((packed_normal >> 11) & 0x7FF) - 1000.0f) / 1000.0f; float y = ((float)(packed_normal & 0x7FF) - 1000.0f) / 1000.0f; float z = (float)(packed_normal >> 22) / 1000.0f; 


6 , 8 , 2


 unsigned short texture; unsigned char tile_index = f & 63; unsigned char texture_index = (f >> 6) & 255; unsigned char rotation = (f >> 14) & 3; 

3d


33 33 , , 3232 . тАФ 1 .


:
x = x + x_offset / 254
y = y + y_offset / 254
z = altitude / 65535 * max_altitude ( .mp )


"", :


  0 1 2 *-*-* |\|\| ~ 33 *-*-* |\|\| ~ 66 *-*-* ~ ~ ~ 

, , 1616 . тАФ 2 . , 90 .


. , , ID , MP .


: MP, , : ID , - .
ID тАФ .

тАФ :



- тАФ , .


MOB


( ) , , : . тАФ " ", .
, ( ).


:


 typedef structure { unsigned type_id; unsigned size; byte data[size - 8]; } node; 

(, !)


( , )


 meta: id: mob title: Evil Islands, MOB file (map entities) application: Evil Islands file-extension: mob license: MIT endian: le doc: Map entities tree seq: - id: root_node type: node doc: Root node types: node: doc: Entity node seq: - id: type_id type: u4 doc: Node children type ID - id: size type: u4 doc: Node full size - id: data type: node_data size: size - 8 doc: Node stored data node_data: doc: Node data seq: - id: value type: switch-on: _parent.type_id cases: 0xA000: node 0x00001E00: node 0x00001E01: node 0x00001E02: node 0x00001E03: node 0x00001E0B: node 0x00001E0E: node 0x0000A000: node 0x0000AA01: node 0x0000ABD0: node 0x0000B000: node 0x0000B001: node 0x0000CC01: node 0x0000DD01: node 0x0000E000: node 0x0000E001: node 0x0000F000: node 0x0000FF00: node 0x0000FF01: node 0x0000FF02: node 0xBBAB0000: node 0xBBAC0000: node 0xBBBB0000: node 0xBBBC0000: node 0xBBBD0000: node 0xBBBE0000: node 0xBBBF0000: node 0xDDDDDDD1: node _: u1 doc: Node elements repeat: eos 

()
AiGraph
AreaArray
Byte11
Diplomacy409632x32 2
Dword44
рдлреНрд▓реЛрдЯ44
LeverStats12
Null0
Plot123 floats (vec3)
Plot2DArray
Quaternion164 floats (vec4)
Record>8
Rectangle
рддрд╛рд░
StringArray>4
StringEncrypted>4
UnitStats180
Unknown

type_id
type_id
0x00000000RecordROOT
0x00001E00RecordVSS_SECTION
0x00001E01RecordVSS_TRIGER
0x00001E02RecordVSS_CHECK
0x00001E03RecordVSS_PATH
0x00001E04DwordVSS_ID
0x00001E05RectangleVSS_RECT
0x00001E06DwordVSS_SRC_ID
0x00001E07DwordVSS_DST_ID
0x00001E08рддрд╛рд░VSS_TITLE
0x00001E09рддрд╛рд░VSS_COMMANDS
0x00001E0AByteVSS_ISSTART
0x00001E0BRecordVSS_LINK
0x00001E0Cрддрд╛рд░VSS_GROUP
0x00001E0DByteVSS_IS_USE_GROUP
0x00001E0ERecordVSS_VARIABLE
0x00001E0FStringArrayVSS_BS_CHECK
0x00001E10StringArrayVSS_BS_COMMANDS
0x00001E11рддрд╛рд░VSS_CUSTOM_SRIPT
0x0000A000RecordOBJECTDBFILE
0x0000AA00NullLIGHT_SECTION
0x0000AA01RecordLIGHT
0x0000AA02рдлреНрд▓реЛрдЯLIGHT_RANGE
0x0000AA03рддрд╛рд░LIGHT_NAME
0x0000AA04PlotLIGHT_POSITION
0x0000AA05DwordLIGHT_ID
0x0000AA06ByteLIGHT_SHADOW
0x0000AA07PlotLIGHT_COLOR
0x0000AA08рддрд╛рд░LIGHT_COMMENTS
0x0000ABD0RecordWORLD_SET
0x0000ABD1PlotWS_WIND_DIR
0x0000ABD2рдлреНрд▓реЛрдЯWS_WIND_STR
0x0000ABD3рдлреНрд▓реЛрдЯWS_TIME
0x0000ABD4рдлреНрд▓реЛрдЯWS_AMBIENT
0x0000ABD5рдлреНрд▓реЛрдЯWS_SUN_LIGHT
0x0000B000RecordOBJECTSECTION
0x0000B001RecordOBJECT
0x0000B002DwordNID
0x0000B003DwordOBJTYPE
0x0000B004рддрд╛рд░OBJNAME
0x0000B005NullOBJINDEX
0x0000B006рддрд╛рд░OBJTEMPLATE
0x0000B007рддрд╛рд░OBJPRIMTXTR
0x0000B008рддрд╛рд░OBJSECTXTR
0x0000B009PlotOBJPOSITION
0x0000B00AQuaternionOBJROTATION
0x0000B00BNullOBJTEXTURE
0x0000B00CPlotOBJCOMPLECTION
0x0000B00DStringArrayOBJBODYPARTS
0x0000B00Eрддрд╛рд░PARENTTEMPLATE
0x0000B00Fрддрд╛рд░OBJCOMMENTS
0x0000B010NullOBJ_DEF_LOGIC
0x0000B011ByteOBJ_PLAYER
0x0000B012DwordOBJ_PARENT_ID
0x0000B013ByteOBJ_USE_IN_SCRIPT
0x0000B014ByteOBJ_IS_SHADOW
0x0000B015NullOBJ_R
0x0000B016рддрд╛рд░OBJ_QUEST_INFO
0x0000C000NullSC_OBJECTDBFILE
0x0000CC00NullSOUND_SECTION
0x0000CC01RecordSOUND
0x0000CC02DwordSOUND_ID
0x0000CC03PlotSOUND_POSITION
0x0000CC04DwordSOUND_RANGE
0x0000CC05рддрд╛рд░SOUND_NAME
0x0000CC06DwordSOUND_MIN
0x0000CC07DwordSOUND_MAX
0x0000CC08рддрд╛рд░SOUND_COMMENTS
0x0000CC09NullSOUND_VOLUME
0x0000CC0AStringArraySOUND_RESNAME
0x0000CC0BDwordSOUND_RANGE2
0x0000CC0DByteSOUND_AMBIENT
0x0000CC0EByteSOUND_IS_MUSIC
0x0000D000NullPR_OBJECTDBFILE
0x0000DD00NullPARTICL_SECTION
0x0000DD01RecordPARTICL
0x0000DD02DwordPARTICL_ID
0x0000DD03PlotPARTICL_POSITION
0x0000DD04рддрд╛рд░PARTICL_COMMENTS
0x0000DD05рддрд╛рд░PARTICL_NAME
0x0000DD06DwordPARTICL_TYPE
0x0000DD07рдлреНрд▓реЛрдЯPARTICL_SCALE
0x0000E000RecordDIRICTORY
0x0000E001RecordFOLDER
0x0000E002рддрд╛рд░DIR_NAME
0x0000E003DwordDIR_NINST
0x0000E004DwordDIR_PARENT_FOLDER
0x0000E005ByteDIR_TYPE
0x0000F000RecordDIRICTORY_ELEMENTS
0x0000FF00RecordSEC_RANGE
0x0000FF01RecordMAIN_RANGE
0x0000FF02RecordRANGE
0x0000FF05DwordMIN_ID
0x0000FF06DwordMAX_ID
0x31415926AiGraphAIGRAPH
0xACCEECCAрддрд╛рд░SS_TEXT_OLD
0xACCEECCBStringEncryptedSS_TEXT
0xBBAB0000RecordMAGIC_TRAP
0xBBAB0001DwordMT_DIPLOMACY
0xBBAB0002рддрд╛рд░MT_SPELL
0xBBAB0003AreaArrayMT_AREAS
0xBBAB0004Plot2DArrayMT_TARGETS
0xBBAB0005DwordMT_CAST_INTERVAL
0xBBAC0000RecordLEVER
0xBBAC0001NullLEVER_SCIENCE_STATS
0xBBAC0002ByteLEVER_CUR_STATE
0xBBAC0003ByteLEVER_TOTAL_STATE
0xBBAC0004ByteLEVER_IS_CYCLED
0xBBAC0005ByteLEVER_CAST_ONCE
0xBBAC0006LeverStatsLEVER_SCIENCE_STATS_NEW
0xBBAC0007ByteLEVER_IS_DOOR
0xBBAC0008ByteLEVER_RECALC_GRAPH
0xBBBB0000RecordUNIT
0xBBBB0001NullUNIT_R
0xBBBB0002рддрд╛рд░UNIT_PROTOTYPE
0xBBBB0003NullUNIT_ITEMS
0xBBBB0004UnitStatsUNIT_STATS
0xBBBB0005StringArrayUNIT_QUEST_ITEMS
0xBBBB0006StringArrayUNIT_QUICK_ITEMS
0xBBBB0007StringArrayUNIT_SPELLS
0xBBBB0008StringArrayUNIT_WEAPONS
0xBBBB0009StringArrayUNIT_ARMORS
0xBBBB000AByteUNIT_NEED_IMPORT
0xBBBC0000RecordUNIT_LOGIC
0xBBBC0001NullUNIT_LOGIC_AGRESSIV
0xBBBC0002ByteUNIT_LOGIC_CYCLIC
0xBBBC0003DwordUNIT_LOGIC_MODEL
0xBBBC0004рдлреНрд▓реЛрдЯUNIT_LOGIC_GUARD_R
0xBBBC0005PlotUNIT_LOGIC_GUARD_PT
0xBBBC0006ByteUNIT_LOGIC_NALARM
0xBBBC0007ByteUNIT_LOGIC_USE
0xBBBC0008NullUNIT_LOGIC_REVENGE
0xBBBC0009NullUNIT_LOGIC_FEAR
0xBBBC000AрдлреНрд▓реЛрдЯUNIT_LOGIC_WAIT
0xBBBC000BByteUNIT_LOGIC_ALARM_CONDITION
0xBBBC000CрдлреНрд▓реЛрдЯUNIT_LOGIC_HELP
0xBBBC000DByteUNIT_LOGIC_ALWAYS_ACTIVE
0xBBBC000EByteUNIT_LOGIC_AGRESSION_MODE
0xBBBD0000RecordGUARD_PT
0xBBBD0001PlotGUARD_PT_POSITION
0xBBBD0002NullGUARD_PT_ACTION
0xBBBE0000RecordACTION_PT
0xBBBE0001PlotACTION_PT_LOOK_PT
0xBBBE0002DwordACTION_PT_WAIT_SEG
0xBBBE0003DwordACTION_PT_TURN_SPEED
0xBBBE0004ByteACTION_PT_FLAGS
0xBBBF0000RecordTORCH
0xBBBF0001рдлреНрд▓реЛрдЯTORCH_STRENGHT
0xBBBF0002PlotTORCH_PTLINK
0xBBBF0003рддрд╛рд░TORCH_SOUND
0xDDDDDDD1RecordDIPLOMATION
0xDDDDDDD2DiplomacyDIPLOMATION_FOF
0xDDDDDDD3StringArrayDIPLOMATION_PL_NAMES
0xFFFFFFFFUnknownUNKNOWN

тАФ , , Nival, тАФ , ( , ).


 unsigned key; for (size_t i = 0; i < size; i++) { key += (((((key * 13) << 4) + key) << 8) - key) * 4 + 2531011; data[i] ^= key >> 16; } 

: , ( ) . , , , .

( , , тАФ Windows 98):



: , . , ( , , " : ", ).

, , - - , , Collada :




. , .


, . - , тАФ - , . , -...


тАФ !


UPD (23.01.2019):
, : github .
, (, "" ).


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


All Articles