Ticket #8788: zanthiaTalk.patch

File zanthiaTalk.patch, 3.4 KB (added by athrxx, 13 years ago)

Hof: Zanthia chat fix for towns and floppy versions

  • kyra_v2.cpp

     
    18711871                Opcode(o2_dummy),
    18721872                OpcodeUnImpl(),
    18731873                // 0x80
     1874                Opcode(o2_objectChat),
    18741875                OpcodeUnImpl(),
    18751876                OpcodeUnImpl(),
    18761877                OpcodeUnImpl(),
    1877                 OpcodeUnImpl(),
    18781878                // 0x84
    18791879                OpcodeUnImpl(),
    18801880                OpcodeUnImpl(),
  • kyra_v2.h

     
    615615        byte _messagePal[3];
    616616        int _msgUnk1;
    617617
     618        uint8 _configTextspeed;
     619
    618620        // chat
    619621        int _vocHigh;
    620622
     
    630632        int chatGetType(const char *text);
    631633        int chatCalcDuration(const char *text);
    632634
    633         void objectChat(const char *text, int object, int vocHigh, int vocLow);
    634         void objectChatInit(const char *text, int object, int vocHigh, int vocLow);
     635        void objectChat(const char *text, int object, int vocHigh = -1, int vocLow = -1);
     636        void objectChatInit(const char *text, int object, int vocHigh = -1, int vocLow = -1);
    635637        void objectChatPrintText(const char *text, int object);
    636638        void objectChatProcess(const char *script);
    637639        void objectChatWaitToFinish();
     
    792794        int o2_defineSceneAnim(ScriptState *script);
    793795        int o2_updateSceneAnim(ScriptState *script);
    794796        int o2_defineRoom(ScriptState *script);
     797        int o2_objectChat(ScriptState *script);
    795798        int o2_countItemInstances(ScriptState *script);
    796799        int o2_initObject(ScriptState *script);
    797800        int o2_deinitObject(ScriptState *script);
  • script_v2.cpp

     
    644644        return 0;
    645645}
    646646
     647int KyraEngine_v2::o2_objectChat(ScriptState *script) {
     648        debugC(3, kDebugLevelScriptFuncs, "o2_objectChat(%p) ('%s', %d)", (const void *)script, stackPosString(0), stackPos(1));
     649        objectChat(stackPosString(0), stackPos(1));
     650        return 0;
     651}
     652
    647653int KyraEngine_v2::o2_countItemInstances(ScriptState *script) {
    648654        debugC(3, kDebugLevelScriptFuncs, "o2_countItemInstances(%p) (%d)", (const void *)script, stackPos(0));
    649655        uint16 item = stackPos(0);
     
    823829
    824830int KyraEngine_v2::o2t_setShapeFlag(ScriptState *script) {
    825831        debugC(3, kDebugLevelScriptFuncs, "o2t_setShapeFlag(%p) (%d)", (const void *)script, stackPos(0));
    826         _newShapeFlag = stackPos(0);
     832        if (_flags.isTalkie)
     833                _newShapeFlag = stackPos(0);
    827834        return 0;
    828835}
    829836
  • text_v2.cpp

     
    126126}
    127127
    128128int KyraEngine_v2::chatCalcDuration(const char *str) {
    129         return MIN<int>(strlen(str) << 3, 120);
     129        // TODO: text speed support     
     130        _configTextspeed = 50;
     131
     132        static const uint8 duration[] = { 16, 14, 12, 10, 8, 8, 7, 6, 5, 4 };
     133        return MAX<int>(strlen(str) * duration[(_configTextspeed / 10)], 120);
    130134}
    131135
    132136void KyraEngine_v2::objectChat(const char *str, int object, int vocHigh, int vocLow) {
     
    318322                        }
    319323
    320324                        const uint32 curTime = _system->getMillis();
    321                         if ((1/*textEnabled()*/ && curTime > endTime) || (1/*voiceEnabled()*/ && !snd_voiceIsPlaying()) || _skipFlag) {
     325                        if ((1/*textEnabled()*/ && curTime > endTime) || (_flags.isTalkie && 1/*voiceEnabled()*/ && !snd_voiceIsPlaying()) || _skipFlag) {
    322326                                _skipFlag = false;
    323327                                nextFrame = curTime;
    324328                                running = false;