Пользователь
30,2
рейтинг
19 декабря 2012 в 00:58

Разработка → Почему Pinball убрали из Windows Vista



Один из разработчиков Microsoft объяснил, почему замечательную игру Pinball не включили в состав Windows Vista. Ходили слухи, что это было сделано по юридическим причинам. Но нет, причины сугубо технические. Оказывается, Pinball просто не смогли портировать 64-битную платформу.

В процессе разработки Windows Vista пришлось портировать на 64-битную архитектуру миллионы строк кода, в том числе созданного 20 лет назад сторонними разработчиками. Иногда возникали проблемы. С пинболлом возникла конкретная проблема: шарик не отражался от препятствий, а проходил сквозь них.

С самого начала игры, когда шарик подавался на пусковую пружинку, он просто медленно проходил сквозь неё и исчезал. То есть игра завершалась крайне быстро.

«Двое из нас попытались отладить программу и выяснить причину, но этот код был написан несколькими годами ранее сторонней компанией, и никто в Microsoft никогда не понимал, как он работает (ещё меньше до сих пор это понимают), и бóльшая часть кода была полностью без комментариев. Поэтому мы просто не могли понять, почему детектор столкновений не работает. Чёрт, мы даже не могли найти детектор столкновений!

Ещё нужно было портировать несколько миллионов строк кода, так что мы не могли позволить себе потратить несколько дней на поиск, где спрятана какая-нибудь ошибка округления с плавающей запятой, из-за которой детектор столкновений не работает. Мы просто приняли волевое решение исключить Pinball из продукта.
Анатолий Ализар @alizar
карма
749,5
рейтинг 30,2
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (168)

  • +155
    Могли бы сделать open source, думаю баг быстро бы исправили.
    • –55
      Что то не помню такого, что бы продукты Microsoft (хоть и Pinball делали сторонние разработчики) становился Open Source…
      • +63
        • +20
          Видимо действительно надо ложиться спать…
          • +9
            — Сатурну больше не наливать ©
        • +3
          А если заменить «продукты» на «пользовательские приложения»?
        • +3
          По поводу списка, а как понять, какие строчки в нём соответствуют продуктам Microsoft? Похоже, что не все: например, Егор Козлов, который делает Apache POI, работает не на Microsoft.
        • –25
          Насколько я понял из списка у MicroSoft все непопулярные и неинтересные проекты с которых не получилось срубить бабла становятся Open Source. Отличная идея.
          • +12
            К примеру фреймворк ASP.NET MVC едва ли можно назвать непопулярным и неинтересным
          • +10
            C другой стороны — отдать проект, который не приносит прибыли, сообществу лучше, чем просто его похоронить. Это же чья-то работа, частично уже выполненная. Зачем её выбрасывать?
        • +1
          А это всё разве разработки самой Microsoft? Особенно Apache POI.
    • +17
      Тоже эта мысль первой в голову пришла. Судя по комментам к оригинальной статье, нас таких много. Вот что ответил автор:
      Hey everybody asking that the source code be released: The source code was licensed from another company. If you want the source code, you have to go ask them.

      Решил провести небольшое расследование. Оказалось, что Pinball написан компанией Maxis (да-да, те самые, что создали Sims и Sim City), которая является дочкой Electronic Arts.

      Так что, можно написать в EA просьбу открыть исходники Pinball. Есть желающие? :)
      • +15
        Если бы кто то написал открытое письмо я бы подписал. Если есть люди, которые имеют некоторый опыт подобных затей- займитесь пожалуйста.
      • +14
        EA и открытые исходники, боюсь, несовместимы :(
        • +5
          ТА-ДАМ!
          gpl.ea.com/

          Сразу может показаться, что кроме Вебкита там ничего нет, но в недрах архивов можно найти такие интересные вещи, как EASTL. Что это такое и чем оно отличается от STL, поставляемой вместе с компиляторами, гуглите сами.
          • +2
            Ну, будем откровенны, это капля в море :) Чтобы не мучаться с поиском этого EASTL, см github.com/paulhodge/EASTL/ — добрые люди нашли эту либу и выложили её отдельно.
      • 0
        Ага, вот эти ребята!

        www.joelonsoftware.com/articles/APIWar.html
        I first heard about this from one of the developers of the hit game SimCity, who told me that there was a critical bug in his application: it used memory right after freeing it, a major no-no that happened to work OK on DOS but would not work under Windows where memory that is freed is likely to be snatched up by another running application right away. The testers on the Windows team were going through various popular applications, testing them to make sure they worked OK, but SimCity kept crashing. They reported this to the Windows developers, who disassembled SimCity, stepped through it in a debugger, found the bug, and added special code that checked if SimCity was running, and if it did, ran the memory allocator in a special mode in which you could still use memory after freeing it.

        Кратко и по-русски: SimCity падала под виндой, но работала под DOS. Оказалось, в ней память использовалась после освобождения. Разработчикам винды пришлось делать исключение в менеджере памяти специально для SimCity.
  • +23
    Первое, что пришло в голову: Ну не шмогла я, не шмогла.
    Миллионы строк смогли портировать, а игру нет.
    • +12
      Могли бы, если бы времени было «много». Главной причиной было «мы не могли позволить себе потратить несколько дней на поиск», а не «всем отделом бились-бились, да так и ничего не получилось».
    • +1
      Портировать миллионы строк своего кода — их обязанность. Портировать third-party код — изьявление доброй воли. К тому же хз что там с лицензиями.
  • +11
    Можно было бы и с нуля написать обновленный. Очень нравилась в свое время игрушка. Пойду ностальгировать.
    • +10
    • +1
      Недавно нашел архив с Jezzball, любимой игрой из 3.11 и радуюсь жизни.
    • 0
      Значит таки не поленились и нашли ошибку! Молодцы.
      • +3
        Да нет же. Просто это 32-битная версия.
        • 0
          Ну так она прекрасно работает на 64-битной Windows 7. И скорее всего на Висте тоже. Что же мешало включить эту версию сразу?
    • 0
      Amd BlueStacks (это Android Emulator) + Zen Pinball HD помогут ностальгировать.
  • +36
    Какой же код написали сторонние разработчики, что в игре с парочкой кнопок управления и ударяющимся шариком об стенки, невозможно было найти код обработки столкновений? Это же хардкор! :)
    • +7
      Я, наверное, не хотел бы это увидеть…
    • +1
      Индусы на аутсорсе :)
      • +35
        image
        • 0
          Это такой вид наказания?
      • +14
        Да сами вы индусы.

        В оригинале в комментах отписались разработчики этой игры. (Американцы с американскими именами и фамилиями.)

        Они объяснили, что существенная часть кода была написана на ассемблере и оптимизирована вручную, чтобы максимально заполнить конвейеры Pentium и выжать все FPS до последнего.

        В то время практически все игры писались так (и вряд ли сейчас пишутся существенно иначе) — потому что «срок жизни» типичной игры — год-два, и необходимости в долгосрочной поддержке кода не возникает.
        Лишние несколько FPS всегда оказываются приоритетнее потенциальной переносимости кода.
    • –2
      Может под «сторонними разработчиками» понималась бригада индусов-программистов? :)
  • 0
    Ну вот что за люди, напомнили мне про эту игрушку, теперь ведь найду ее альтернативу и буду играть…
  • –24
    Не работает? Правда? Значит в русском Пинболе регрессия? =)

    • +9
      В русском пинболе х86…
  • +3
    Ну и архив для тех, кому лень\не может торрентом пользоваться: rghost.ru/42348301
    • 0
      интересно, почему он может не работать, висит заставкой и все… совместимости перебрал…
  • +8
    Можно было бы оставить 32 бит в режиме совместимости.
    Если не видно разницы, как говорится…
    Или я чего-то не понимаю?
    • +5
      That would have been even more work, because there was at the time no infrastructure in Setup for having 32-bit-only components. (And then automatically uninstalling it when WOW64 was disabled.) And besides, all the people who criticized Windows 96 as «not really a 32-bit operating system because it has some parts in 16-bit» would use the same logic to say that 64-bit Windows is «not really a 64-bit operating system.» -Raymond
      Source
      • +16
        And besides, all the people who criticized Windows 96 as «not really a 32-bit operating system because it has some parts in 16-bit» would use the same logic to say that 64-bit Windows is «not really a 64-bit operating system.» -Raymond

        Детская травма майкрософта, видимо.
        • +9
          Да уж, представил себе критиков орущих: «У них система не настоящая 64-битная! Там одна игра 32-битная!» Никто бы таких всё равно в всерьёз не принял.
          • +8
            Можно было даже расширить поле для троллинга, специально оставить 32-битный пинбол и 16-битный пасьянс!
            • 0
              Нет, 16-битный пасьянс на 64-й машине оставить не вышло бы никак. Даже если очень хотелось бы.
              • +1
                Написать прослойку типа WOW64 специально под пасьянс :)
                • +1
                  WOW64 — набор библиотек, 16 битный код же на 64 битах просто не запустится.
                  • +4
                    Упороться и заэмулить спецом под пасьянс!
                  • 0
                    qemu в режиме паравиртуализации — да и вообще там есть Hyper-V теперь как компонент и настольной версии Windows 8.
                    • 0
                      И будет этот пасьянс тянуть с собой цельную 32-битную ОС, и занимать гигабайт на диске и столько же в памяти :)
                      • 0
                        можно паравиртуализацией сделать если через qemu
                        • 0
                          как это поможет уменьшить объём на диске и в памяти?
                          • 0
                            загляните в каталог (x64) C:\Windows\System32\ и (x86) C:\Windows\SysWOW32\
                            много нового узнаете
                            ;)
                      • +1
                        Искусство требует жертв :)
                      • +3
                        И так всё круто у Майкрософт в Windows Store: Пинбол — 123 МБ, Сапёр (!) — 103 МБ, Маджонг — 119 МБ, Пасьянсы — 92 МБ.
                        • +1
                          О, будущее уже наступило, оказывается
                        • +1
                          Скажу по секрету, что когда сделал клон старого пасьянса 3.11 для Win 8 (ссылку не дам, в профиле найдете), то обнаружилось, что для «прыгающих карт» под XAML надо изрядно попотеть, а на деле еще и производительности видеокарты надо немало — больше нет возможности не очищать Canvas, потому каждая карта должна быть отдельынм объектом. Вот и получается требование мощной видеокарты для «спецэффекта» 25-летней давности.
                          Ну зато хоть размер вышел относительно адекватный — 1.6Мб.
                          • 0
                            Если бы ещё что-то вроде conquiztador сделали, без повторов вопросов… Куплю сразу!
                            • +1
                              могу портировать на W8 «Свою Игру» с iOS. Графика в разы хуже, зато вопросы из реальной телепередачи. Ссылка тоже в профиле
                              • 0
                                На iOS не вариант, при разделе территории очень важна была скорость наборы ответа. В общем, предложил вам идею.
                                • 0
                                  Так я ж говорю не НА iOS, а С нее — оттуда взять готовую игру с вопросами телевикторины и перенести на W8. Конечно же, без територий и пр., но направление то же, зарядка для мозгов хорошая, таймер на 60 секунд, всякие там «вопрос аукцион» и пр. В бесплатном режиме вполне может пойти, даже не смотря на посредственную графику.
                                  А уже делать полноценную кальку имеющейся веб-игры наверное не возьмусь, да и с правообладателем еще надо договариваться.
                                  • 0
                                    Решайте сами. Прошлой зимой играться было классно, пока не пошли повторные вопросы. И с девушкой бывшей совместно игрался, и с братом младшим, иногда и родители подключались с ноута.
                          • +2
                            У вас в профиле ссылки на судоку и косынку местами перепутаны.

                            Ну вы и конспиратор %)
                          • –1
                            • 0
                              Во-первых, тут была бы уместна ссылка на WriteableBitmapEx

                              Во-вторых, сам такой битмап хранится в оперативной памяти. Прямое копирование (аналог BitBlt) одной карты в этот битмап будет относительно быстрым, но затем надо вызывать Invalidate() и все содержимое битмапа отправится в GPU. Для справки, в режиме 2560x1440x32bit это будет ~15 мегабайт. Для частоты отображения 30 fps это значит поток данных в 450 мегабайт в секунду. Можно было бы разбить экран на octree подобных битмапов и отсылать только измененные, но уж извините, я лучше сделаю 100-200 объектов Rectangle с ImageBrush, а затем заморожу Canvas и создам поверх него новый. При 3000 карт получаем fps около 30, дальше уже начинается деградация. Или таки переделать целиком весь проект, отказаться от XAML и использовать SharpDX и иже с ними. Из-за одних только прыгающих карт как-то не серьезно звучит.
                              Собственно, хорошая тема для хабр-статьи, надо будет расписать, когда будет время.
                              • 0
                                С такими разрешениями надо отказываться от WPF и делать, как положено, на чем-нибудь типа XNA, а не подгонять под задачу инструмент не предназначенный для решения таких задач.
                                • 0
                                  такие разрешения сейчас повсеместно. но задумайтесь на минутку, мы же говорим не о 3д шутере, а о пасьянсе! оригинал отлично работал у меня на 386sx33, который слабее современных телефонов в десятки раз. настало будущее, в котором программировать пасьянсы в XNA?
                              • 0
                                WPF, кстати, внезапно требует видеокарту в том числе и потому что реализован поверх все того же DirectX, а не GDI. А не потому что он чисто векторный.
                                • 0
                                  не совсем понял, при чем тут эта реплика, но видеокару внезапно требует компьютер, чтобы хоть что-то отобразить на дисплее. WPF, кстати, может работать и в VESA режиме, без драйверов вендоров и D2D/D3D акселерации, только это совсем уже не по теме разговора.
                                  • 0
                                    1. Читайте как «видеокарта с графическим ускорителем» (а сейчас другие бывают?)
                                    2. Работает он не в Vesa, а в DirectX REF Mode, который из себя представляет режим эмуляции аппаратного ускорения (и естественно работает очень медленно).
                                    • 0
                                      если не сильно вдаваться в детали, то без драйверов как раз Windows работает в VESA режиме или чем-то подобном VBE. Т.е. predefined набор разрешений и частот, прямой доступ к видеопамяти. WPF при этом работает в Rendering Tier 0, т.е. не использует никаких намеков на акселерацию, программно (да, именно через упомянутый вами Reference Rasteriser) формирует фрейм буфер и шлет его напрямую по адресу в памяти. Вот условно в таком режиме отрисовки 20-25 лет назад работало «прыгание» карт в старом пасьянсе, без очистки памяти, просто с добавлением новых данных :)
                                      а вообще разговор пошел ни о чем, в высокоуровневых системах использовать низкоуровневые эффекты вроде того же «прыгания» уже сложно и имеет смысл только для ностальгических ощущений.
            • 0
              16-битный пасьянс это еще хуже. А там бы у них карты проваливались сквозь рабочий стол…
        • +5
          Windows 96?
        • –7
          А я считаю что в Microsoft правы в этом смысле. Долой 32-битные приложения!
          • +5
            Из праздного любопытства: а Вы из какого браузера этот комментарий написали?
            • –2
              Я пишу из Chromium, собранного из исходников на Gentoo x64. Подойдёт в качестве 64-битного?
              • +1
                Вы сидите под двумя акаунтами?
                • 0
                  Никак нет, просто ответил в тему.
            • 0
              Из 32-битного. Но это же не моя проблема, что 64-битного просто хрома просто не существует.
        • 0
          А то, что в поставке 2 версии IE? И по умолчанию x86 версия используется.
          А дублирующий набор библиотек для запуска приложений x86?
          • +1
            Насчёт висты не помню, она прошла мимо меня, а в Win7 x64/2008R2 действительно две версии IE — x32 и x64. с разными ярлыками для запуска.
            • 0
              Кстати вопрос — ЗАЧЕМ?
              • 0
                Не знаю, но Office, 2010 точно есть тоже в дух редакциях. но Msft официально рекомендует использовать х32 версия офиса из за проблем работы плагинов. макросов и прочих дополнений в 64 битной версии
                • 0
                  Ну да, с 64-битным (полгода назад) не умела синкаться ни одна программа. Там этот интерфейс был выпилен насмерть
      • 0
        >Windows 96
        Это когда такой был?
        • +1
          это утекший недорелиз Windows 95 OSR2
      • –5
        At that time они в Microsoft Press как раз выпустили одну книгу…

        Что мешало им самим её прочитать?


        • –3
          Вы, видать, плохо по-русски понимаете. Пинбол — сторонний продукт, написанный индусами.
          • 0
            IE тоже индусами написан. При чём тут они? Не надо ругать работяг.
            • 0
              Вы, видать, тоже по-русски плохо читаете? Или не в ту ветку?
    • +2
      Тем более даже в семёрке достаточно много приложений остались 32-битными.
  • +7
    Да как-то не правдоподобно.

    первое что хотел предложить уже есть в комментариях к оригинальной записи:
    Why not just leave the 32bit version of Pinball in (and run it via WOW64)?


    Детектор коллизий можно было поверх старого написать, а старый выкинуть.
    ДА и отладиться можно было, это же не какая-то утилита, глубоко использующая особенности ОС; возможно ошибка всего в нескольких строках.
    • +10
      Поверх старого? Выкинуть? Там же он пишет, что даже НЕ НАШЛИ этот самый детектор)
      Хотя аргументы против включения чистой 32-биткой версии, действительно, притянуты.
      • 0
        Можно конечно много фантазировать на эту тему, но мне не представляется способ написать код, чтобы невозможно было найти довольно несложный логический функционал. В игре есть мяч — объект, структура, или просто набор переменных, хранящих положение и скорость (возможно и ускорение), в момент коллизий вектор скорости должен изменяться, ставим брейки на изменение этого параметра и находим весь код, отвечающий за это. Если ничего не нашлось, ищем по изменению самих переменных, отвечающих за положение. Что-то может казаться сложным или непонятным (хотя уже на этой стадии сложно представить это). Тогда пишем свой детектор коллизий, непосредственно меняющий переменные «мяча». Отлаживаемся, видим что нам что-то мешает (изменяет значения переменных без видимой причины на то), убираем это «что-то».

        А еще лучше запустить какой-либо автоматизированный детектор 64-bit portability issues и исправить все его предупреждения. Мне почти невозможно представить случай, в котором эту ошибку нельзя было бы исправить за пару дней, если в общем-то при наличии ресурсов (графики и звука, сценария и описания игрового поля) можно переписать программу за неделю.
        • 0
          можно можно писать и не такой код

          сейчас работаю в одном проекте, так у нас лид такой чуши наворотил что я день искал где мне поправить пару UI параметров. код должен был делать фото/видео с камеры под iOS.

          там было порядка 10 классов которые друг от друга наследовались, реализовывали какието бесполезные интерфейсы и так далее. печально
          • 0
            енджой ёр ентепрайс
            у меня такое же чудо с андроидом
        • +1
          Можно только порадоваться о Вашем счастливом детстве. К сожалению, далеко не все могут похвастаться тем, что не сталкивались с кодом, в котором действительно трудно что-то найти.

          Мне приходилось отлаживать достаточно сложный код (написанный, кстати, не индусами), в котором возникали блуждающие Access Violations. Иногда на это уходили недели. Поэтому я тоже не представляю, как написать такой код, но точно знаю, что это возможно.

          Возможности человеческого гения в создании ошибок поистине безграничны. А в исправлении… Как известно, один дурак может задать столько вопросов, что и тысяче мудрецов не разрешить.
          • +1
            Относительно «счастливого детства» боюсь Вы ошибаетесь. Мне вообще очень нравится отлаживаться, особенно там, где другие «опустили руки». Просто одна из распространенных ошибок тех, кто очень долго отлаживается — пытаться понять, что конкретно происходит в коде и почему возникает ошибка. А нужно пытаться понять где и когда. Для этого приходится «мучить» отладчик, иногда писать сложное структурное логирование проходящих данных, применять бисекцию (здесь еще работает, а там уже нет, а что в промежутке?), придумывать некоторые правдоподобные гипотезы, а затем их проверять. Не стесняться делать post-mortem анализ (используя WinDbg или gdb). Но грамотно отлаживаться действительно умеет очень небольшое количество коллег и знакомых, ибо им сложно понять, что чтобы исправить ошибку нужно писать код, довольно много кода, а не нажимать «Rebuild All», полистывая код, в надежде, что проблема уйдет. Да что там, большинство вообще не знает, что за файлик такой pdb зачем-то создается в студии, и уверены, что любой косячный код лучше переписать, а не пытаться править (ибо так быстрее будет, хах).

            Некоторое время работал с кодом, где человек видимо только осваивал паттерны проектирования, пытаясь приткнуть их куда только возможно, а ошибки «гасил» с помощью catch(...) {}. Я даже и не пытался разобраться с тем, чего он хотел, однако работоспособность приложению вернул достаточно быстро.
      • 0
        Скорее всего дело в том, что поручили людям, которые не очень-то любили этот пинболл. И как и любые не слишком мотивированые сотрудники — те почесали репу и сказали: «сделать никак нельзя».
  • +14
    Не верю!
  • +1
    С трудом верится. Все-таки с интерактивным отладчиком наперевес найти детектор коллизий не так трудно. Я, помнится, как-то с этой штукой ядро линукса копал на предмет изучения сетевого стека — да, неприятно — но вполне себе быстро. Код-то весь тут, он в процессе исполнения никуда не спрячется.

    Я уважаю авторов The Old New Thing — знания внутренностей винды действительно колоссальные, многие кейсы очень интересные. Но данная конкретная история нереалистична :).
    • +4
      Ядро Linux написано чрезвычайно понятно и просто, поскольку использует ООП.

      А если писать не структурированно, можно и две строчки кода до неузнаваемости запутать.
      • +1
        А можно поподробнее про ООП в линуксе?
        • +4
          Ну там не все паттерны ООП. например, эмуляция виртуальных методов если мне не изменяет память.
          Вот можно почитать кое-что: lwn.net/Articles/444910/
  • –10
    Ггг. Однозначно в юмор ))
  • +3
    > ещё меньше до сих пор это понимают

    Может там все-таки «более того, до сих пор не понимают»? Или я не так понял?
  • –5
    Единственное, что могло быть пристойное в Висте
  • +4
    И почему у меня ситуация описанная в посте вызывает чуство дежавю? Ах да я же сам с этим сталкивался.
  • +3
    А на какое мыло можно скинуть все советы из топика в microsoft? Глядишь и сделали бы 64 битную версию
  • +17
    Думаю дело было так: программисту поручили переделать очередные 50 приложений на 64-бит за какой то срок. Он скомпилил пинбол и обнаружил проблему с шариком, открыл код и понял что тут ещё конь не валялся, ну и написал своему начальнику что в связи с этой проблемой нужно увеличить сроки. Поскольку начальник того себе позволить не мог (у него и так все сроки горели), то он решил бросить этот пинболл, тем более что под винду и без того есть сотни тысяч игр и среди них множество пинболов. Это же корпорация, конечно в маленькой компании потратили бы время на поиск ошибки, но в корпорации так не делается.
    • +1
      Так и было. Надо было портировать миллионы строк кода. Эксплорер например. А тут какой-то пинбол глючит. На что время тратить?
  • +1
    А по-моему была классная игрушка, у меня отец неплохо в нее играл.
  • +2
    в голове крутится фраза — «Welcome to Maintenance & Support»
    :D
  • +1
    Хм, то-есть это, оказывается, все легенды от МС и Максис — про кодеров-суперпрофи, комментированный код, описанный дизайн, спроектированные интерфейсы…
    • +1
      Есть прилизанные исходники ядра XP и там есть коменты вида:
      int magic_number6578 = 6578 //magic number
      (сами константы типа количества секунд в сутках)
      • +1
        Как по мне ядро, оно обязано работать без сбоев. Лучше определить все заранее, чем потом получить…
        • 0
          Я не говорю, что это плохо. Просто к слову о комментариях в коде МС. Вообще этот код очень интересное чтение, полезно для студентов, видно всякие Legacy-заглушки и подобные вещи. Только не все преподы знают о его существовании, а кто знает, боятся давать: там лицензионное соглашение хитрое, например код нельзя публиковать.
      • 0
        Что-то типа:

        //calculates LatLong value
        int getLatLongValue() { ... }

        ?

        По идее и говнокод, извиняюсь, можно работать безошибочно и предсказуемо. Но как его поддерживать? Я сорцы ядра не смотрел, там «ад в каментах» или нормально, как в MSDN?
        • 0
          Не понял вашего примера.

          Трудно сказать, что там было изначально, потому что код прошёл обработку перед публикацией.
          Там есть такие забавные моменты, есть куски, где очень мало комментариев. Есть функция балансировки бинарного дерева, где на 2 строчки кода 4 строчки комментариев и ASCI-арт объясняющие алгоритм. И пометка в конце, мол Кнут говорит, что это просто.
          • 0
            Я пытался привести комментарий в стиле КО.

            В примерах МСДН неплохие комментарии. Но если, как вы говорите, код обрабатывали, то часть комментариев, скорее всего, убрали.
            • 0
              Примеры в МСДН (там где они есть) сделаны в качестве иллюстрации. Когда я описываю какой-нибудь общий код, протокол в вики, я конечно тоже так делаю.
          • 0
            Автоматически генерённый комментарий. Для прохождения CheckStyle.
      • 0
        Делали рефакторинг средствами IDE, magic number «размагичили» => checkstyle больше не ругается, переименовать забыли.
    • 0
      В Java 1.3 — 1.4 от Sun примеров говнокода куча…
    • 0
      Я так не думаю — просто как вы думаете, сколько людей нужно чтоб написать ось функциональности типа вин7? Понятно что в таком большом колективе найдется место и для гениев и для посредственностей и для быдлокодеров и для новичков.
  • +3
    А русская локализация?
    i.imgur.com/og2Fs.png

    Это больше похоже на:
    Hcp' njnmwem'
    Чем на:
    Игра окончена
    • 0
      Я всё детство думал, что там написано что-то про high score in memory (H вон, j есть, wem какое-то). Вы открыли мне глаза на ужасную правду.
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        А что там было?
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            Ах, это сарказм… А я то думал, что там действительно что-то по делу было.
    • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Автор пинбола сидит наверное сейчас, читает пост с блога майкрософт и ухмыляется =)
    • +1
      Он там отписался в комментах, если что. Информативно и по делу.
      • +1
        Этот, как я понимаю?

        Ah, the quantum tunneling pinball!

        We ran into this while writing the original code at Cinematronics in 1994. Since the ball motion, physics, and coordinates were all in floating point, and the ball is constantly being pushed «down» the sloped table by the gravity vector in every frame, we found that floating point error would gradually accumulate until the ball's position was suddenly on the other side of the barrier!

        (To simplify collision detection, the ball was reduced to a single point/vector and all barriers were inflated by the ball radius. So, if the mathematical point got too «close» to the mathematical line barrier, a tiny amount of floating point rounding or truncation error could push the point to the other side of the line)

        To mitigate that, we added a tiny amount of extra bounce to push the ball away from the barrier when it was nearly at rest, to keep the floating point error accumulation at bay. This became known as the Brownian Motion solution.

        Since much of the original code was written in x86 asm to hand tailor Pentium U/V pipelines and interleave FPU instructions, but wiki says Microsoft ported the code to C for non-Intel platforms, I'm sure the code had passed through many hands by the time it got to you. The Brownian Motion solution may have been refactored into oblivion.
  • 0
    Ну, понятное дело, что перевести на х64 основные компоненты важнее, чем игрушки всякие. Но неужто у них для этих целей не было написано всяких там детекторов 64-битных проблем? Их же вон куча вокруг, и платных и беслатных. Никогда не поверю, что Майкрософт что-то подобное не юзал.
  • +1
    Кстати, в папке C:\Program Files (x86) на 64-битной семёрке:
    Internet Explorer
    Microsoft Analysis Services
    Microsoft Security Client
    Microsoft Silverlight
    Microsoft Sync Framework
    Microsoft.NET
    Reference Assemblies\Microsoft
    Skype
    Windows Defender
    Windows Live
    Windows Mail
    Windows Media Player
    Windows NT
    Windows Photo Viewer
    Windows Portable Devices
    Windows Sidebar
    • +1
      Причем большая часть списка не является компонентами системы. А остальные так же присутствуют и в папке C:\Program Files
      • –1
        Всё от Microsoft
  • +5
    К сожалению русский перевод утаил от нас самое интересное — в комментариях — отвечает оригинальный разработчик игры:

    Ah, the quantum tunneling pinball!
    We ran into this while writing the original code at Cinematronics in 1994. Since the ball motion, physics, and coordinates were all in floating point, and the ball is constantly being pushed «down» the sloped table by the gravity vector in every frame, we found that floating point error would gradually accumulate until the ball's position was suddenly on the other side of the barrier!
    (To simplify collision detection, the ball was reduced to a single point/vector and all barriers were inflated by the ball radius. So, if the mathematical point got too «close» to the mathematical line barrier, a tiny amount of floating point rounding or truncation error could push the point to the other side of the line)
    To mitigate that, we added a tiny amount of extra bounce to push the ball away from the barrier when it was nearly at rest, to keep the floating point error accumulation at bay. This became known as the Brownian Motion solution.
    Since much of the original code was written in x86 asm to hand tailor Pentium U/V pipelines and interleave FPU instructions, but wiki says Microsoft ported the code to C for non-Intel platforms, I'm sure the code had passed through many hands by the time it got to you. The Brownian Motion solution may have been refactored into oblivion.
  • –3
    — Степан! В висте пинболл сломался.
    — Вижу, барин. Детектор столкновений. Либу для флоатинг пойнтов заврапить надо.
    — За сколько сделаешь?
    — За день сделаю.
    — А за два?
    — Ну… За… Сделаем и за два.
    — А за пять дней?
    — Ну, ежели постараться — можно и за пять.
    — А за десять?
    — Ну, барин, ты задачи ставишь! За десять дён одному не справиться, тут помощник нужен — хомо сапиенс!
    — Бери помощников, но чтобы не раньше!
  • –2
    Очень странно для такой простой игры и миллион строк кода… верится с трудом.
    • 0
      Не для игры, а для Windows в целом.
  • 0
    Вообще в Микрософте его изначально испортили. Оригинальная версия Cinematronics Full Tilt! Pinball была гораздо более логична в плане системы уровней и бонусов. Некоторые штуки просто перестали работать, когда его Микрософт загрёб.

    Плюс в оригинальной было три разных поля.
    • 0
      Вы путаете. Full Tilt появился позже как развитие Space Cadet.

      И уж тем более ничего Microsoft в этой игре не меняли — написано же, никто даже не пытался разобраться в её коде.
      • 0
        Ну да, рассказывайте. Cinematronics её оригинально разработал и выпустил ещё до Microsoft Plus! for Windows 95. Почитайте хотя бы в вики.
        • +1
          Вы сами-то в вики читать пробовали?
          Microsoft Plus! for Windows 95 вышел в августе 1995.
          Full Tilt! Pinball вышел в марте 1996.

          Из воспоминаний разработчика в комментах к оригинальному посту, о лицензировании Space Cadet для Microsoft:
          we were more interested in the exposure and didn't see much revenue from it. However, it did lead to our relationship and eventual acquisition by Maxis.

          Таким образом, Full Tilt был выпущен Maxis (а не Cinematronics самой по себе!) в результате включения Space Cadet в Microsoft Plus!
    • 0
      а эта оригинальная игрушка хотя бы под xp работает? Достать ее где-то можно?
      • 0
        Не знаю, есть ли она в XP (вроде да), а в NT4 была, так что можно выковырять из NT4.
      • 0
        Работает и скачать можно. По крайней мере, я когда-то где-то скачал. Поищите.
  • 0
    Скрепыш из офиса пропал по той же причине, интересно?
    • 0
      Нет. Его устранили путём «голосования»
  • 0
    Удивляет вот что: на любой машине с 64-битной Windows куча 32-битных программ, отдельная папка Program Files для них, даже Internet Explorer по-дефолту 32-битный, и Офис рекомендуется (извините, уже не помню где) ставить 32-битный, и одно только введение папки WoW64 свидетельствует об отсутствии намерения делать 64-битные винды полноценной «расово чистой» 64-битной системой. А Пинбол 32-битный положить побрезговали.
      • 0
        Отличная заметка! Только он упустил еще то, что для 64 битный msi по умолчанию запускается 64 битный msiexec, но вот например powershell все-равно по умолчанию идет 32 битный.
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    А функцию Beep для воспроизведения звука тоже убрали по подобным причинам из x64?
    • 0
      Как убрали? У меня в семерке есть она прада пикает не спикер, а центральный канал акустики.
      • 0
        У вас точно x64?
        Вот здесь и здесь пишут что в x64 не работает beep. Собственно не работает он у меня и на Win8 x64.
        • 0
          неа, у меня х32.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.