Ticket #7999: simon_fcs_names.diff

File simon_fcs_names.diff, 7.8 KB (added by wjp, 22 years ago)

FillOrCopyStruct name patch

  • simon.cpp

    RCS file: /cvsroot/scummvm/scummvm/simon/simon.cpp,v
    retrieving revision 1.44
    diff -u -d -b -u -r1.44 simon.cpp
     
    15291529                _fcs_unk_1 = 0;
    15301530                if (_fcs_ptr_array_3[0] != 0) {
    15311531                        _fcs_ptr_1 = _fcs_ptr_array_3[0];
    1532                         showmessage_helper_3(_fcs_ptr_1->unk6, _fcs_ptr_1->unk7);
     1532                        showmessage_helper_3(_fcs_ptr_1->textLength,
     1533                                 _fcs_ptr_1->textMaxLength);
    15331534                }
    15341535                _mortal_flag = false;
    15351536        }
     
    23062307
    23072308                fcs = _fcs_ptr_array_3[5];
    23082309
    2309                 fcs->unk2 = unk132_result;
    2310                 fcs->unk1 = 2;
    2311                 fcs->unk3 = 2;
    2312                 fcs->unk6 = 3;
     2310                fcs->textRow = unk132_result;
     2311
     2312        // init x offset with a 2 character savegame number + a period (18 pix)
     2313                fcs->textColumn = 2;
     2314                fcs->textColumnOffset = 2;
     2315                fcs->textLength = 3;
    23132316
    23142317                name = buf + i * 18;
    23152318
     2319        // now process entire savegame name to get correct x offset for cursor
    23162320                name_len = 0;
    23172321                while (name[name_len]) {
    2318                         fcs->unk6++;
    2319                         fcs->unk3 += 6;
     2322                        fcs->textLength++;
     2323                        fcs->textColumnOffset += 6;
    23202324                        if (name[name_len] == 'i' || name[name_len] == 'l')
    2321                                 fcs->unk3 -= 2;
    2322                         if (fcs->unk3 >= 8) {
    2323                                 fcs->unk3 -= 8;
    2324                                 fcs->unk1++;
     2325                                fcs->textColumnOffset -= 2;
     2326                        if (fcs->textColumnOffset >= 8) {
     2327                                fcs->textColumnOffset -= 8;
     2328                                fcs->textColumn++;
    23252329                        }
    23262330                        name_len++;
    23272331                }
     
    26662670
    26672671
    26682672
    2669 void SimonState::fcs_proc_1(FillOrCopyStruct *fcs, uint value)
     2673void SimonState::fcs_setTextColor(FillOrCopyStruct *fcs, uint value)
    26702674{
    26712675        fcs->text_color = value;
    26722676}
     
    27462750        startUp_helper_3();
    27472751        _fcs_ptr_1 = _fcs_ptr_array_3[a];
    27482752
    2749         showmessage_helper_3(_fcs_ptr_1->unk6, _fcs_ptr_1->unk7);
     2753        showmessage_helper_3(_fcs_ptr_1->textLength, _fcs_ptr_1->textMaxLength);
    27502754}
    27512755
    27522756
     
    27682772        fcs->flags = flags;
    27692773        fcs->fill_color = fill_color;
    27702774        fcs->text_color = unk4;
    2771         fcs->unk1 = 0;
    2772         fcs->unk2 = 0;
    2773         fcs->unk3 = 0;
    2774         fcs->unk7 = fcs->width * 8 / 6;
     2775        fcs->textColumn = 0;
     2776        fcs->textRow = 0;
     2777        fcs->textColumnOffset = 0;
     2778        fcs->textMaxLength = fcs->width * 8 / 6; // characters are 6 pixels
    27752779        return fcs;
    27762780}
    27772781
     
    28972901        else
    28982902                video_erase(fcs);
    28992903
    2900         fcs->unk1 = 0;
    2901         fcs->unk2 = 0;
    2902         fcs->unk3 = 0;
    2903         fcs->unk6 = 0;
     2904        fcs->textColumn = 0;
     2905        fcs->textRow = 0;
     2906        fcs->textColumnOffset = 0;
     2907        fcs->textLength = 0;
    29042908}
    29052909
    29062910/* ok */
     
    31633167                showmessage_helper_2();
    31643168                if (!_showmessage_flag) {
    31653169                        _fcs_ptr_array_3[0] = _fcs_ptr_1;
    3166                         showmessage_helper_3(_fcs_ptr_1->unk6, _fcs_ptr_1->unk7);
     3170                        showmessage_helper_3(_fcs_ptr_1->textLength,
     3171                                 _fcs_ptr_1->textMaxLength);
    31673172                }
    31683173                _showmessage_flag = true;
    31693174                _fcs_data_1[_fcs_unk_1] = 1;
     
    32413246        if (c == 0xC) {
    32423247                video_fill_or_copy_from_3_to_2(fcs);
    32433248        } else if (c == 0xD || c == 0xA) {
    3244                 video_putchar_helper(fcs);
     3249                video_putchar_newline(fcs);
    32453250        } else if (c == 8 || c == 1) {
    32463251                int8 val = (c == 8) ? 6 : 4;
    3247                 if (fcs->unk6 != 0) {
    3248                         fcs->unk6--;
    3249                         fcs->unk3 -= val;
    3250                         if ((int8)fcs->unk3 < val) {
    3251                                 fcs->unk3 += 8;
    3252                                 fcs->unk1--;
     3252                if (fcs->textLength != 0) {
     3253                        fcs->textLength--;
     3254                        fcs->textColumnOffset -= val;
     3255                        if ((int8)fcs->textColumnOffset < val) {
     3256                                fcs->textColumnOffset += 8;
     3257                                fcs->textColumn--;
    32533258                        }
    32543259                }
    32553260        } else if (c >= 0x20) {
    3256                 if (fcs->unk6 == fcs->unk7) {
    3257                         video_putchar_helper(fcs);
    3258                 } else if (fcs->unk2 == fcs->height) {
    3259                         video_putchar_helper(fcs);
    3260                         fcs->unk2--;
     3261                if (fcs->textLength == fcs->textMaxLength) {
     3262                        video_putchar_newline(fcs);
     3263                } else if (fcs->textRow == fcs->height) {
     3264                        video_putchar_newline(fcs);
     3265                        fcs->textRow--;
    32613266                }
    32623267
    3263                 video_putchar_helper_2(fcs, fcs->unk1 + fcs->x, fcs->unk2 * 8 + fcs->y, c);
     3268                video_putchar_drawchar(fcs, fcs->textColumn + fcs->x,
     3269                               fcs->textRow * 8 + fcs->y, c);
    32643270
    3265                 fcs->unk6++;
    3266                 fcs->unk3 += 6;
     3271                fcs->textLength++;
     3272                fcs->textColumnOffset += 6;
    32673273                if (c == 'i' || c == 'l')
    3268                         fcs->unk3 -= 2;
     3274                        fcs->textColumnOffset -= 2;
    32693275
    3270                 if (fcs->unk3 >= 8) {
    3271                         fcs->unk3 -= 8;
    3272                         fcs->unk1++;
     3276                if (fcs->textColumnOffset >= 8) {
     3277                        fcs->textColumnOffset -= 8;
     3278                        fcs->textColumn++;
    32733279                }
    32743280        }
    32753281}
    32763282
    3277 void SimonState::video_putchar_helper(FillOrCopyStruct *fcs)
     3283void SimonState::video_putchar_newline(FillOrCopyStruct *fcs)
    32783284{
    3279         fcs->unk3 = 0;
    3280         fcs->unk6 = 0;
    3281         fcs->unk1 = 0;
     3285        fcs->textColumnOffset = 0;
     3286        fcs->textLength = 0;
     3287        fcs->textColumn = 0;
    32823288
    3283         if (fcs->unk2 != fcs->height)
    3284                 fcs->unk2++;
     3289        if (fcs->textRow != fcs->height)
     3290                fcs->textRow++;
    32853291}
    32863292
    32873293static const byte video_font[] = {
     
    33853391        240, 240, 240, 240, 240, 240, 240, 240,
    33863392};
    33873393
    3388 void SimonState::video_putchar_helper_2(FillOrCopyStruct *fcs, uint x, uint y, byte chr)
     3394void SimonState::video_putchar_drawchar(FillOrCopyStruct *fcs, uint x, uint y, byte chr)
    33893395{
    33903396        const byte *src;
    33913397        byte color, *dst;
     
    33943400        _lock_word |= 0x8000;
    33953401
    33963402        dst = dx_lock_2();
    3397         dst += y * _dx_surface_pitch + x * 8 + fcs->unk3;
     3403        dst += y * _dx_surface_pitch + x * 8 + fcs->textColumnOffset;
    33983404
    33993405        src = video_font + (chr - 0x20) * 8;
    34003406
  • simon.h

    RCS file: /cvsroot/scummvm/scummvm/simon/simon.h,v
    retrieving revision 1.23
    diff -u -d -b -u -r1.23 simon.h
     
    127127        byte flags;
    128128        uint16 x, y;
    129129        uint16 width, height;
    130         uint16 unk1, unk2;
    131         uint8 unk3, unk6, unk7, fill_color, text_color, unk5;
     130        uint16 textColumn, textRow;
     131        uint8 textColumnOffset, textLength, textMaxLength;
     132    uint8 fill_color, text_color, unk5;
    132133        FillOrCopyData *fcs_data;
    133134};
     135// note on text offset:
     136// the actual x-coordinate is: textColumn * 8 + textColumnOffset
     137// the actual y-coordinate is: textRow * 8
    134138
    135139
    136140enum {
     
    943947
    944948        bool vc_get_bit(uint bit);
    945949
    946         void fcs_proc_1(FillOrCopyStruct *fcs, uint value);
     950        void fcs_setTextColor(FillOrCopyStruct *fcs, uint value);
    947951
    948952        void video_copy_if_flag_0x8_c(FillOrCopyStruct *fcs);
    949953        void delete_hitarea_by_index(uint index);
     
    10101014        void showmessage_helper_2();
    10111015        void print_char_helper_6(uint i);
    10121016
    1013         void video_putchar_helper(FillOrCopyStruct *fcs);
    1014         void video_putchar_helper_2(FillOrCopyStruct *fcs, uint x, uint y, byte chr);
     1017        void video_putchar_newline(FillOrCopyStruct *fcs);
     1018        void video_putchar_drawchar(FillOrCopyStruct *fcs, uint x, uint y, byte chr);
    10151019
    10161020        void initSound();
    10171021        void playVoice(uint voice);
  • simonverb.cpp

    RCS file: /cvsroot/scummvm/scummvm/simon/simonverb.cpp,v
    retrieving revision 1.3
    diff -u -d -b -u -r1.3 simonverb.cpp
     
    9999        if (fcs == NULL || fcs->text_color == 0)
    100100                return;
    101101
    102         fcs->unk1 = x >> 3;
    103         fcs->unk3 = x & 7;
     102        fcs->textColumn = x >> 3;
     103        fcs->textColumnOffset = x & 7;
    104104
    105105        for (; *string; string++)
    106106                video_putchar(fcs, *string);
  • simonitems.cpp

    RCS file: /cvsroot/scummvm/scummvm/simon/simonitems.cpp,v
    retrieving revision 1.3
    diff -u -d -b -u -r1.3 simonitems.cpp
     
    15761576
    15771577void SimonState::o_unk_160(uint a)
    15781578{
    1579         fcs_proc_1(_fcs_ptr_array_3[_fcs_unk_1], a);
     1579        fcs_setTextColor(_fcs_ptr_array_3[_fcs_unk_1], a);
    15801580}
    15811581
    15821582void SimonState::o_unk_103()
     
    16211621
    16221622        if (a == _fcs_unk_1) {
    16231623                _fcs_ptr_1 = _fcs_ptr_array_3[a];
    1624                 showmessage_helper_3(_fcs_ptr_1->unk6, _fcs_ptr_1->unk7);
     1624                showmessage_helper_3(_fcs_ptr_1->textLength,
     1625                             _fcs_ptr_1->textMaxLength);
    16251626        }
    16261627}