[Scummvm-git-logs] scummvm master -> 570482a075dd83514ad146da6bce54bef4db9feb
NMIError
60350957+NMIError at users.noreply.github.com
Mon Sep 13 19:02:13 UTC 2021
This automated email contains information about 10 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
8a17747ea3 TOON: Add English demo character animation table
7dd628083a TOON: Fix English demo Flux idle anmiations
aff2f12440 TOON: Fix English demo Drew walking animation
8ac072c265 TOON: Fix array out of bounds access in killAmbientSFX
01daf7d22b TOON: Fix English demo inventory
aff1e60597 TOON: Fix English demo invalid additional Rif data
f2185bfb35 TOON: Fix English demo options menu
389fe44dda TOON: Implement English demo font rendering
c786c75695 TOON: Implement sparkles on English demo options screen
570482a075 TOON: Remove English demo unstable flag
Commit: 8a17747ea3c99e455930f88ac551dc5da1581ee8
https://github.com/scummvm/scummvm/commit/8a17747ea3c99e455930f88ac551dc5da1581ee8
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Add English demo character animation table
The English demo uses a different character animation table than the other
versions of the game.
Changed paths:
engines/toon/character.cpp
engines/toon/character.h
engines/toon/toon.cpp
engines/toon/toon.h
diff --git a/engines/toon/character.cpp b/engines/toon/character.cpp
index d68278f9d0..0bcfc245c1 100644
--- a/engines/toon/character.cpp
+++ b/engines/toon/character.cpp
@@ -681,9 +681,302 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
debugC(6, kDebugCharacter, "getSpecialAnimation(%d, %d)", characterId, animationId);
// very nice animation list hardcoded in the executable...
- // TODO This list does not seem to be correct for the English demo.
- static const SpecialCharacterAnimation anims[] = {
- { "TLK547_?", 9, 0, 0, 0, 0, 0, 1, 5, 8, 1, 8, 0, 255 },
+ static const SpecialCharacterAnimation regularAnims[] = {
+ {"TLK547_?", 9, 0, 0, 0, 0, 0, 1, 5, 8, 1, 8, 0, 255},
+ {"TLK555_?", 16, 0, 0, 0, 0, 6, 8, 10, 255, 6, 11, 2, 255},
+ {"LST657_?", 14, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 255},
+ {"TLK587_?", 18, 0, 0, 0, 0, 5, 7, 9, 11, 4, 13, 1, 255},
+ {"LST659_?", 14, 0, 0, 0, 0, 255, 255, 255, 255, 6, 8, 0, 255},
+ {"TLK595_?", 11, 0, 0, 0, 0, 3, 6, 255, 255, 1, 7, 0, 255},
+ {"IDL165_?", 13, 0, 0, 0, 0, 255, 255, 255, 255, 6, 8, 0, 255},
+ {"LST699_?", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 9, 1, 255},
+ {"LST713_?", 10, 0, 0, 0, 0, 255, 255, 255, 255, 4, 6, 0, 255},
+ {"IDL169_?", 16, 0, 0, 0, 0, 255, 255, 255, 255, 5, 9, 2, 255},
+ {"IDL173_?", 19, 0, 0, 0, 0, 255, 255, 255, 255, 4, 17, 1, 255},
+ {"IDL187_?", 14, 0, 0, 0, 0, 255, 255, 255, 255, 4, 8, 0, 255},
+ {"IDL185_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 6, 9, 1, 255},
+ {"TLK635_?", 16, 0, 0, 0, 0, 5, 8, 10, 12, 4, 12, 0, 255},
+ {"TLK637_?", 18, 0, 0, 0, 0, 5, 7, 9, 12, 4, 13, 0, 255},
+ {"TLK551_?", 20, 0, 0, 0, 0, 5, 9, 11, 15, 4, 16, 0, 255},
+ {"TLK553_?", 20, 0, 0, 0, 0, 7, 9, 11, 13, 6, 15, 0, 255},
+ {"TLK619_?", 18, 0, 0, 0, 0, 5, 8, 11, 13, 5, 15, 0, 255},
+ {"TLK601_?", 12, 0, 0, 0, 0, 2, 5, 6, 10, 2, 10, 1, 255},
+ {"TLK559_?", 18, 0, 0, 0, 0, 4, 6, 10, 12, 4, 13, 0, 255},
+ {"TLK557_?", 16, 0, 0, 0, 0, 6, 8, 10, 255, 6, 11, 0, 255},
+ {"TLK561_?", 17, 0, 0, 0, 0, 6, 8, 10, 12, 5, 12, 0, 255},
+ {"TLK623_?", 19, 0, 0, 0, 0, 6, 8, 10, 13, 6, 14, 0, 255},
+ {"TLK591_?", 20, 0, 0, 0, 0, 10, 14, 255, 255, 7, 15, 0, 255},
+ {"TLK567_?", 19, 0, 0, 0, 0, 6, 9, 11, 14, 5, 15, 0, 255},
+ {"TLK629_?", 18, 0, 0, 0, 0, 6, 8, 10, 11, 6, 12, 0, 255},
+ {"TLK627_?", 19, 0, 0, 0, 0, 7, 10, 12, 14, 4, 14, 0, 255},
+ {"TLK631_?", 19, 0, 0, 0, 0, 8, 10, 255, 255, 8, 12, 0, 255},
+ {"TLK565_?", 17, 0, 0, 0, 0, 4, 7, 9, 11, 3, 12, 0, 255},
+ {"TLK603_?", 16, 0, 0, 0, 0, 5, 255, 255, 255, 3, 9, 0, 255},
+ {"TLK573_?", 20, 0, 0, 0, 0, 6, 7, 10, 255, 6, 16, 2, 255},
+ {"TLK615_?", 17, 0, 0, 0, 0, 6, 8, 10, 12, 5, 12, 0, 255},
+ {"TLK609_?", 18, 0, 0, 0, 0, 6, 8, 10, 12, 5, 13, 0, 255},
+ {"TLK611_?", 18, 0, 0, 0, 0, 8, 10, 12, 255, 7, 13, 0, 255},
+ {"TLK607_?", 16, 0, 0, 0, 0, 4, 7, 9, 11, 4, 12, 0, 255},
+ {"TLK581_?", 15, 0, 0, 0, 0, 7, 9, 11, 255, 6, 11, 0, 255},
+ {"SHD107_?", 46, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"IHL106_?", 23, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 7},
+ {"GLV106_?", 23, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 7},
+ {"FXTKA_?", 11, 0, 0, 0, 0, 7, 255, 255, 255, 2, 9, 0, 255},
+ {"FXTKF_?", 12, 0, 0, 0, 0, 6, 8, 255, 255, 5, 9, 0, 255},
+ {"FXTKG_?", 9, 0, 0, 0, 0, 5, 255, 255, 255, 4, 7, 0, 255},
+ {"FXTKI_?", 12, 0, 0, 0, 0, 6, 255, 255, 255, 5, 9, 0, 255},
+ {"FXTKL_?", 14, 0, 0, 0, 0, 4, 6, 255, 255, 3, 10, 0, 255},
+ {"FXTKO_?", 10, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 255},
+ {"FXTKP_?", 9, 0, 0, 0, 0, 4, 6, 255, 255, 3, 7, 0, 255},
+ {"FXTKQ_?", 10, 0, 0, 0, 0, 4, 6, 255, 255, 3, 7, 0, 255},
+ {"FXLSA_?", 11, 0, 0, 0, 0, 255, 255, 255, 255, 4, 6, 0, 255},
+ {"FXLSB_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 4, 5, 0, 255},
+ {"FXLSK_?", 8, 0, 0, 0, 0, 255, 255, 255, 255, 5, 6, 0, 255},
+ {"FXLSM_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 4, 4, 0, 255},
+ {"FXLSP_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 3, 3, 0, 255},
+ {"FXLSQ_?", 6, 0, 0, 0, 0, 255, 255, 255, 255, 3, 3, 0, 255},
+ {"FXIDE_?", 10, 0, 0, 0, 0, 255, 255, 255, 255, 5, 7, 0, 255},
+ {"FXIDI_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 1, 6, 1, 255},
+ {"FXRCT1_?", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FXTKB_?", 11, 0, 0, 0, 0, 7, 255, 255, 255, 5, 9, 0, 255},
+ {"FXTKC_?", 14, 0, 0, 0, 0, 2, 5, 8, 10, 1, 12, 2, 255},
+ {"FXTKD_?", 14, 0, 0, 0, 0, 5, 7, 9, 255, 4, 11, 0, 255},
+ {"FXTKE_?", 14, 0, 0, 0, 0, 2, 255, 255, 255, 1, 12, 1, 255},
+ {"FXTKH_?", 11, 0, 0, 0, 0, 6, 8, 255, 255, 4, 9, 0, 255},
+ {"FXTKJ_?", 8, 0, 0, 0, 0, 7, 255, 255, 255, 4, 7, 0, 255},
+ {"FXTKK_?", 13, 0, 0, 0, 0, 6, 8, 255, 255, 5, 9, 0, 255},
+ {"FXTKM_?", 11, 0, 0, 0, 0, 6, 255, 255, 255, 4, 7, 0, 255},
+ {"FXTKN_?", 9, 0, 0, 0, 0, 5, 7, 255, 255, 4, 7, 0, 255},
+ {"FXLSC_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 1, 255},
+ {"FXLSD_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 4, 5, 0, 255},
+ {"FXLSE_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 8, 8, 0, 255},
+ {"FXLSG_?", 11, 0, 0, 0, 0, 255, 255, 255, 255, 6, 8, 2, 255},
+ {"FXLSI_?", 8, 0, 0, 0, 0, 255, 255, 255, 255, 5, 6, 0, 255},
+ {"FXLSJ_?", 5, 0, 0, 0, 0, 255, 255, 255, 255, 3, 4, 0, 255},
+ {"FXLSO_?", 8, 0, 0, 0, 0, 255, 255, 255, 255, 4, 5, 0, 255},
+ {"FXIDA_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 1, 12, 1, 255},
+ {"FXIDB_?", 12, 0, 0, 0, 0, 255, 255, 255, 255, 4, 11, 1, 255},
+ {"FXIDC_?", 11, 0, 0, 0, 0, 255, 255, 255, 255, 7, 7, 0, 255},
+ {"FXIDD_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 6, 6, 0, 255},
+ {"FXIDG_?", 6, 0, 0, 0, 0, 255, 255, 255, 255, 3, 4, 0, 255},
+ {"FXVRA_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 2, 255},
+ {"FXIDF_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 9, 11, 0, 255},
+ {"FXEXA_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 5, 5, 0, 255},
+ {"FXEXA_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 5, 5, 0, 255},
+ {"FFNTK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 255},
+ {"FFTLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 9, 0, 1},
+ {"FFBLS1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 2},
+ {"FFLOV2", 6, 0, 0, 0, 0, 255, 255, 255, 255, 3, 5, 0, 2},
+ {"FFWOE1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 9, 0, 2},
+ {"FFSNF1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 4, 6, 0, 4},
+ {"FFLAF1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 8, 0, 1},
+ {"FFSKE1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 10, 0, 2},
+ {"RGTLK2", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1},
+ {"RGTLK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1},
+ {"BRTLK1", 26, 0, 0, 0, 0, 255, 255, 255, 255, 2, 23, 0, 255},
+ {"BREXT1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRLRT1", 19, 0, 0, 0, 0, 255, 255, 255, 255, 1, 15, 0, 255},
+ {"BRBWV1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 255},
+ {"BRPAT1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRBSP1", 7, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRBEX1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRBLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRBET1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRWEX1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BBTLK2", 26, 0, 0, 0, 0, 255, 255, 255, 255, 2, 23, 1, 255},
+ {"BBEXT2", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255},
+ {"BRLST1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 7, 0, 255},
+ {"BRLSN1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 1, 13, 2, 255},
+ {"BRBNO1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BRBND1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BBLSN2", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"CCTALK", 6, 0, 0, 0, 0, 2, 5, 255, 255, 1, 5, 0, 255},
+ {"CCBIT1", 13, 0, 0, 0, 0, 3, 5, 9, 11, 2, 11, 2, 255},
+ {"CCCMP1", 13, 0, 0, 0, 0, 6, 9, 255, 255, 5, 10, 1, 2},
+ {"CCCOY1", 14, 0, 0, 0, 0, 6, 8, 255, 255, 4, 8, 0, 3},
+ {"CCFNG1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 4, 4, 0, 255},
+ {"CCGRB1", 13, 0, 0, 0, 0, 6, 255, 255, 255, 6, 9, 0, 3},
+ {"CCGST1", 9, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 2},
+ {"CCHCN1", 10, 0, 0, 0, 0, 6, 9, 255, 255, 4, 9, 0, 0},
+ {"CCHND1", 7, 0, 0, 0, 0, 6, 255, 255, 255, 2, 6, 0, 1},
+ {"FTTLK2", 11, 0, 0, 0, 0, 1, 4, 6, 9, 1, 10, 0, 2},
+ {"FTGNO2", 11, 0, 0, 0, 0, 4, 6, 8, 255, 4, 8, 1, 2},
+ {"FTGST2", 6, 0, 0, 0, 0, 1, 2, 4, 5, 2, 5, 0, 1},
+ {"FTHND2", 7, 0, 0, 0, 0, 2, 5, 255, 255, 1, 6, 1, 255},
+ {"FTRNT2", 11, 0, 0, 0, 0, 3, 5, 7, 9, 2, 9, 1, 1},
+ {"FTSRG2", 10, 0, 0, 0, 0, 4, 6, 8, 255, 3, 8, 1, 1},
+ {"FTQOT2", 8, 0, 0, 0, 0, 1, 4, 8, 255, 1, 6, 1, 255},
+ {"FMSTK1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 255},
+ {"FMCRH1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 3, 10, 0, 255},
+ {"FMFGR1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 1, 10, 0, 255},
+ {"FMPRS1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 1, 14, 0, 255},
+ {"FMAGR1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 0, 255},
+ {"FMWOE1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 1, 9, 0, 255},
+ {"FMTOE1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FM1TK1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FM2TK1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FM3TK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FMTNB1", 4, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FMLOK1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"FMCST1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 255},
+ {"FMLUP3", 8, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 255},
+ {"BDTLK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 255},
+ {"BDGLE1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 6, 10, 0, 255},
+ {"BDSHK1", 16, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 1},
+ {"BDWOE1", 22, 0, 0, 0, 0, 255, 255, 255, 255, 9, 16, 0, 2},
+ {"BDHIP1", 22, 0, 0, 0, 0, 255, 255, 255, 255, 8, 16, 0, 1},
+ {"BDFLG1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"BDKLT1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 0, 255},
+ {"BDSWY1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"WPSNK1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"WPLAF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 5, 9, 1, 1},
+ {"DOTLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 8, 0, 255},
+ {"DOGST1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 4, 11, 1, 255},
+ {"DO2DF1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 3, 11, 1, 255},
+ {"DOSNG1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 8, 9, 1, 255},
+ {"DOWOE1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 1, 255},
+ {"DO2ME1", 18, 0, 0, 0, 0, 255, 255, 255, 255, 5, 13, 1, 255},
+ {"DOGLP1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255},
+ {"DOCRY1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 1, 255},
+ {"METLK1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 0, 255},
+ {"MECHT1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 1, 255},
+ {"ME2DF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 0, 255},
+ {"MESNG1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 2, 255},
+ {"MEWOE1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 3, 10, 1, 255},
+ {"ME2DO1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 1, 255},
+ {"MEGLP1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255},
+ {"MECRY1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 6, 9, 1, 255},
+ {"CSTLK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 0},
+ {"CSNUD1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 2},
+ {"CSSPR1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 4, 8, 0, 2},
+ {"CSWVE1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 4, 9, 0, 1},
+ {"CSYEL1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 0, 1},
+ {"JMTLK1", 7, 0, 0, 0, 0, 1, 4, 255, 255, 1, 6, 0, 0},
+ {"JMEGO1", 11, 0, 0, 0, 0, 6, 255, 255, 255, 3, 8, 0, 1},
+ {"JMARS1", 7, 0, 0, 0, 0, 4, 6, 255, 255, 3, 6, 0, 2},
+ {"JMHIP1", 8, 0, 0, 0, 0, 3, 5, 7, 255, 2, 7, 0, 1},
+ {"JMBNK1", 2, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"MRTLK1", 9, 0, 0, 0, 0, 4, 7, 255, 255, 2, 7, 0, 1},
+ {"MRHOF1", 8, 0, 0, 0, 0, 3, 5, 255, 255, 2, 5, 0, 255},
+ {"MRMRN1", 11, 0, 0, 0, 0, 3, 7, 255, 255, 1, 8, 0, 0},
+ {"MRDPR1", 11, 0, 0, 0, 0, 1, 5, 9, 255, 1, 8, 0, 255},
+ {"MRGLE1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 2},
+ {"MRTDF1", 11, 0, 0, 0, 0, 3, 7, 9, 255, 3, 9, 0, 1},
+ {"MREDF1", 11, 0, 0, 0, 0, 4, 255, 255, 255, 1, 10, 1, 255},
+ {"MREPL1", 12, 0, 0, 0, 0, 5, 6, 7, 9, 2, 9, 1, 1},
+ {"MRAPL1", 12, 0, 0, 0, 0, 4, 8, 9, 255, 2, 9, 0, 1},
+ {"MREVL1", 8, 0, 0, 0, 0, 5, 255, 255, 255, 1, 5, 1, 255},
+ {"BWDMR1", 16, 0, 0, 0, 0, 4, 7, 9, 11, 3, 14, 0, 1},
+ {"BWBUF1", 12, 0, 0, 0, 0, 5, 8, 255, 255, 3, 11, 0, 1},
+ {"BWHIP1", 12, 0, 0, 0, 0, 3, 6, 255, 255, 1, 9, 2, 0},
+ {"BWHWL1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 2, 255},
+ {"BWLEN1", 10, 0, 0, 0, 0, 3, 6, 255, 255, 2, 7, 0, 1},
+ {"BWSRL1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 1},
+ {"BWWAG1", 6, 0, 0, 0, 0, 4, 10, 14, 18, 1, 4, 0, 0},
+ {"BWYEL1", 8, 0, 0, 0, 0, 4, 255, 255, 255, 2, 7, 0, 1},
+ {"BWTLK1", 15, 0, 0, 0, 0, 5, 8, 255, 255, 5, 9, 0, 1},
+ {"SLTLK1", 19, 0, 0, 0, 0, 255, 255, 255, 255, 1, 18, 0, 255},
+ {"SLPND1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SLPNT1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SLPTR1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 6, 13, 1, 255},
+ {"SDTLK1", 7, 0, 0, 0, 0, 255, 255, 255, 255, 1, 5, 0, 255},
+ {"SDPDF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 0, 255},
+ {"SDPNT1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 7, 0, 255},
+ {"SDSLF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 7, 0, 255},
+ {"SDSTG1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SDWVE1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 8, 0, 255},
+ {"SDSTK1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SDSMK1", 22, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SDGLN1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SDLAF1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"RMHIP1", 12, 0, 0, 0, 0, 7, 255, 255, 255, 1, 10, 2, 255},
+ {"RMGES1", 19, 0, 0, 0, 0, 11, 255, 255, 255, 8, 13, 2, 2},
+ {"RMPCH1", 18, 0, 0, 0, 0, 12, 255, 255, 255, 6, 13, 0, 2},
+ {"RMSTH1", 12, 0, 0, 0, 0, 5, 255, 255, 255, 3, 6, 0, 2},
+ {"RMHND1", 7, 0, 0, 0, 0, 5, 255, 255, 255, 5, 5, 1, 255},
+ {"RMSTH1", 12, 0, 0, 0, 0, 5, 255, 255, 255, 5, 6, 1, 2},
+ {"SGHND1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 9, 0, 0},
+ {"SGSTF1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 1, 12, 0, 255},
+ {"SGSLP1", 16, 0, 0, 0, 0, 255, 255, 255, 255, 1, 15, 0, 255},
+ {"SGPHC1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 4, 9, 0, 255},
+ {"SGHALT", 22, 0, 0, 0, 0, 255, 255, 255, 255, 7, 15, 0, 255},
+ {"STTLK1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 2},
+ {"STTNM1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 2},
+ {"STFST1", 11, 0, 0, 0, 0, 3, 8, 255, 255, 1, 9, 0, 255},
+ {"STLAF1", 20, 0, 0, 0, 0, 255, 255, 255, 255, 11, 15, 1, 2},
+ {"STGES1", 13, 0, 0, 0, 0, 5, 7, 255, 255, 3, 7, 0, 2},
+ {"STFNT1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 255, 255, 0, 2},
+ {"STSRK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 3, 2, 0},
+ {"STRED1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 2, 10, 0, 255},
+ {"STLKU1", 6, 0, 0, 0, 0, 3, 255, 255, 255, 2, 5, 0, 0},
+ {"STKEY1", 15, 0, 0, 0, 0, 9, 11, 255, 255, 9, 14, 0, 255},
+ {"STMKTD1", 7, 0, 0, 0, 0, 3, 6, 255, 255, 1, 6, 0, 255},
+ {"STTKM1", 21, 0, 0, 0, 0, 12, 13, 15, 16, 12, 17, 0, 1},
+ {"STMSZ1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 3, 2, 255},
+ {"STPNV1", 14, 0, 0, 0, 0, 6, 11, 255, 255, 4, 11, 0, 1},
+ {"STSOM1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 3, 2, 255},
+ {"MYTLK1", 9, 0, 0, 0, 0, 2, 4, 255, 255, 1, 4, 0, 0},
+ {"MYSQUAWK", 5, 0, 0, 0, 0, 255, 255, 255, 255, 3, 3, 1, 255},
+ {"SPTLK", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SPARM", 16, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SPHOP", 18, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SPLNT", 16, 0, 0, 0, 0, 255, 255, 255, 255, 3, 13, 0, 255},
+ {"SPLAF", 11, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 2, 255},
+ {"SPTFN", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SPPIN", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SPINH1", 21, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"SPSFTCOM", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255},
+ {"MFTMZ1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 1, 8, 1, 255},
+ {"MFTLK1", 13, 0, 0, 0, 0, 2, 7, 255, 255, 1, 12, 1, 255},
+ {"VGCIR1", 15, 0, 0, 0, 0, 5, 9, 255, 255, 2, 13, 1, 255},
+ {"VGBIT1", 12, 0, 0, 0, 0, 6, 9, 255, 255, 2, 9, 1, 255},
+ {"VGANG1", 10, 0, 0, 0, 0, 9, 255, 255, 255, 1, 9, 0, 255},
+ {"VGCOM1", 13, 0, 0, 0, 0, 5, 11, 255, 255, 2, 11, 0, 255},
+ {"VGCUR1", 8, 0, 0, 0, 0, 4, 8, 255, 255, 2, 7, 0, 255},
+ {"VGTLK1", 11, 0, 0, 0, 0, 3, 6, 255, 255, 3, 10, 0, 255},
+ {"VGEXP1", 10, 0, 0, 0, 0, 5, 9, 255, 255, 3, 9, 0, 255},
+ {"WFTLK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 1},
+ {"WFPNT1", 20, 0, 0, 0, 0, 255, 255, 255, 255, 6, 16, 0, 1},
+ {"WFFST1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 2, 8, 0, 2},
+ {"WFTNO1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 2},
+ {"WFSRG1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 1},
+ {"WFGTK1", 16, 0, 0, 0, 0, 255, 255, 255, 255, 1, 15, 0, 255},
+ {"WFPAW1", 24, 0, 0, 0, 0, 255, 255, 255, 255, 4, 22, 0, 1},
+ {"LGTLK", 20, 0, 0, 0, 0, 4, 8, 11, 15, 1, 17, 0, 255},
+ {"LGSHOUT", 16, 0, 0, 0, 0, 12, 255, 255, 255, 6, 12, 0, 255},
+ {"POMRN1", 12, 0, 0, 0, 0, 3, 5, 7, 255, 3, 9, 0, 2},
+ {"POGLE1", 14, 0, 0, 0, 0, 7, 10, 255, 255, 5, 10, 0, 2},
+ {"PLMRG1", 16, 0, 0, 0, 0, 9, 255, 255, 255, 8, 12, 0, 1},
+ {"PLCMR1", 16, 0, 0, 0, 0, 8, 10, 255, 255, 8, 12, 0, 3},
+ {"PLEVL1", 17, 0, 0, 0, 0, 9, 255, 255, 255, 7, 9, 0, 1},
+ {"PLEDF1", 9, 0, 0, 0, 0, 4, 6, 255, 255, 5, 7, 0, 2},
+ {"PLTLK1", 11, 0, 0, 0, 0, 5, 8, 255, 255, 5, 8, 0, 1},
+ {"ELTLK1", 8, 0, 0, 0, 0, 3, 5, 7, 255, 2, 7, 0, 255},
+ {"ELSNR1", 7, 0, 0, 0, 0, 3, 255, 255, 255, 1, 5, 0, 255},
+ {"RG2TK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1},
+ {"RG2TK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1},
+ {"C2TALK", 6, 0, 0, 0, 0, 2, 5, 255, 255, 1, 5, 0, 255},
+ {"C2BIT1", 13, 0, 0, 0, 0, 3, 5, 9, 11, 2, 11, 2, 255},
+ {"C2CMP1", 13, 0, 0, 0, 0, 6, 9, 255, 255, 5, 10, 1, 2},
+ {"C2COY1", 14, 0, 0, 0, 0, 6, 8, 255, 255, 4, 8, 0, 3},
+ {"C2FNG1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 4, 4, 0, 255},
+ {"C2GRB1", 13, 0, 0, 0, 0, 6, 255, 255, 255, 6, 9, 0, 3},
+ {"C2GST1", 9, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 2},
+ {"C2HCN1", 10, 0, 0, 0, 0, 6, 9, 255, 255, 4, 9, 0, 0},
+ {"C2HND1", 7, 0, 0, 0, 0, 6, 255, 255, 255, 2, 6, 0, 1},
+ {"666TKBB3", 21, 0, 0, 0, 0, 9, 14, 255, 255, 6, 16, 0, 255},
+ {"665TFLX3", 27, 0, 0, 0, 0, 10, 14, 17, 255, 10, 18, 0, 255},
+ {"664FXTK3", 18, 0, 0, 0, 0, 5, 7, 11, 13, 3, 15, 0, 255},
+ {"FDTALK", 15, 0, 0, 0, 0, 9, 255, 255, 255, 7, 9, 0, 255},
+ {"FDYELL", 16, 0, 0, 0, 0, 10, 255, 255, 255, 8, 10, 0, 255},
+ {"GLTLK", 20, 0, 0, 0, 0, 6, 12, 18, 255, 1, 19, 0, 255},
+ {"GLTRN", 4, 0, 0, 0, 0, 3, 255, 255, 255, 1, 2, 0, 255},
+ {"RAYTALK1", 10, 0, 0, 0, 0, 3, 5, 8, 255, 1, 9, 0, 255},
+ {"BRTKB1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 2, 14, 0, 255}
+ };
+
+ static const SpecialCharacterAnimation englishDemoAnims[] = {
+ {"TLK547_?", 9, 0, 0, 0, 0, 0, 1, 5, 8, 1, 8, 0, 255},
{ "TLK555_?", 16, 0, 0, 0, 0, 6, 8, 10, 255, 6, 11, 2, 255 },
{ "LST657_?", 14, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 255 },
{ "TLK587_?", 18, 0, 0, 0, 0, 5, 7, 9, 11, 4, 13, 1, 255 },
@@ -713,15 +1006,12 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "TLK631_?", 19, 0, 0, 0, 0, 8, 10, 255, 255, 8, 12, 0, 255 },
{ "TLK565_?", 17, 0, 0, 0, 0, 4, 7, 9, 11, 3, 12, 0, 255 },
{ "TLK603_?", 16, 0, 0, 0, 0, 5, 255, 255, 255, 3, 9, 0, 255 },
- { "TLK573_?", 20, 0, 0, 0, 0, 6, 7, 10, 255, 6, 16, 2, 255 },
+ { "TLK573_?", 20, 0, 0, 0, 0, 6, 7, 10, 255, 6, 11, 0, 255 },
{ "TLK615_?", 17, 0, 0, 0, 0, 6, 8, 10, 12, 5, 12, 0, 255 },
{ "TLK609_?", 18, 0, 0, 0, 0, 6, 8, 10, 12, 5, 13, 0, 255 },
{ "TLK611_?", 18, 0, 0, 0, 0, 8, 10, 12, 255, 7, 13, 0, 255 },
{ "TLK607_?", 16, 0, 0, 0, 0, 4, 7, 9, 11, 4, 12, 0, 255 },
{ "TLK581_?", 15, 0, 0, 0, 0, 7, 9, 11, 255, 6, 11, 0, 255 },
- { "SHD107_?", 46, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "IHL106_?", 23, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 7 },
- { "GLV106_?", 23, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 7 },
{ "FXTKA_?", 11, 0, 0, 0, 0, 7, 255, 255, 255, 2, 9, 0, 255 },
{ "FXTKF_?", 12, 0, 0, 0, 0, 6, 8, 255, 255, 5, 9, 0, 255 },
{ "FXTKG_?", 9, 0, 0, 0, 0, 5, 255, 255, 255, 4, 7, 0, 255 },
@@ -736,7 +1026,7 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "FXLSM_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 4, 4, 0, 255 },
{ "FXLSP_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 3, 3, 0, 255 },
{ "FXLSQ_?", 6, 0, 0, 0, 0, 255, 255, 255, 255, 3, 3, 0, 255 },
- { "FXIDE_?", 10, 0, 0, 0, 0, 255, 255, 255, 255, 5, 7, 0, 255 },
+ { "FXIDE_?", 10, 0, 0, 0, 0, 255, 255, 255, 255, 3, 7, 0, 255 },
{ "FXIDI_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 1, 6, 1, 255 },
{ "FXRCT1_?", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "FXTKB_?", 11, 0, 0, 0, 0, 7, 255, 255, 255, 5, 9, 0, 255 },
@@ -755,25 +1045,22 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "FXLSI_?", 8, 0, 0, 0, 0, 255, 255, 255, 255, 5, 6, 0, 255 },
{ "FXLSJ_?", 5, 0, 0, 0, 0, 255, 255, 255, 255, 3, 4, 0, 255 },
{ "FXLSO_?", 8, 0, 0, 0, 0, 255, 255, 255, 255, 4, 5, 0, 255 },
- { "FXIDA_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 1, 12, 1, 255 },
- { "FXIDB_?", 12, 0, 0, 0, 0, 255, 255, 255, 255, 4, 11, 1, 255 },
+ { "FXIDA_?", 11, 0, 0, 0, 0, 255, 255, 255, 255, 1, 8, 1, 255 },
+ { "FXIDB_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 5, 6, 0, 255 },
{ "FXIDC_?", 11, 0, 0, 0, 0, 255, 255, 255, 255, 7, 7, 0, 255 },
- { "FXIDD_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 6, 6, 0, 255 },
+ { "FXIDD_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "FXIDG_?", 6, 0, 0, 0, 0, 255, 255, 255, 255, 3, 4, 0, 255 },
- { "FXVRA_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 2, 255 },
- { "FXIDF_?", 15, 0, 0, 0, 0, 255, 255, 255, 255, 9, 11, 0, 255 },
- { "FXEXA_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 5, 5, 0, 255 },
- { "FXEXA_?", 9, 0, 0, 0, 0, 255, 255, 255, 255, 5, 5, 0, 255 },
- { "FFNTK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 255 },
- { "FFTLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 9, 0, 1 },
- { "FFBLS1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 2 },
- { "FFLOV2", 6, 0, 0, 0, 0, 255, 255, 255, 255, 3, 5, 0, 2 },
- { "FFWOE1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 9, 0, 2 },
- { "FFSNF1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 4, 6, 0, 4 },
- { "FFLAF1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 8, 0, 1 },
- { "FFSKE1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 10, 0, 2 },
- { "RGTLK2", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1 },
- { "RGTLK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1 },
+ { "FXVRA_?", 7, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 0, 255 },
+ { "FFTLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFBLS1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFLOV1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFSKE1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFWOE1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFSNF1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFLST1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "FFPAW1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "RGTLK2", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 255 },
+ { "RGTLK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 255 },
{ "BRTLK1", 26, 0, 0, 0, 0, 255, 255, 255, 255, 2, 23, 0, 255 },
{ "BREXT1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BRLRT1", 19, 0, 0, 0, 0, 255, 255, 255, 255, 1, 15, 0, 255 },
@@ -783,30 +1070,30 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "BRBEX1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BRBLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BRBET1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BRTKB1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 2, 14, 0, 255 },
{ "BRWEX1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "BBTLK2", 26, 0, 0, 0, 0, 255, 255, 255, 255, 2, 23, 1, 255 },
- { "BBEXT2", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255 },
+ { "BBTLK2", 26, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BBEXT2", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BRLST1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 7, 0, 255 },
{ "BRLSN1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 1, 13, 2, 255 },
+ { "BRLSB1", 1, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255 },
{ "BRBNO1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BRBND1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BBLSN2", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "CCTALK", 6, 0, 0, 0, 0, 2, 5, 255, 255, 1, 5, 0, 255 },
- { "CCBIT1", 13, 0, 0, 0, 0, 3, 5, 9, 11, 2, 11, 2, 255 },
- { "CCCMP1", 13, 0, 0, 0, 0, 6, 9, 255, 255, 5, 10, 1, 2 },
- { "CCCOY1", 14, 0, 0, 0, 0, 6, 8, 255, 255, 4, 8, 0, 3 },
- { "CCFNG1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 4, 4, 0, 255 },
- { "CCGRB1", 13, 0, 0, 0, 0, 6, 255, 255, 255, 6, 9, 0, 3 },
- { "CCGST1", 9, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 2 },
- { "CCHCN1", 10, 0, 0, 0, 0, 6, 9, 255, 255, 4, 9, 0, 0 },
- { "CCHND1", 7, 0, 0, 0, 0, 6, 255, 255, 255, 2, 6, 0, 1 },
- { "FTTLK2", 11, 0, 0, 0, 0, 1, 4, 6, 9, 1, 10, 0, 2 },
- { "FTGNO2", 11, 0, 0, 0, 0, 4, 6, 8, 255, 4, 8, 1, 2 },
- { "FTGST2", 6, 0, 0, 0, 0, 1, 2, 4, 5, 2, 5, 0, 1 },
- { "FTHND2", 7, 0, 0, 0, 0, 2, 5, 255, 255, 1, 6, 1, 255 },
- { "FTRNT2", 11, 0, 0, 0, 0, 3, 5, 7, 9, 2, 9, 1, 1 },
- { "FTSRG2", 10, 0, 0, 0, 0, 4, 6, 8, 255, 3, 8, 1, 1 },
- { "FTQOT2", 8, 0, 0, 0, 0, 1, 4, 8, 255, 1, 6, 1, 255 },
+ { "CCTLK1", 13, 0, 0, 0, 0, 6, 255, 255, 255, 5, 8, 0, 255 },
+ { "CCBIT1", 14, 0, 0, 0, 0, 3, 5, 9, 11, 2, 11, 2, 255 },
+ { "CCCMP1", 13, 0, 0, 0, 0, 7, 10, 255, 255, 6, 11, 1, 255 },
+ { "CCFNG1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 0, 255 },
+ { "CCGRB1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 8, 10, 0, 255 },
+ { "CCGST1", 10, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 255 },
+ { "CCHCN1", 17, 0, 0, 0, 0, 9, 255, 255, 255, 9, 11, 0, 255 },
+ { "CCHND1", 12, 0, 0, 0, 0, 6, 255, 255, 255, 5, 8, 0, 255 },
+ { "FTTLK1", 12, 0, 0, 0, 0, 3, 5, 8, 10, 1, 11, 0, 255 },
+ { "FTCHT1", 16, 0, 0, 0, 0, 4, 6, 8, 11, 2, 6, 0, 255 },
+ { "FTRNT1", 12, 0, 0, 0, 0, 3, 5, 255, 255, 2, 9, 0, 255 },
+ { "FTHND1", 9, 0, 0, 0, 0, 1, 3, 6, 8, 1, 8, 0, 255 },
+ { "FTGNO1", 13, 0, 0, 0, 0, 7, 9, 255, 255, 5, 9, 0, 255 },
+ { "FTSRG1", 11, 0, 0, 0, 0, 4, 6, 8, 255, 3, 8, 0, 255 },
{ "FMSTK1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 255 },
{ "FMCRH1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 3, 10, 0, 255 },
{ "FMFGR1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 1, 10, 0, 255 },
@@ -821,65 +1108,72 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "FMLOK1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "FMCST1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 255 },
{ "FMLUP3", 8, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 255 },
- { "BDTLK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 255 },
- { "BDGLE1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 6, 10, 0, 255 },
- { "BDSHK1", 16, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 1 },
- { "BDWOE1", 22, 0, 0, 0, 0, 255, 255, 255, 255, 9, 16, 0, 2 },
- { "BDHIP1", 22, 0, 0, 0, 0, 255, 255, 255, 255, 8, 16, 0, 1 },
+ { "BDHIP1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BDGLE1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BDWOE1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BDSHK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "BDFLG1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "BDKLT1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 0, 255 },
- { "BDSWY1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "WPSNK1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "WPLAF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 5, 9, 1, 1 },
- { "DOTLK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 8, 0, 255 },
- { "DOGST1", 15, 0, 0, 0, 0, 255, 255, 255, 255, 4, 11, 1, 255 },
- { "DO2DF1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 3, 11, 1, 255 },
- { "DOSNG1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 8, 9, 1, 255 },
- { "DOWOE1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 1, 255 },
- { "DO2ME1", 18, 0, 0, 0, 0, 255, 255, 255, 255, 5, 13, 1, 255 },
- { "DOGLP1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255 },
- { "DOCRY1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 1, 255 },
- { "METLK1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 0, 255 },
- { "MECHT1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 1, 255 },
- { "ME2DF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 0, 255 },
- { "MESNG1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 2, 255 },
- { "MEWOE1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 3, 10, 1, 255 },
- { "ME2DO1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 1, 255 },
- { "MEGLP1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255 },
- { "MECRY1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 6, 9, 1, 255 },
- { "CSTLK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 0 },
- { "CSNUD1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 2 },
- { "CSSPR1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 4, 8, 0, 2 },
- { "CSWVE1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 4, 9, 0, 1 },
- { "CSYEL1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 0, 1 },
- { "JMTLK1", 7, 0, 0, 0, 0, 1, 4, 255, 255, 1, 6, 0, 0 },
- { "JMEGO1", 11, 0, 0, 0, 0, 6, 255, 255, 255, 3, 8, 0, 1 },
- { "JMARS1", 7, 0, 0, 0, 0, 4, 6, 255, 255, 3, 6, 0, 2 },
- { "JMHIP1", 8, 0, 0, 0, 0, 3, 5, 7, 255, 2, 7, 0, 1 },
+ { "WPLAF1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "DO2DF1", 12, 0, 0, 0, 0, 5, 255, 255, 255, 5, 8, 0, 255 },
+ { "DOSAD1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 8, 0, 255 },
+ { "DO2ME1", 14, 0, 0, 0, 0, 7, 255, 255, 255, 7, 12, 0, 255 },
+ { "DOSNG1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 6, 0, 255 },
+ { "DOGST1", 14, 0, 0, 0, 0, 2, 9, 255, 255, 2, 10, 0, 255 },
+ { "DOWOE1", 8, 0, 0, 0, 0, 4, 255, 255, 255, 1, 7, 0, 255 },
+ { "DOCRY1", 7, 0, 0, 0, 0, 2, 255, 255, 255, 1, 6, 0, 255 },
+ { "DOBLNK", 3, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "DOBTK1", 10, 0, 0, 0, 0, 4, 9, 255, 255, 255, 255, 0, 255 },
+ { "ME2DO1", 9, 0, 0, 0, 0, 0, 7, 255, 255, 6, 9, 0, 255 },
+ { "ME2DF1", 9, 0, 0, 0, 0, 5, 255, 255, 255, 5, 9, 0, 255 },
+ { "MECHT1", 9, 0, 0, 0, 0, 2, 6, 255, 255, 6, 9, 0, 255 },
+ { "MECRY1", 9, 0, 0, 0, 0, 1, 255, 255, 255, 255, 255, 0, 255 },
+ { "MEWOE1", 10, 0, 0, 0, 0, 0, 6, 255, 255, 6, 9, 0, 255 },
+ { "MESND1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "MESNG1", 8, 0, 0, 0, 0, 0, 255, 255, 255, 3, 6, 0, 255 },
+ { "MESFL1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "MEATC1", 4, 0, 0, 0, 0, 3, 255, 255, 255, 1, 2, 0, 255 },
+ { "CSNUD1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 5, 11, 0, 255 },
+ { "CSSPR1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 4, 8, 0, 255 },
+ { "CSWVE1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 4, 11, 0, 255 },
+ { "CSYEL1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 0, 255 },
+ { "JMTLK1", 7, 0, 0, 0, 0, 1, 4, 255, 255, 1, 6, 0, 255 },
+ { "JMEGO1", 11, 0, 0, 0, 0, 6, 255, 255, 255, 3, 8, 0, 255 },
+ { "JMARS1", 7, 0, 0, 0, 0, 4, 6, 255, 255, 3, 6, 0, 255 },
+ { "JMHIP1", 8, 0, 0, 0, 0, 3, 5, 7, 255, 2, 7, 0, 255 },
{ "JMBNK1", 2, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "MRTLK1", 9, 0, 0, 0, 0, 4, 7, 255, 255, 2, 7, 0, 1 },
+ { "MRTLK1", 9, 0, 0, 0, 0, 4, 7, 255, 255, 2, 7, 0, 255 },
{ "MRHOF1", 8, 0, 0, 0, 0, 3, 5, 255, 255, 2, 5, 0, 255 },
- { "MRMRN1", 11, 0, 0, 0, 0, 3, 7, 255, 255, 1, 8, 0, 0 },
+ { "MRMRN1", 11, 0, 0, 0, 0, 3, 7, 255, 255, 1, 8, 0, 255 },
{ "MRDPR1", 11, 0, 0, 0, 0, 1, 5, 9, 255, 1, 8, 0, 255 },
- { "MRGLE1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 2 },
- { "MRTDF1", 11, 0, 0, 0, 0, 3, 7, 9, 255, 3, 9, 0, 1 },
+ { "MRGLE1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 255 },
+ { "MRTDF1", 11, 0, 0, 0, 0, 3, 7, 9, 255, 3, 9, 0, 255 },
{ "MREDF1", 11, 0, 0, 0, 0, 4, 255, 255, 255, 1, 10, 1, 255 },
- { "MREPL1", 12, 0, 0, 0, 0, 5, 6, 7, 9, 2, 9, 1, 1 },
- { "MRAPL1", 12, 0, 0, 0, 0, 4, 8, 9, 255, 2, 9, 0, 1 },
+ { "MREPL1", 12, 0, 0, 0, 0, 5, 6, 7, 9, 2, 9, 1, 255 },
+ { "MRAPL1", 12, 0, 0, 0, 0, 4, 8, 9, 255, 2, 9, 0, 255 },
{ "MREVL1", 8, 0, 0, 0, 0, 5, 255, 255, 255, 1, 5, 1, 255 },
- { "BWDMR1", 16, 0, 0, 0, 0, 4, 7, 9, 11, 3, 14, 0, 1 },
- { "BWBUF1", 12, 0, 0, 0, 0, 5, 8, 255, 255, 3, 11, 0, 1 },
- { "BWHIP1", 12, 0, 0, 0, 0, 3, 6, 255, 255, 1, 9, 2, 0 },
- { "BWHWL1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 2, 255 },
- { "BWLEN1", 10, 0, 0, 0, 0, 3, 6, 255, 255, 2, 7, 0, 1 },
- { "BWSRL1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 1 },
- { "BWWAG1", 6, 0, 0, 0, 0, 4, 10, 14, 18, 1, 4, 0, 0 },
- { "BWYEL1", 8, 0, 0, 0, 0, 4, 255, 255, 255, 2, 7, 0, 1 },
- { "BWTLK1", 15, 0, 0, 0, 0, 5, 8, 255, 255, 5, 9, 0, 1 },
- { "SLTLK1", 19, 0, 0, 0, 0, 255, 255, 255, 255, 1, 18, 0, 255 },
- { "SLPND1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "SLPNT1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "SLPTR1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 6, 13, 1, 255 },
+ { "BWDMRL", 25, 0, 0, 0, 0, 3, 8, 13, 17, 3, 17, 0, 255 },
+ { "BW1PS1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BW2PSL", 13, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWBUFL1", 23, 0, 0, 0, 0, 0, 3, 6, 255, 3, 8, 0, 255 },
+ { "BWCIG1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWCLD1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWHIPL", 27, 0, 0, 0, 0, 5, 9, 14, 18, 5, 19, 0, 255 },
+ { "BWHWLL", 16, 0, 0, 0, 0, 0, 15, 255, 255, 255, 255, 0, 255 },
+ { "BWLENL", 27, 0, 0, 0, 0, 4, 7, 13, 19, 4, 20, 0, 255 },
+ { "BWRNG1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWSKL1", 6, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWSNP1", 7, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWSNPL", 22, 0, 0, 0, 0, 2, 7, 12, 17, 2, 18, 0, 255 },
+ { "BWSRL1", 7, 0, 0, 0, 0, 6, 255, 255, 255, 255, 255, 0, 255 },
+ { "BWWAGL", 23, 0, 0, 0, 0, 6, 10, 14, 18, 6, 19, 0, 255 },
+ { "BWYEL1", 9, 0, 0, 0, 0, 255, 255, 255, 255, 4, 8, 0, 255 },
+ { "BWTEEL", 21, 0, 0, 0, 0, 255, 255, 255, 255, 2, 6, 0, 255 },
+ { "BWTLK1", 15, 0, 0, 0, 0, 5, 8, 255, 255, 5, 9, 0, 255 },
+ { "SLTLK1", 19, 0, 0, 0, 0, 2, 6, 255, 255, 255, 255, 1, 255 },
+ { "SLPND1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255 },
+ { "SLPNT1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 1, 255 },
+ { "SLPTR1", 14, 0, 0, 0, 0, 255, 255, 255, 255, 5, 13, 1, 255 },
{ "SDTLK1", 7, 0, 0, 0, 0, 255, 255, 255, 255, 1, 5, 0, 255 },
{ "SDPDF1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 0, 255 },
{ "SDPNT1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 2, 7, 0, 255 },
@@ -891,39 +1185,35 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "SDGLN1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "SDLAF1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "RMHIP1", 12, 0, 0, 0, 0, 7, 255, 255, 255, 1, 10, 2, 255 },
- { "RMGES1", 19, 0, 0, 0, 0, 11, 255, 255, 255, 8, 13, 2, 2 },
- { "RMPCH1", 18, 0, 0, 0, 0, 12, 255, 255, 255, 6, 13, 0, 2 },
- { "RMSTH1", 12, 0, 0, 0, 0, 5, 255, 255, 255, 3, 6, 0, 2 },
+ { "RMGES1", 19, 0, 0, 0, 0, 11, 255, 255, 255, 8, 13, 2, 255 },
+ { "RMPCH1", 18, 0, 0, 0, 0, 12, 255, 255, 255, 6, 13, 0, 255 },
+ { "RMSTH1", 12, 0, 0, 0, 0, 4, 5, 6, 7, 3, 6, 0, 255 },
{ "RMHND1", 7, 0, 0, 0, 0, 5, 255, 255, 255, 5, 5, 1, 255 },
- { "RMSTH1", 12, 0, 0, 0, 0, 5, 255, 255, 255, 5, 6, 1, 2 },
- { "SGHND1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 9, 0, 0 },
- { "SGSTF1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 1, 12, 0, 255 },
- { "SGSLP1", 16, 0, 0, 0, 0, 255, 255, 255, 255, 1, 15, 0, 255 },
- { "SGPHC1", 12, 0, 0, 0, 0, 255, 255, 255, 255, 4, 9, 0, 255 },
- { "SGHALT", 22, 0, 0, 0, 0, 255, 255, 255, 255, 7, 15, 0, 255 },
- { "STTLK1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 2 },
- { "STTNM1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 2 },
+ { "SGSTF1", 6, 0, 0, 0, 0, 2, 6, 255, 255, 255, 255, 0, 255 },
+ { "SGHTLK", 5, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "SGSLP1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "SGPHC1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "STTLK1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 255 },
+ { "STTNM1", 13, 0, 0, 0, 0, 5, 9, 255, 255, 3, 10, 0, 255 },
{ "STFST1", 11, 0, 0, 0, 0, 3, 8, 255, 255, 1, 9, 0, 255 },
- { "STLAF1", 20, 0, 0, 0, 0, 255, 255, 255, 255, 11, 15, 1, 2 },
- { "STGES1", 13, 0, 0, 0, 0, 5, 7, 255, 255, 3, 7, 0, 2 },
- { "STFNT1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 255, 255, 0, 2 },
- { "STSRK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 3, 2, 0 },
+ { "STLAF1", 20, 0, 0, 0, 0, 255, 255, 255, 255, 11, 15, 1, 255 },
+ { "STGES1", 13, 0, 0, 0, 0, 5, 7, 255, 255, 3, 7, 0, 255 },
+ { "STFNT1", 9, 0, 0, 0, 0, 4, 255, 255, 255, 4, 5, 0, 255 },
+ { "STSRK1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 0, 255 },
{ "STRED1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 2, 10, 0, 255 },
- { "STLKU1", 6, 0, 0, 0, 0, 3, 255, 255, 255, 2, 5, 0, 0 },
+ { "STLKU1", 6, 0, 0, 0, 0, 3, 255, 255, 255, 2, 5, 0, 255 },
{ "STKEY1", 15, 0, 0, 0, 0, 9, 11, 255, 255, 9, 14, 0, 255 },
{ "STMKTD1", 7, 0, 0, 0, 0, 3, 6, 255, 255, 1, 6, 0, 255 },
- { "STTKM1", 21, 0, 0, 0, 0, 12, 13, 15, 16, 12, 17, 0, 1 },
- { "STMSZ1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 3, 2, 255 },
- { "STPNV1", 14, 0, 0, 0, 0, 6, 11, 255, 255, 4, 11, 0, 1 },
- { "STSOM1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 3, 2, 255 },
- { "MYTLK1", 9, 0, 0, 0, 0, 2, 4, 255, 255, 1, 4, 0, 0 },
- { "MYSQUAWK", 5, 0, 0, 0, 0, 255, 255, 255, 255, 3, 3, 1, 255 },
+ { "STTKM1", 21, 0, 0, 0, 0, 12, 13, 15, 16, 12, 17, 0, 255 },
+ { "STMSZ1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 0, 255 },
+ { "STPNV1", 15, 0, 0, 0, 0, 6, 9, 255, 255, 4, 11, 0, 255 },
+ { "STSOM1", 10, 0, 0, 0, 0, 255, 255, 255, 255, 1, 4, 0, 255 },
{ "SPTLK", 12, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "SPARM", 16, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "SPHOP", 18, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
- { "SPLNT", 16, 0, 0, 0, 0, 255, 255, 255, 255, 3, 13, 0, 255 },
- { "SPLAF", 11, 0, 0, 0, 0, 255, 255, 255, 255, 5, 10, 2, 255 },
- { "SPTFN", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "SPLNT", 16, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "SPLAF", 11, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
+ { "SPTFN", 8, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "SPPIN", 14, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "SPINH1", 21, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
{ "SPSFTCOM", 10, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255 },
@@ -936,47 +1226,43 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
{ "VGCUR1", 8, 0, 0, 0, 0, 4, 8, 255, 255, 2, 7, 0, 255 },
{ "VGTLK1", 11, 0, 0, 0, 0, 3, 6, 255, 255, 3, 10, 0, 255 },
{ "VGEXP1", 10, 0, 0, 0, 0, 5, 9, 255, 255, 3, 9, 0, 255 },
- { "WFTLK1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 1, 7, 0, 1 },
- { "WFPNT1", 20, 0, 0, 0, 0, 255, 255, 255, 255, 6, 16, 0, 1 },
- { "WFFST1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 2, 8, 0, 2 },
- { "WFTNO1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 2 },
- { "WFSRG1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 1 },
+ { "WFPAW1", 24, 0, 0, 0, 0, 255, 255, 255, 255, 5, 21, 0, 255 },
+ { "WFPNT1", 20, 0, 0, 0, 0, 255, 255, 255, 255, 6, 16, 0, 255 },
+ { "WFFST1", 13, 0, 0, 0, 0, 255, 255, 255, 255, 2, 9, 0, 255 },
+ { "WFTNO1", 8, 0, 0, 0, 0, 255, 255, 255, 255, 2, 5, 0, 255 },
+ { "WFSRG1", 11, 0, 0, 0, 0, 255, 255, 255, 255, 3, 8, 0, 255 },
{ "WFGTK1", 16, 0, 0, 0, 0, 255, 255, 255, 255, 1, 15, 0, 255 },
- { "WFPAW1", 24, 0, 0, 0, 0, 255, 255, 255, 255, 4, 22, 0, 1 },
{ "LGTLK", 20, 0, 0, 0, 0, 4, 8, 11, 15, 1, 17, 0, 255 },
{ "LGSHOUT", 16, 0, 0, 0, 0, 12, 255, 255, 255, 6, 12, 0, 255 },
- { "POMRN1", 12, 0, 0, 0, 0, 3, 5, 7, 255, 3, 9, 0, 2 },
- { "POGLE1", 14, 0, 0, 0, 0, 7, 10, 255, 255, 5, 10, 0, 2 },
- { "PLMRG1", 16, 0, 0, 0, 0, 9, 255, 255, 255, 8, 12, 0, 1 },
- { "PLCMR1", 16, 0, 0, 0, 0, 8, 10, 255, 255, 8, 12, 0, 3 },
- { "PLEVL1", 17, 0, 0, 0, 0, 9, 255, 255, 255, 7, 9, 0, 1 },
- { "PLEDF1", 9, 0, 0, 0, 0, 4, 6, 255, 255, 5, 7, 0, 2 },
- { "PLTLK1", 11, 0, 0, 0, 0, 5, 8, 255, 255, 5, 8, 0, 1 },
+ { "POMRN1", 12, 0, 0, 0, 0, 3, 5, 7, 255, 3, 9, 0, 255 },
+ { "POGLE1", 14, 0, 0, 0, 0, 7, 10, 255, 255, 5, 10, 0, 255 },
+ { "PLMRG1", 16, 0, 0, 0, 0, 9, 255, 255, 255, 8, 12, 0, 255 },
+ { "PLCMR1", 16, 0, 0, 0, 0, 8, 10, 255, 255, 8, 12, 0, 255 },
+ { "PLEVL1", 17, 0, 0, 0, 0, 9, 255, 255, 255, 7, 9, 0, 255 },
+ { "PLEDF1", 9, 0, 0, 0, 0, 4, 6, 255, 255, 5, 7, 0, 255 },
{ "ELTLK1", 8, 0, 0, 0, 0, 3, 5, 7, 255, 2, 7, 0, 255 },
{ "ELSNR1", 7, 0, 0, 0, 0, 3, 255, 255, 255, 1, 5, 0, 255 },
- { "RG2TK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1 },
- { "RG2TK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 1 },
- { "C2TALK", 6, 0, 0, 0, 0, 2, 5, 255, 255, 1, 5, 0, 255 },
- { "C2BIT1", 13, 0, 0, 0, 0, 3, 5, 9, 11, 2, 11, 2, 255 },
- { "C2CMP1", 13, 0, 0, 0, 0, 6, 9, 255, 255, 5, 10, 1, 2 },
- { "C2COY1", 14, 0, 0, 0, 0, 6, 8, 255, 255, 4, 8, 0, 3 },
- { "C2FNG1", 5, 0, 0, 0, 0, 255, 255, 255, 255, 4, 4, 0, 255 },
- { "C2GRB1", 13, 0, 0, 0, 0, 6, 255, 255, 255, 6, 9, 0, 3 },
- { "C2GST1", 9, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 2 },
- { "C2HCN1", 10, 0, 0, 0, 0, 6, 9, 255, 255, 4, 9, 0, 0 },
- { "C2HND1", 7, 0, 0, 0, 0, 6, 255, 255, 255, 2, 6, 0, 1 },
- { "666TKBB3", 21, 0, 0, 0, 0, 9, 14, 255, 255, 6, 16, 0, 255 },
- { "665TFLX3", 27, 0, 0, 0, 0, 10, 14, 17, 255, 10, 18, 0, 255 },
- { "664FXTK3", 18, 0, 0, 0, 0, 5, 7, 11, 13, 3, 15, 0, 255 },
+ { "RG2TK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 255 },
+ { "RG2TK1", 10, 0, 0, 0, 0, 4, 6, 255, 255, 2, 6, 0, 255 },
+ { "CCTLK2", 13, 0, 0, 0, 0, 6, 255, 255, 255, 5, 8, 0, 255 },
+ { "CCBIT2", 14, 0, 0, 0, 0, 3, 5, 9, 11, 2, 11, 2, 255 },
+ { "CCCMP2", 13, 0, 0, 0, 0, 7, 10, 255, 255, 6, 11, 1, 255 },
+ { "CCFNG2", 8, 0, 0, 0, 0, 255, 255, 255, 255, 3, 6, 2, 255 },
+ { "CCGRB2", 15, 0, 0, 0, 0, 255, 255, 255, 255, 8, 10, 0, 255 },
+ { "CCGST2", 10, 0, 0, 0, 0, 4, 255, 255, 255, 4, 7, 0, 255 },
+ { "CCHCN2", 17, 0, 0, 0, 0, 9, 255, 255, 255, 9, 11, 0, 255 },
+ { "CCHND2", 12, 0, 0, 0, 0, 6, 255, 255, 255, 5, 8, 0, 255 },
+ { "666TKBB1", 21, 0, 0, 0, 0, 9, 14, 255, 255, 6, 16, 0, 255 },
+ { "665TFLX1", 27, 0, 0, 0, 0, 10, 14, 17, 255, 10, 18, 0, 255 },
+ { "664FXTK1", 18, 0, 0, 0, 0, 5, 7, 11, 13, 3, 15, 0, 255 },
{ "FDTALK", 15, 0, 0, 0, 0, 9, 255, 255, 255, 7, 9, 0, 255 },
{ "FDYELL", 16, 0, 0, 0, 0, 10, 255, 255, 255, 8, 10, 0, 255 },
{ "GLTLK", 20, 0, 0, 0, 0, 6, 12, 18, 255, 1, 19, 0, 255 },
{ "GLTRN", 4, 0, 0, 0, 0, 3, 255, 255, 255, 1, 2, 0, 255 },
- { "RAYTALK1", 10, 0, 0, 0, 0, 3, 5, 8, 255, 1, 9, 0, 255 },
- { "BRTKB1", 17, 0, 0, 0, 0, 255, 255, 255, 255, 2, 14, 0, 255 }
+ { "RAYTALK1", 10, 0, 0, 0, 0, 3, 5, 8, 255, 1, 9, 0, 255 }
};
- static const int32 characterAnims[] = {
+ static const int32 regularCharacterAnims[] = {
0, 39, 81, 89, 91, 108, 117, 124, 138, 146,
148, 156, 164, 169, 174, 179, 184, 193, 197, 207,
213, 218, 233, 235, 244, 245, 246, 246, 246, 246,
@@ -985,6 +1271,18 @@ const SpecialCharacterAnimation *Character::getSpecialAnimation(int32 characterI
289, 289, 289, 289, 289, 289, 289, 289, 289, 289
};
+ static const int32 englishDemoCharacterAnims[] = {
+ 0, 36, 75, 83, 85, 104, 112, 118, 132, 137,
+ 139, 148, 157, 161, 166, 171, 176, 194, 198, 208,
+ 213, 217, 217, 232, 241, 242, 242, 242, 242, 243,
+ 243, 243, 243, 250, 256, 258, 260, 260, 266, 268,
+ 276, 278, 279, 281, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283
+ };
+
+ const SpecialCharacterAnimation *anims = _vm->isEnglishDemo() ? englishDemoAnims : regularAnims;
+ const int32 *characterAnims = _vm->isEnglishDemo() ? englishDemoCharacterAnims : regularCharacterAnims;
+
return &anims[characterAnims[characterId] + animationId];
}
diff --git a/engines/toon/character.h b/engines/toon/character.h
index 1e0ad9c2b7..1d38a71cde 100644
--- a/engines/toon/character.h
+++ b/engines/toon/character.h
@@ -103,7 +103,7 @@ public:
virtual void plotPath(Graphics::Surface& surface);
int32 getFacingFromDirection(int16 dx, int16 dy);
- static const SpecialCharacterAnimation *getSpecialAnimation(int32 characterId, int32 animationId);
+ const SpecialCharacterAnimation *getSpecialAnimation(int32 characterId, int32 animationId);
protected:
ToonEngine *_vm;
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index 08b9590d1c..781d61345c 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -1163,6 +1163,7 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription)
_showConversationText = true;
_useAlternativeFont = false;
_isDemo = _gameDescription->flags & ADGF_DEMO;
+ _isEnglishDemo = _isDemo && _gameDescription->language == Common::EN_ANY;
_resources = NULL;
_animationManager = NULL;
diff --git a/engines/toon/toon.h b/engines/toon/toon.h
index c756d1b62c..83699597f3 100644
--- a/engines/toon/toon.h
+++ b/engines/toon/toon.h
@@ -311,6 +311,10 @@ public:
return _pathFinding;
}
+ bool isEnglishDemo() {
+ return _isEnglishDemo;
+ }
+
Common::WriteStream *getSaveBufferStream();
bool shouldQuitGame() const {
@@ -433,6 +437,7 @@ protected:
bool _firstFrame;
bool _isDemo;
+ bool _isEnglishDemo;
bool _showConversationText;
bool _useAlternativeFont;
bool _needPaletteFlush;
Commit: 7dd628083af91f5c754d23e951512f78e423d7d2
https://github.com/scummvm/scummvm/commit/7dd628083af91f5c754d23e951512f78e423d7d2
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Fix English demo Flux idle anmiations
The English demo only has part of Flux' idle animations; the others are blank
or do not exist (crashing the game).
Changed paths:
engines/toon/flux.cpp
diff --git a/engines/toon/flux.cpp b/engines/toon/flux.cpp
index 65ad66ffd8..cb94730dee 100644
--- a/engines/toon/flux.cpp
+++ b/engines/toon/flux.cpp
@@ -131,8 +131,9 @@ void CharacterFlux::update(int32 timeIncrement) {
int32 CharacterFlux::getRandomIdleAnim() {
debugC(3, kDebugCharacter, "getRandomIdleAnim()");
- static const int32 idle[] = { 0xe, 0xf, 0x21, 0x22, 0x24, 0x25, 0x27 };
- return idle[_vm->randRange(0, 6)];
+ // English demo only has part of the idle animations (the first 3 entries).
+ static const int32 idle[] = { 0xf, 0x21, 0x22, 0xe, 0x24, 0x25, 0x27 };
+ return idle[_vm->randRange(0, _vm->isEnglishDemo() ? 2 : 6)];
}
} // End of namespace Toon
Commit: aff2f124404ba0ffd06cabbcf6cb2baedeaa0007
https://github.com/scummvm/scummvm/commit/aff2f124404ba0ffd06cabbcf6cb2baedeaa0007
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Fix English demo Drew walking animation
The English demo has 3 frames for Drew's standing "animations" instead of 2.
Changed paths:
engines/toon/drew.cpp
diff --git a/engines/toon/drew.cpp b/engines/toon/drew.cpp
index a0569a2d78..439d001801 100644
--- a/engines/toon/drew.cpp
+++ b/engines/toon/drew.cpp
@@ -79,9 +79,10 @@ void CharacterDrew::playStandingAnim() {
stopSpecialAnim();
_animationInstance->setAnimation(_walkAnim);
- _animationInstance->setFrame(_facing * 2);
+ int standingFrames = _vm->isEnglishDemo() ? 3 : 2;
+ _animationInstance->setFrame(_facing * standingFrames);
_shadowAnimationInstance->setFrame(_facing);
- _animationInstance->setAnimationRange(_facing * 2, _facing * 2);
+ _animationInstance->setAnimationRange(_facing * standingFrames, _facing * standingFrames);
_animationInstance->stopAnimation();
_animationInstance->setLooping(true);
//setVisible(true);
@@ -93,7 +94,8 @@ void CharacterDrew::playWalkAnim(int32 start, int32 end) {
stopSpecialAnim();
_animationInstance->setAnimation(_walkAnim);
_shadowAnimationInstance->setFrame(_facing);
- _animationInstance->setAnimationRange(16 + _facing * 14, 16 + _facing * 14 + 13);
+ int walkAnimOffset = _vm->isEnglishDemo() ? 24 : 16;
+ _animationInstance->setAnimationRange(walkAnimOffset + _facing * 14, walkAnimOffset + _facing * 14 + 13);
_animationInstance->playAnimation();
_animationInstance->setFps(16);
_animationInstance->setLooping(true);
Commit: 8ac072c265ad64dbc38690bd973b0145301d4978
https://github.com/scummvm/scummvm/commit/8ac072c265ad64dbc38690bd973b0145301d4978
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Fix array out of bounds access in killAmbientSFX
The channel on the data of an ambient SFX is set to -1 when it is removed, but
this was not checked in killAmbientSFX, causing an access to
_channels[0xFFFFFFFF]. Fixed this by adding the missing check.
Changed paths:
engines/toon/audio.cpp
diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp
index 82544375d5..9b9cac6467 100644
--- a/engines/toon/audio.cpp
+++ b/engines/toon/audio.cpp
@@ -570,7 +570,7 @@ void AudioManager::killAmbientSFX(int32 id)
ambient->_enabled = false;
ambient->_id = -1;
- if (_channels[ambient->_channel]) {
+ if (ambient->_channel >= 0 && _channels[ambient->_channel]) {
_channels[ambient->_channel]->stop(false);
}
}
Commit: 01daf7d22b169a2fe5984b13a28a7d3125af087a
https://github.com/scummvm/scummvm/commit/01daf7d22b169a2fe5984b13a28a7d3125af087a
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Fix English demo inventory
In the English demo you start with less items than the German demo.
Changed paths:
engines/toon/toon.cpp
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index 781d61345c..f1dcff744f 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -3189,8 +3189,10 @@ void ToonEngine::newGame() {
if (_isDemo) {
addItemToInventory(59);
addItemToInventory(67);
- addItemToInventory(11);
- addItemToInventory(19);
+ if (!_isEnglishDemo) {
+ addItemToInventory(11);
+ addItemToInventory(19);
+ }
loadScene(22);
//loadScene(_gameState->_currentScene);
} else {
Commit: aff1e60597e70cdc61da6c66b1388d31c1696abc
https://github.com/scummvm/scummvm/commit/aff1e60597e70cdc61da6c66b1388d31c1696abc
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Fix English demo invalid additional Rif data
In the English demo a location (Wacme interior) has invalid additional Rif data
which causes an overflow of the Hotspots _items array. Disabling loading of the
data fixes this issue; the data does not seem to be necessary (the location
works fine without it).
Changed paths:
engines/toon/hotspot.cpp
diff --git a/engines/toon/hotspot.cpp b/engines/toon/hotspot.cpp
index cb9e30f5c8..d7b9990a50 100644
--- a/engines/toon/hotspot.cpp
+++ b/engines/toon/hotspot.cpp
@@ -106,7 +106,9 @@ bool Hotspots::loadRif(const Common::String &rifName, const Common::String &addi
uint32 size2 = 0;
uint8 *rifData2 = 0;
- if (additionalRifName.size())
+
+ // English demo seems to have some invalid additional Rif data so do not load it
+ if (!_vm->isEnglishDemo() && additionalRifName.size())
rifData2 = _vm->resources()->getFileData(additionalRifName, &size2);
// figure out the number of hotspots based on file size
@@ -114,8 +116,6 @@ bool Hotspots::loadRif(const Common::String &rifName, const Common::String &addi
int32 rifsize2 = 0;
if (size2)
- // TODO This is not correct for the English demo.
- // The size seems to be a uint16?
rifsize2 = READ_BE_UINT32(&rifData2[4]);
_numItems = (rifsize + rifsize2) / 512;
Commit: f2185bfb3515bb7533d484a2021c4d40987f8421
https://github.com/scummvm/scummvm/commit/f2185bfb3515bb7533d484a2021c4d40987f8421
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Fix English demo options menu
The options menu of the English demo has less animations and no sound effects.
Changed paths:
engines/toon/toon.cpp
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index f1dcff744f..24040016fe 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -625,6 +625,7 @@ static const MenuFile mainMenuFiles[] = {
};
#define OPTIONMENU_ENTRYCOUNT 27
+#define OPTIONMENU_ENTRYCOUNT_ENGLISH_DEMO 11
static const MenuFile optionMenuFiles[] = {
{ OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_PLAY, "PLAYBUTN.CAF", 0 }, // "Start" button
{ OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_QUIT, "QUITBUTN.CAF", 0 }, // "Intro" button
@@ -681,9 +682,11 @@ bool ToonEngine::showOptions() {
bool oldMouseHidden = _gameState->_mouseHidden;
_gameState->_mouseHidden = false;
- MenuEntry entries[OPTIONMENU_ENTRYCOUNT];
+ // English demo options menu has less animations and no SFX
+ int optionMenuEntryCount = _isEnglishDemo ? OPTIONMENU_ENTRYCOUNT_ENGLISH_DEMO : OPTIONMENU_ENTRYCOUNT;
+ MenuEntry *entries = new MenuEntry[optionMenuEntryCount];
- for (int entryNr = 0; entryNr < OPTIONMENU_ENTRYCOUNT; entryNr++) {
+ for (int entryNr = 0; entryNr < optionMenuEntryCount; entryNr++) {
entries[entryNr].menuMask = optionMenuFiles[entryNr].menuMask;
entries[entryNr].id = optionMenuFiles[entryNr].id;
entries[entryNr].animation = new Animation(this);
@@ -740,7 +743,7 @@ bool ToonEngine::showOptions() {
}
clearDirtyRects();
- for (int entryNr = 0; entryNr < OPTIONMENU_ENTRYCOUNT; entryNr++) {
+ for (int entryNr = 0; entryNr < optionMenuEntryCount; entryNr++) {
if (entries[entryNr].menuMask & menuMask) {
if (entries[entryNr].animateOnFrame) {
entries[entryNr].animateCurFrame++;
@@ -776,7 +779,7 @@ bool ToonEngine::showOptions() {
if (_mouseButton & 1) {
// left mouse button pushed down
clickingOn = OPTIONMENUHOTSPOT_NONE;
- for (int entryNr = 0; entryNr < OPTIONMENU_ENTRYCOUNT; entryNr++) {
+ for (int entryNr = 0; entryNr < optionMenuEntryCount; entryNr++) {
if (entries[entryNr].menuMask & menuMask) {
if (entries[entryNr].id != OPTIONMENUHOTSPOT_NONE) {
if (entries[entryNr].rect.contains(_mouseX, _mouseY)) {
@@ -843,7 +846,8 @@ bool ToonEngine::showOptions() {
entries[9].activeFrame = 0;
_audioManager->muteMusic(true);
}
- playSFX(-7, 128);
+ if (!_isEnglishDemo)
+ playSFX(-7, 128);
}
if (clickingOn == OPTIONMENUHOTSPOT_VOLUMEVOICE) {
@@ -854,7 +858,8 @@ bool ToonEngine::showOptions() {
entries[7].activeFrame = 0;
_audioManager->muteVoice(true);
}
- playSFX(-7, 128);
+ if (!_isEnglishDemo)
+ playSFX(-7, 128);
}
if (clickingOn == OPTIONMENUHOTSPOT_VOLUMESFX) {
@@ -865,7 +870,8 @@ bool ToonEngine::showOptions() {
entries[5].activeFrame = 0;
_audioManager->muteSfx(true);
}
- playSFX(-7, 128);
+ if (!_isEnglishDemo)
+ playSFX(-7, 128);
}
if (clickingOn == OPTIONMENUHOTSPOT_SPEAKERBUTTON) {
@@ -876,7 +882,8 @@ bool ToonEngine::showOptions() {
entries[19].playOnce = true;
playSFX(-10, 128);
- _audioManager->playVoice(316, true);
+ if (!_isEnglishDemo)
+ _audioManager->playVoice(316, true);
}
if (clickingOn == OPTIONMENUHOTSPOT_SPEAKERLEVER) {
@@ -889,7 +896,8 @@ bool ToonEngine::showOptions() {
} else {
entries[20].playOnce = true;
}
- playSFX(-9, 128);
+ if (!_isEnglishDemo)
+ playSFX(-9, 128);
}
if (clickingOn == OPTIONMENUHOTSPOT_TEXT) {
@@ -907,7 +915,8 @@ bool ToonEngine::showOptions() {
entries[4].activeFrame = 0;
}
- playSFX(-9, 128);
+ if (!_isEnglishDemo)
+ playSFX(-9, 128);
}
// don't allow change to video mode
@@ -918,14 +927,16 @@ bool ToonEngine::showOptions() {
if (clickingOn == OPTIONMENUHOTSPOT_PLAY) {
doExit = true;
exitGame = false;
- _audioManager->playSFX(10, 128, true);
+ if (!_isEnglishDemo)
+ _audioManager->playSFX(10, 128, true);
}
if (clickingOn == OPTIONMENUHOTSPOT_QUIT) {
doExit = true;
exitGame = true;
_shouldQuit = true;
- _audioManager->playSFX(10, 128, true);
+ if (!_isEnglishDemo)
+ _audioManager->playSFX(10, 128, true);
}
}
@@ -938,6 +949,7 @@ bool ToonEngine::showOptions() {
restorePalette();
dirtyAllScreen();
+ delete[] entries;
delete optionPicture;
return exitGame;
Commit: 389fe44ddabd133271a68b5602510b3408596e03
https://github.com/scummvm/scummvm/commit/389fe44ddabd133271a68b5602510b3408596e03
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Implement English demo font rendering
The English demo uses a different font format than the other versions of the
game. This implements text rendering using this format.
Changed paths:
engines/toon/font.cpp
engines/toon/font.h
engines/toon/toon.cpp
engines/toon/toon.h
diff --git a/engines/toon/font.cpp b/engines/toon/font.cpp
index 06454ad3d6..6cd01c9337 100644
--- a/engines/toon/font.cpp
+++ b/engines/toon/font.cpp
@@ -34,9 +34,12 @@ FontRenderer::FontRenderer(ToonEngine *vm) : _vm(vm) {
_currentFontColor[3] = 0xce;
_currentFont = nullptr;
+ _currentDemoFont = nullptr;
}
FontRenderer::~FontRenderer() {
+ if (_currentDemoFont)
+ delete _currentDemoFont;
}
// mapping extended characters required for foreign versions to font (animation)
@@ -98,9 +101,15 @@ void FontRenderer::renderText(int16 x, int16 y, const Common::String &origText,
curX = x;
} else {
curChar = textToFont(curChar);
- _currentFont->drawFontFrame(_vm->getMainSurface(), curChar, curX, curY, _currentFontColor);
- curX = curX + MAX<int32>(_currentFont->getFrameWidth(curChar) - 2, 0);
- height = MAX<int32>(height, _currentFont->getFrameHeight(curChar));
+ if (_currentFont) {
+ _currentFont->drawFontFrame(_vm->getMainSurface(), curChar, curX, curY, _currentFontColor);
+ } else {
+ _currentDemoFont->drawGlyph(_vm->getMainSurface(), curChar, curX, curY, _currentFontColor);
+ }
+ curX = curX + MAX<int32>((_currentFont ? _currentFont->getFrameWidth(curChar) :
+ _currentDemoFont->getGlyphWidth(curChar)) - 2, 0);
+ height = MAX<int32>(height, _currentFont ? _currentFont->getFrameHeight(curChar) :
+ _currentDemoFont->getHeight());
}
text++;
}
@@ -129,8 +138,10 @@ void FontRenderer::computeSize(const Common::String &origText, int16 *retX, int1
continue;
} else {
curChar = textToFont(curChar);
- int16 charWidth = _currentFont->getFrameWidth(curChar) - 1;
- int16 charHeight = _currentFont->getFrameHeight(curChar);
+ int16 charWidth = (_currentFont ? _currentFont->getFrameWidth(curChar) :
+ _currentDemoFont->getGlyphWidth(curChar)) - 1;
+ int16 charHeight = _currentFont ? _currentFont->getFrameHeight(curChar) :
+ _currentDemoFont->getHeight();
lineWidth += charWidth;
lineHeight = MAX(lineHeight, charHeight);
@@ -139,7 +150,9 @@ void FontRenderer::computeSize(const Common::String &origText, int16 *retX, int1
// assume we only need to take the lower bound into
// consideration.
//Common::Rect charRect = _currentFont->getFrameRect(curChar);
- lastLineHeight = MAX(lastLineHeight, _currentFont->getHeight());
+ lastLineHeight = MAX(lastLineHeight, _currentFont ? _currentFont->getHeight() :
+ (int16)_currentDemoFont->getHeight());
+
}
text++;
}
@@ -185,10 +198,11 @@ void FontRenderer::setFontColorByCharacter(int32 characterId) {
void FontRenderer::setFontColor(int32 fontColor1, int32 fontColor2, int32 fontColor3) {
debugC(5, kDebugFont, "setFontColor(%d, %d, %d)", fontColor1, fontColor2, fontColor3);
+ // The English demo uses a different palette assignment.
_currentFontColor[0] = 0;
- _currentFontColor[1] = fontColor1;
- _currentFontColor[2] = fontColor2;
- _currentFontColor[3] = fontColor3;
+ _currentFontColor[1] = _currentFont ? fontColor1 : fontColor3;
+ _currentFontColor[2] = _currentFont ? fontColor2 : fontColor1;
+ _currentFontColor[3] = _currentFont ? fontColor3 : fontColor2;
}
void FontRenderer::renderMultiLineText(int16 x, int16 y, const Common::String &origText, int32 mode, Graphics::Surface &frame) {
@@ -223,8 +237,9 @@ void FontRenderer::renderMultiLineText(int16 x, int16 y, const Common::String &o
} else
curChar = textToFont(curChar);
- int width = _currentFont->getFrameWidth(curChar);
- curWidth += MAX(width - 2, 0);
+ int width = (_currentFont ? _currentFont->getFrameWidth(curChar) :
+ _currentDemoFont->getGlyphWidth(curChar)) - 2;
+ curWidth += MAX(width, 0);
it++;
curLetterNr++;
}
@@ -261,7 +276,7 @@ void FontRenderer::renderMultiLineText(int16 x, int16 y, const Common::String &o
//numLines++;
// get font height (assumed to be constant)
- int16 height = _currentFont->getHeight();
+ int16 height = _currentFont ? _currentFont->getHeight() : _currentDemoFont->getHeight();
int32 textSize = (height - 2) * numLines;
y = y - textSize;
if (y < 30)
@@ -289,8 +304,14 @@ void FontRenderer::renderMultiLineText(int16 x, int16 y, const Common::String &o
while (*line) {
byte curChar = textToFont(*line);
- if (curChar != 32) _currentFont->drawFontFrame(frame, curChar, curX + _vm->state()->_currentScrollValue, curY, _currentFontColor);
- curX = curX + MAX<int32>(_currentFont->getFrameWidth(curChar) - 2, 0);
+ if (curChar != 32) {
+ if (_currentFont) {
+ _currentFont->drawFontFrame(frame, curChar, curX + _vm->state()->_currentScrollValue, curY, _currentFontColor);
+ } else {
+ _currentDemoFont->drawGlyph(frame, curChar, curX + _vm->state()->_currentScrollValue, curY, _currentFontColor);
+ }
+ }
+ curX = curX + MAX<int32>((_currentFont ? _currentFont->getFrameWidth(curChar) : _currentDemoFont->getGlyphWidth(curChar)) - 2, 0);
//height = MAX(height, _currentFont->getFrameHeight(curChar));
line++;
}
@@ -298,4 +319,162 @@ void FontRenderer::renderMultiLineText(int16 x, int16 y, const Common::String &o
}
}
+bool FontRenderer::loadDemoFont(const Common::String& filename) {
+ uint32 fileSize = 0;
+ uint8 *fileData = _vm->resources()->getFileData(filename, &fileSize);
+ if (!fileData)
+ return false;
+
+ uint16 dataSize = READ_LE_UINT16(fileData);
+ if (dataSize != fileSize)
+ return false;
+
+ // Offsets of the various parts of the font.
+ uint16 fontDataOffset = READ_LE_UINT16(fileData + 4);
+ uint16 glyphOffsetTableOffset = READ_LE_UINT16(fileData + 6);
+ uint16 glyphWidthDataOffset = READ_LE_UINT16(fileData + 8);
+ uint16 glyphDataOffset = READ_LE_UINT16(fileData + 10);
+ uint16 glyphHeightDataOffset = READ_LE_UINT16(fileData + 12);
+
+ // Generic font data.
+ uint8 numGlyphs = *(fileData + fontDataOffset + 3);
+ uint8 glyphWidth = *(fileData + fontDataOffset + 4);
+ uint8 glyphHeight = *(fileData + fontDataOffset + 5);
+
+ if (_currentDemoFont)
+ delete _currentDemoFont;
+
+ _currentDemoFont = new DemoFont(glyphWidth, glyphHeight, numGlyphs);
+
+ // Copy the data for each glyph to the DemoFont.
+ for (int i = 0; i < numGlyphs; i++) {
+ // Read glyph dimensions.
+ GlyphDimensions dimensions;
+ dimensions.width = *(fileData + glyphWidthDataOffset + i);
+ dimensions.heightOffset = *(fileData + glyphHeightDataOffset + (2 * i));
+ dimensions.height = *(fileData + glyphHeightDataOffset + (2 * i) + 1);
+ _currentDemoFont->setGlyphDimensions(i, dimensions);
+
+ // Determine start of data for this glyph.
+ uint16 currentGlyphDataOffset = READ_LE_UINT16(fileData + glyphOffsetTableOffset + (i * 2));
+ assert(currentGlyphDataOffset >= glyphDataOffset);
+ // Get pointers for the file and DemoFont data for this glyph.
+ uint8 *srcGlyphDataPtr = fileData + currentGlyphDataOffset;
+ uint8 *dstGlyphDataPtr = _currentDemoFont->getGlyphData(i);
+
+ // Pad the glyph data with zeroes at the start for the height offset.
+ uint16 offsetBytes = dimensions.heightOffset * dimensions.width;
+ memset(dstGlyphDataPtr, 0, offsetBytes);
+ dstGlyphDataPtr += offsetBytes;
+
+ // Read each line of pixels.
+ for (int j = 0; j < dimensions.height; j++) {
+ // Each nibble has data for one pixel, so alternately read the low
+ // and high nibble. If the number of pixels in a line is odd, one
+ // nibble is discarded.
+ bool lowNibble = true;
+ uint8 glyphByte = 0;
+ // Read each pixel in this line.
+ for (int k = 0; k < dimensions.width; k++) {
+ if (lowNibble) {
+ // Copy the data byte.
+ glyphByte = *srcGlyphDataPtr++;
+ // Read the low nibble.
+ *dstGlyphDataPtr++ = glyphByte & 0xF;
+ } else {
+ // Read the high nibble.
+ *dstGlyphDataPtr++ = glyphByte >> 4;
+ }
+ // Switch to the other nibble.
+ lowNibble = !lowNibble;
+ }
+ }
+ }
+
+ return true;
+}
+
+DemoFont::DemoFont(uint8 glyphWidth, uint8 glyphHeight, uint16 numGlyphs) {
+ _glyphWidth = glyphWidth;
+ _glyphHeight = glyphHeight;
+ _numGlyphs = numGlyphs;
+
+ // Allocate room for the full height and width for each glyph. A glyph
+ // might not need this if the width is less, but it makes lookup easier.
+ _glyphData = new uint8[_numGlyphs * _glyphWidth * _glyphHeight];
+ _glyphDimensions = new GlyphDimensions[_numGlyphs];
+}
+
+DemoFont::~DemoFont() {
+ delete[] _glyphData;
+ delete[] _glyphDimensions;
+}
+
+uint8 *DemoFont::getGlyphData() {
+ return _glyphData;
+}
+
+uint8 *DemoFont::getGlyphData(uint8 glyphNum) {
+ assert(glyphNum < _numGlyphs);
+ return _glyphData + (glyphNum * _glyphWidth * _glyphHeight);
+}
+
+uint8 DemoFont::getGlyphWidth(uint8 glyphNum) {
+ assert(glyphNum < _numGlyphs);
+ return _glyphDimensions[glyphNum].width;
+}
+
+uint8 DemoFont::getHeight() {
+ return _glyphHeight;
+}
+
+void DemoFont::setGlyphDimensions(uint8 glyphNum, GlyphDimensions &glyphOffsets) {
+ assert(glyphNum < _numGlyphs);
+ _glyphDimensions[glyphNum] = glyphOffsets;
+}
+
+void DemoFont::drawGlyph(Graphics::Surface &surface, int32 glyphNum, int16 xx, int16 yy, byte *colorMap) {
+ debugC(4, kDebugFont, "drawGlyph(surface, %d, %d, %d, colorMap)", glyphNum, xx, yy);
+ // Clip character into range.
+ if (glyphNum < 0)
+ glyphNum = 0;
+
+ if (glyphNum >= _numGlyphs)
+ glyphNum = _numGlyphs - 1;
+
+ if (_numGlyphs == 0)
+ return;
+
+ int16 rectX = getGlyphWidth(glyphNum);
+ int16 rectY = getHeight();
+
+ // Clip glyph dimensions to surface.
+ if (rectX + xx >= surface.w)
+ rectX = surface.w - xx;
+
+ if (rectX < 0)
+ return;
+
+ if (rectY + yy >= surface.h)
+ rectY = surface.h - yy;
+
+ if (rectY < 0)
+ return;
+
+ // Copy the glyph data to the surface.
+ int32 destPitch = surface.pitch;
+ uint8 *c = getGlyphData(glyphNum);
+ uint8 *curRow = (uint8 *)surface.getBasePtr(xx, yy);
+ for (int16 y = 0; y < rectY; y++) {
+ unsigned char *cur = curRow;
+ for (int16 x = 0; x < rectX; x++) {
+ if (*c && *c < 4)
+ *cur = colorMap[*c];
+ c++;
+ cur++;
+ }
+ curRow += destPitch;
+ }
+}
+
} // End of namespace Toon
diff --git a/engines/toon/font.h b/engines/toon/font.h
index e6cf916fe3..6788d8a8ae 100644
--- a/engines/toon/font.h
+++ b/engines/toon/font.h
@@ -27,12 +27,15 @@
namespace Toon {
+class DemoFont;
+
class FontRenderer {
public:
FontRenderer(ToonEngine *vm);
~FontRenderer();
void setFont(Animation *font);
+ bool loadDemoFont(const Common::String &filename);
void computeSize(const Common::String &origText, int16 *retX, int16 *retY);
void renderText(int16 x, int16 y, const Common::String &origText, int32 mode);
void renderMultiLineText(int16 x, int16 y, const Common::String &origText, int32 mode, Graphics::Surface &frame);
@@ -40,11 +43,42 @@ public:
void setFontColor(int32 fontColor1, int32 fontColor2, int32 fontColor3);
protected:
Animation *_currentFont;
+ DemoFont *_currentDemoFont;
ToonEngine *_vm;
byte _currentFontColor[4];
byte textToFont(byte c);
};
+struct GlyphDimensions {
+ uint8 width;
+ uint8 heightOffset; // # lines from top
+ uint8 height;
+};
+
+// The font format used by the English demo.
+class DemoFont {
+public:
+ DemoFont(uint8 glyphWidth, uint8 glyphHeight, uint16 numGlyphs);
+ ~DemoFont();
+
+ uint8 *getGlyphData();
+ uint8 *getGlyphData(uint8 glyphNum);
+
+ uint8 getGlyphWidth(uint8 glyphNum);
+ uint8 getHeight();
+ void setGlyphDimensions(uint8 glyphNum, GlyphDimensions &glyphDimensions);
+
+ void drawGlyph(Graphics::Surface &surface, int32 glyphNum, int16 xx, int16 yy, byte *colorMap);
+
+protected:
+ uint16 _numGlyphs;
+ uint8 _glyphWidth;
+ uint8 _glyphHeight;
+
+ uint8 *_glyphData;
+ GlyphDimensions *_glyphDimensions;
+};
+
} // End of namespace Toon
#endif
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index 24040016fe..c4c8dd5806 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -2194,13 +2194,18 @@ void ToonEngine::fadeOut(int32 numFrames) {
}
void ToonEngine::initFonts() {
- // TODO These font files do not exist in the English demo
_fontRenderer = new FontRenderer(this);
- _fontToon = new Animation(this);
- _fontToon->loadAnimation("TOONFONT.CAF");
+ if (_isEnglishDemo) {
+ // The English demo uses a different font format. There is only one
+ // font, so the alternative font setting is ignored.
+ _fontRenderer->loadDemoFont("8FAT.FNT");
+ } else {
+ _fontToon = new Animation(this);
+ _fontToon->loadAnimation("TOONFONT.CAF");
- _fontEZ = new Animation(this);
- _fontEZ->loadAnimation("EZFONT.CAF");
+ _fontEZ = new Animation(this);
+ _fontEZ->loadAnimation("EZFONT.CAF");
+ }
setFont(false);
}
diff --git a/engines/toon/toon.h b/engines/toon/toon.h
index 83699597f3..a84d2adaeb 100644
--- a/engines/toon/toon.h
+++ b/engines/toon/toon.h
@@ -428,6 +428,7 @@ protected:
Animation *_fontToon;
Animation *_fontEZ;
Animation *_currentFont;
+ Common::String *_currentDemoFont;
AudioManager *_audioManager;
Commit: c786c756952ce6e612c20e1f68064cd4b6e45a2f
https://github.com/scummvm/scummvm/commit/c786c756952ce6e612c20e1f68064cd4b6e45a2f
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:16+02:00
Commit Message:
TOON: Implement sparkles on English demo options screen
This adds the random sparkle animation on the options screen of the English
demo.
Changed paths:
engines/toon/toon.cpp
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index c4c8dd5806..ea1fe082be 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -625,35 +625,52 @@ static const MenuFile mainMenuFiles[] = {
};
#define OPTIONMENU_ENTRYCOUNT 27
-#define OPTIONMENU_ENTRYCOUNT_ENGLISH_DEMO 11
static const MenuFile optionMenuFiles[] = {
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_PLAY, "PLAYBUTN.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_QUIT, "QUITBUTN.CAF", 0 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VIDEO_MODE, "VIDMODE.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_TEXTSPEED, "TXTSPEED.CAF", 0 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_TEXT, "TEXTDIAL.CAF", 0}, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMESFX, "SFXBUTN.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMESFXSLIDER, "SFXSLDR.CAF", 0 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEVOICE, "VOICEBTN.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEVOICESLIDER, "VOICESLD.CAF", 0 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEMUSIC, "MUSICBTN.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEMUSICSLIDER, "MUSICSLD.CAF", 0 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_SPEAKERBUTTON, "XTRABUTN.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_SPEAKERLEVER, "XTRALEVR.CAF", 0}, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "ANTENNAL.CAF", 6 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "ANTENNAR.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "BIGREDL.CAF", 6 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "BIGREDR.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "GRIDLTEL.CAF", 6 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "GRIDLTER.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "LSPEAKR.CAF", 0 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "RSPEAKR.CAF", 0 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "STARLITL.CAF", 6 }, // "Start" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "STARLITR.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE1.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE2.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE3.CAF", 6 }, // "Intro" button
- { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE4.CAF", 6 } // "Intro" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_PLAY, "PLAYBUTN.CAF", 0 }, // "Play" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_QUIT, "QUITBUTN.CAF", 0 }, // "Quit" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VIDEO_MODE, "VIDMODE.CAF", 0 }, // "Video mode" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_TEXTSPEED, "TXTSPEED.CAF", 0 }, // "Text speed" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_TEXT, "TEXTDIAL.CAF", 0}, // "Text" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMESFX, "SFXBUTN.CAF", 0 }, // "SFX" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMESFXSLIDER, "SFXSLDR.CAF", 0 }, // "SFX volume" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEVOICE, "VOICEBTN.CAF", 0 }, // "Voice" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEVOICESLIDER, "VOICESLD.CAF", 0 }, // "Voice volume" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEMUSIC, "MUSICBTN.CAF", 0 }, // "Music" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEMUSICSLIDER, "MUSICSLD.CAF", 0 }, // "Music volume" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_SPEAKERBUTTON, "XTRABUTN.CAF", 0 }, // Right speaker button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_SPEAKERLEVER, "XTRALEVR.CAF", 0}, // Left speaker switch
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "ANTENNAL.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "ANTENNAR.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "BIGREDL.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "BIGREDR.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "GRIDLTEL.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "GRIDLTER.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "LSPEAKR.CAF", 0 }, // Left speaker animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "RSPEAKR.CAF", 0 }, // Right speaker animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "STARLITL.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "STARLITR.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE1.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE2.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE3.CAF", 6 }, // Decorative animation
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "CHASE4.CAF", 6 } // Decorative animation
+};
+
+// English demo does not have most of the animations, but it has a random
+// sparkle effect instead.
+#define OPTIONMENU_ENTRYCOUNT_ENGLISH_DEMO 12
+static const MenuFile optionMenuFilesEnglishDemo[] = {
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_PLAY, "PLAYBUTN.CAF", 0 }, // "Play" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_QUIT, "QUITBUTN.CAF", 0 }, // "Quit" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VIDEO_MODE, "VIDMODE.CAF", 0 }, // "Video mode" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_TEXTSPEED, "TXTSPEED.CAF", 0 }, // "Text speed" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_TEXT, "TEXTDIAL.CAF", 0}, // "Text" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMESFX, "SFXBUTN.CAF", 0 }, // "SFX" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMESFXSLIDER, "SFXSLDR.CAF", 0 }, // "SFX volume" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEVOICE, "VOICEBTN.CAF", 0 }, // "Voice" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEVOICESLIDER, "VOICESLD.CAF", 0 }, // "Voice volume" slider
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEMUSIC, "MUSICBTN.CAF", 0 }, // "Music" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_VOLUMEMUSICSLIDER, "MUSICSLD.CAF", 0 }, // "Music volume" button
+ { OPTIONMENUMASK_EVERYWHERE, OPTIONMENUHOTSPOT_NONE, "SPRKL.CAF", 6 } // Sparkle animation
};
struct MenuEntry {
@@ -684,16 +701,17 @@ bool ToonEngine::showOptions() {
// English demo options menu has less animations and no SFX
int optionMenuEntryCount = _isEnglishDemo ? OPTIONMENU_ENTRYCOUNT_ENGLISH_DEMO : OPTIONMENU_ENTRYCOUNT;
+ const MenuFile *optionMenuFilesPtr = _isEnglishDemo ? optionMenuFilesEnglishDemo : optionMenuFiles;
MenuEntry *entries = new MenuEntry[optionMenuEntryCount];
for (int entryNr = 0; entryNr < optionMenuEntryCount; entryNr++) {
- entries[entryNr].menuMask = optionMenuFiles[entryNr].menuMask;
- entries[entryNr].id = optionMenuFiles[entryNr].id;
+ entries[entryNr].menuMask = optionMenuFilesPtr[entryNr].menuMask;
+ entries[entryNr].id = optionMenuFilesPtr[entryNr].id;
entries[entryNr].animation = new Animation(this);
- entries[entryNr].animation->loadAnimation(optionMenuFiles[entryNr].animationFile);
+ entries[entryNr].animation->loadAnimation(optionMenuFilesPtr[entryNr].animationFile);
if (entries[entryNr].id != OPTIONMENUHOTSPOT_NONE)
entries[entryNr].rect = entries[entryNr].animation->getRect();
- entries[entryNr].animateOnFrame = optionMenuFiles[entryNr].animateOnFrame;
+ entries[entryNr].animateOnFrame = optionMenuFilesPtr[entryNr].animateOnFrame;
entries[entryNr].animateCurFrame = 0;
entries[entryNr].activeFrame = 0;
entries[entryNr].playOnce = false;
@@ -717,6 +735,11 @@ bool ToonEngine::showOptions() {
entries[4].activeFrame = 0;
}
+ // Variables for the English demo sparkle animation.
+ int sparkleDelay = 100;
+ int sparklePosX = 0;
+ int sparklePosY = 0;
+
setCursor(0);
int menuMask = OPTIONMENUMASK_EVERYWHERE;
@@ -745,6 +768,24 @@ bool ToonEngine::showOptions() {
for (int entryNr = 0; entryNr < optionMenuEntryCount; entryNr++) {
if (entries[entryNr].menuMask & menuMask) {
+ int animPosX = 0;
+ int animPosY = 0;
+ if (_isEnglishDemo && entryNr == 11) {
+ // Special handling for the sparkles in the English demo.
+ if (sparkleDelay > 0) {
+ // Don't show the next sparkle until the delay has
+ // counted down.
+ sparkleDelay--;
+ continue;
+ } else if (entries[entryNr].animateCurFrame == 0 && entries[entryNr].activeFrame == 0) {
+ // Start of a new sparkle animation. Generate a
+ // random position on the screen.
+ sparklePosX = randRange(0, 639 - entries[entryNr].animation->getWidth());
+ sparklePosY = randRange(0, 399 - entries[entryNr].animation->getHeight());
+ }
+ animPosX = sparklePosX;
+ animPosY = sparklePosY;
+ }
if (entries[entryNr].animateOnFrame) {
entries[entryNr].animateCurFrame++;
if (entries[entryNr].animateOnFrame <= entries[entryNr].animateCurFrame) {
@@ -758,12 +799,16 @@ bool ToonEngine::showOptions() {
if (entryNr == 20 && entries[entryNr].animateOnFrame > 0) {
playSFX(-3, 128);
}
+ if (_isEnglishDemo && entryNr == 11)
+ // Sparkle animation has finished. Generate
+ // a random delay until the next sparkle.
+ sparkleDelay = randRange(0, 100);
}
entries[entryNr].animateCurFrame = 0;
}
}
int32 frameNr = entries[entryNr].activeFrame;
- entries[entryNr].animation->drawFrame(*_mainSurface, frameNr, 0, 0);
+ entries[entryNr].animation->drawFrame(*_mainSurface, frameNr, animPosX, animPosY);
}
}
Commit: 570482a075dd83514ad146da6bce54bef4db9feb
https://github.com/scummvm/scummvm/commit/570482a075dd83514ad146da6bce54bef4db9feb
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-09-13T20:59:17+02:00
Commit Message:
TOON: Remove English demo unstable flag
Changed paths:
engines/toon/detection.cpp
diff --git a/engines/toon/detection.cpp b/engines/toon/detection.cpp
index e311a5eb08..84e2cc9112 100644
--- a/engines/toon/detection.cpp
+++ b/engines/toon/detection.cpp
@@ -115,7 +115,7 @@ static const ADGameDescription gameDescriptions[] = {
{"generic.svl", 0, "5c42724bb93b360dca7044d6b7ef26e5", 7739319},
AD_LISTEND
},
- Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_UNSTABLE, GUIO1(GUIO_NOMIDI)
+ Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO1(GUIO_NOMIDI)
},
{
// English 2-CD "Sold out" release
More information about the Scummvm-git-logs
mailing list