Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 19 мар 2024, 16:00

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 27 мар 2012, 18:24 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Ищу единомышленников для совместного проекта — порта игры "Dark Woods" на язык Оберон-2 для платформы ZX Spectrum. Проект задумывается как некоммерческий, с открытыми исходниками. Главная цель — получить удовольствие от общения и совместной разработки, а также поспособствовать росту популярности языка Оберон в Спектрум- и не-Спектрум кругах.

Ссылки:
http://jockethebeast.phatcode.net/darkwoods.shtml
http://jockethebeast.phatcode.net/darkwoods2.shtml
Исходники порта Dark Woods 2 на FreeBasic:
http://jockethebeast.phatcode.net/DarkWoods2_FreeBasicPort_R1.zip
Dark Woods 2 в графическом исполнении:
http://jockethebeast.phatcode.net/gfxwoods.zip

План-минимум: сделать как можно более точную копию игры "Dark Woods 2" для Спектрума.

План-максимум: нарастить это дело графикой, анимацией, музыкой, перенести на другие языки (C, Pascal, Java) и ряд других платформ: (Win32, Linux, J2ME, A2 — BlueBottle, Android). В процессе разработки игры выработать логику кроссплатформенных и кроссъязыковых библиотек (между Спектрумом и другими платформами): графика, звук, музыка, ввод-вывод.

Возьмусь делать: Оберон-кодинг (высокий уровень); Z80-асм-кодинг (низкий уровень); возможно, порты на другие языки и платформы; тестирование; обслуживание хостинга и рекламное продвижение.

Не возьмусь делать: заставку, графику/шрифты, музыку и звуки для AY/Beeper. А хочется, по возможности, точно такого же звука, как в оригинальной игре.

Темп проекта предполагаю скорее медленный и вдумчивый, даже с перерывами, чем гонку-спешку куда попало. Важней не сроки, а качество порта. Ещё учитывайте, что я человек за 30, занят множеством направлений деятельности и женатый. :) Так что не обещаю отдавать проекту 24 часа в сутки. Впрочем, как пойдёт.

Проблемы: исходный вариант расчитан на экран 40x25 символов. Чтобы не эмулировать это разрешение, при этом не лишившись цветности, придётся помудрить:

    a) втиснуть всё в 32x24;
    b) сделать горизонтальную прокрутку.

На каком варианте лучше остановиться — не знаю. Можно реализовать оба и посмотреть, как будет выглядеть лучше.

Кстати, разработка такой игры — это прекрасная возможность начать создание более общего Оберон-модуля Console для ZX Spectrum, определиться на практике что туда может войти и как лучше всё организовать.

Несмотря на такие заверения в моей полной кодерской направленности, мне будет интереснее найти не Gfx-мейкера, а кодера, который заинтересуется как игрой "Dark Woods", так и направлением “ZX+Оберон”.

Мой интерес — поиск внутренней мотивации и стимулов для доведения проектов до готовности в процессе общения с интересными людьми. Ваш возможный интерес — перенять опыт разработки на Обероне, получить удовольствие от общения в процессе коллективного творчества, повышение уровня способности работать в команде. Желательно также ваше умение работать с системой контроля версий Git. Или желание этому научиться. Это серьёзно облегчает труд.

Взаимодействие: форум, ICQ, Jabber, e-mail, Git, мобильник (по Украине). Skype исключается.

P.S. Портировать игру водиночку здорово скучно, а взаимодействие с целью воплощения совместной идеи такого рода привлекает.


Вложения:
dw201.gif
dw201.gif [ 2.59 КБ | Просмотров: 33339 ]
darkw02.gif
darkw02.gif [ 10.4 КБ | Просмотров: 33339 ]
darkw01.gif
darkw01.gif [ 9.46 КБ | Просмотров: 33339 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 28 май 2013, 18:53 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
В качестве отдыха от "фористики" взглянул на эту игру. :D
Цитата:
Проблемы: исходный вариант расчитан на экран 40x25 символов. Чтобы не эмулировать это разрешение, при этом не лишившись цветности, придётся помудрить:
a) втиснуть всё в 32x24;
b) сделать горизонтальную прокрутку.
Само игровое поле 30х15+рамка с каждой стороны=32х17 -вот это главное. По бокам от этого поля ничего не выдается, это пространство можно просто отбросить.
На оставшихся строках размещены игровые показатели и подсказки по клавишам - это вполне можно втиснуть в 7 строк экрана (и чуть сжать по горизонтали). Даже по рисунку видно, что можно сдвинуть надписи вправо и на пару символов прижать друг к другу, чтобы уместились точно под 32-символьным игровым полем.
В результате получим: игровое поле на 100% совпадает с оригиналом, надписи почти совпадают (отличия не существенны). Горизонтальную или вертикальную прокрутку делать незачем.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 28 май 2013, 19:02 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Справедливое замечание. :)

Кстати, данная игра могла бы послужить стимулом для разработки кроссплатформенных библиотек MS-DOS - Windows - Spectrum. Например, поскольку не все символы в игре алфавитно-числовые, то ясно, что нужен тайловый аппарат, а также универсальный интерфейс для управления (клавиатура, сенсор, мышь). Для WinDev нужно консольку сэмулировать графическими средствами (на SDL, например). В итоге получится полезный пример, выгодно показывающий большую кроссплатформенность и ясность кодинга на Обероне. :)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 05 июн 2013, 14:18 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Вот, впечатлился мастерством прорисовки тайлов 8x8, было бы хорошо связаться с человеком, ему бы наверное понравилась идея сделать Dark Woods для ZX менее текстовым, более графическим.

http://www.worldofspectrum.org/forums/showthread.php?t=43138


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 05 июл 2013, 15:51 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Приступил к работе над игрой в одиночку. Работать над библиотеками всяко приятнее, когда держишь в голове какой-то прикладной проект, так что попутно дорабатываю и библиотеки. Под контроль версий ещё не поместил. Пока сделал только заставку первого DWoods. Привожу основной код:
Код: "OBERON"
  1. MODULE SemiAction;
  2. IMPORT
  3. Scr := Console, Til := GrTiles, Fonts := GrFonts,
  4. Rsrc := DW2Rsrc, Cfg := DW2Config;
  5.  
  6. CONST
  7. TitleX = Cfg.TitleX;
  8. TitleY = Cfg.TitleY;
  9. FrameX = Cfg.FrameX;
  10. FrameY = Cfg.FrameY;
  11. FrameWidth = Cfg.FrameWidth;
  12. FrameHeight = Cfg.FrameHeight;
  13. DarkWoodsX = Cfg.DarkWoodsX;
  14. DarkWoodsY = Cfg.DarkWoodsY;
  15. JockeX = Cfg.JockeX;
  16. JockeY = Cfg.JockeY;
  17.  
  18. PROCEDURE MainMenu* ;
  19. VAR
  20. cor: Til.Coords;
  21. BEGIN
  22. Scr.Clear(Scr.Black);
  23. Scr.SetFont(Fonts.ZxSpecRom8x8);
  24.  
  25. IF Cfg.DarkWoods1 THEN
  26. Scr.SetColors(Scr.GrayOnBlue); Scr.WriteStr(" DarkWoods Port ");
  27. Scr.SetColors(Scr.BlueOnCyan); Scr.WriteStr(" VEDAsoft '2013 ");
  28. ELSE
  29. Scr.SetColors(Scr.GrayOnBlue); Scr.WriteStr("DarkWoods 2 Port ");
  30. Scr.SetColors(Scr.BlueOnCyan); Scr.WriteStr(" VEDAsoft '2013");
  31. END;
  32.  
  33. Scr.SetFont(Fonts.MsDosCga8x8);
  34.  
  35. IF Cfg.DarkWoods1 THEN (* "DarkWoods 1" title: *)
  36.  
  37. Scr.SetColors(Scr.GreenOnGreen);
  38. Scr.At(2 + TitleX, 0 + TitleY); Scr.WriteStr(" ");
  39. Scr.At(1 + TitleX, 1 + TitleY); Scr.WriteStr(" ");
  40. Scr.At(4 + TitleX, 1 + TitleY); Scr.WriteStr(" ");
  41. Scr.At(8 + TitleX, 1 + TitleY); Scr.WriteStr(" ");
  42. Scr.At(0 + TitleX, 2 + TitleY); Scr.WriteStr(" ");
  43. Scr.At(1 + TitleX, 3 + TitleY); Scr.WriteStr(" ");
  44. Scr.At(3 + TitleX, 4 + TitleY); Scr.WriteStr(" ");
  45. Scr.At(6 + TitleX, 4 + TitleY); Scr.WriteStr(" ");
  46. Scr.At(3 + TitleX, 5 + TitleY); Scr.WriteStr(" ");
  47. Scr.At(3 + TitleX, 8 + TitleY); Scr.WriteStr(" ");
  48. Scr.At(4 + TitleX, 9 + TitleY); Scr.WriteStr(" ");
  49.  
  50. Til.DrawMonoTile(FrameX, FrameY, Rsrc.CornerLeftUp, Scr.GreenOnBlack);
  51. Til.DrawMonoTile(FrameX + FrameWidth - 1, FrameY,
  52. Rsrc.CornerRightUp, Scr.GreenOnBlack);
  53. FOR cor := FrameX + 1 TO FrameX + FrameWidth - 2 DO
  54. Til.DrawMonoTile(cor, FrameY, Rsrc.HorizontalLine, Scr.GreenOnBlack);
  55. Til.DrawMonoTile(cor, FrameY + FrameHeight - 1,
  56. Rsrc.HorizontalLine, Scr.GreenOnBlack);
  57. END;
  58. FOR cor := FrameY + 1 TO FrameY + FrameHeight - 2 DO
  59. Til.DrawMonoTile(FrameX, cor, Rsrc.VerticalLine, Scr.GreenOnBlack);
  60. Til.DrawMonoTile(FrameX + FrameWidth - 1, cor,
  61. Rsrc.VerticalLine, Scr.GreenOnBlack);
  62. END;
  63. Til.DrawMonoTile(FrameX, FrameY + FrameHeight - 1,
  64. Rsrc.CornerLeftDown, Scr.GreenOnBlack);
  65. Til.DrawMonoTile(FrameX + FrameWidth - 1,
  66. FrameY + FrameHeight - 1, Rsrc.CornerRightDown, Scr.GreenOnBlack);
  67. Scr.SetColors(Scr.GreenOnBlack);
  68. Scr.At(0 + DarkWoodsX, 0 + DarkWoodsY); Scr.WriteStr("D A R K");
  69. Scr.At(3 + DarkWoodsX, 2 + DarkWoodsY); Scr.WriteStr("W O O D S");
  70.  
  71. Scr.SetColors(Scr.BlueOnBlack);
  72. Scr.At(2 + JockeX, 0 + JockeY); Scr.WriteStr( "Jocke The Beast");
  73. Scr.At(0 + JockeX, 1 + JockeY); Scr.WriteStr("-----------------");
  74. Scr.At(4 + JockeX, 2 + JockeY); Scr.WriteStr( "(C) 2002");
  75.  
  76. Scr.At(Cfg.MenuLineX, Cfg.MenuLineY);
  77. Scr.SetColors(Scr.CyanOnBlack); Scr.WriteStr("(P)");
  78. Scr.SetColors(Scr.MagentaOnBlack); Scr.WriteStr("lay ");
  79. Scr.SetColors(Scr.CyanOnBlack); Scr.WriteStr("(I)");
  80. Scr.SetColors(Scr.MagentaOnBlack); Scr.WriteStr("nstructions ");
  81. Scr.SetColors(Scr.CyanOnBlack); Scr.WriteStr("(Q)");
  82. Scr.SetColors(Scr.MagentaOnBlack); Scr.WriteStr("uit");
  83.  
  84. ELSE (* "DarkWoods 2" title: *)
  85.  
  86. END;
  87.  
  88. END MainMenu;
  89.  
  90. END SemiAction.


Вложения:
DarkWoodsDOS.png
DarkWoodsDOS.png [ 6.35 КБ | Просмотров: 32027 ]
DarkWoodsZX.png
DarkWoodsZX.png [ 3.6 КБ | Просмотров: 32027 ]
DWoods.tap [1.9 КБ]
Скачиваний: 1313
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 05 июл 2013, 21:56 
Не в сети

Сообщения: 104
great start
good luck


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 05 июл 2013, 22:15 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Thanks!

As you see, now the Oberon code is very compact here. All title is ~1.9 Kb, but about a half of this - a font (768 bytes).


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 06 июл 2013, 01:21 
Не в сети

Сообщения: 104
yes SDCC seems very optimized


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 31 авг 2013, 11:08 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Дошли наконец-то руки сделать публичный репозиторий для начатого мною порта игры Dark Woods. Если будете изучать исходники, обратите внимание на то, что модуль DarkWoods.Mod внутри DarkWoods/Win32/Mod в точности такой же, как и в DarkWoods/ZxSpec/Mod. На этом примере показано как реализовать игру с одного исходника (без макропроцессора). А поскольку мир не идеален, и винда со спектрумом — платформы довольно разные, для сокрытия этого в коде пользовательского уровня есть конфигураторы компонентов (в виде *.h заголовков; позволяют тонко настроить различные свойства низкоуровневых библиотек), а также модуль-ядро DWoods2.Mod, в который вынесены платформенно-зависимые моменты. И это нормальное решение, ибо предложенные "мэйнстримом" кроссплатформенные решения на деле оказываются вовсе не такими уж и кроссплатформенными (есть известные проблемы, например, с различными разрешениями экрана и т.п.), то, думаю, такая схема построения софта ещё покажет себя в действии.

Прошу желающих присоединиться к проекту. :)

Буду рад также оказать помощь и поддержку людям, которые выберут XDev в качестве средства разработки для портирования игры на язык Оберон под различные платформы (или для других целей). Вероятно, следует обозначить стратегию развития среды XDev как "MakeYourWishWare". И хотя google translator переводит это как "Сделать продовольственный Шиш" ;) имеется в виду: "исполни своё желание сам" или "добавь всё, что тебе потребуется". Честный путь развития Linux. Если вам такое по душе (а Обероны поощряют такой путь, ибо инструментарий можно развивать на всех уровнях (вплоть до самого нижнего — это тотальный контроль процесса разработки)), то милости просим. Другого ничего, увы, предложить не могу. :)


Вложения:
DarkWoodsWin32.png
DarkWoodsWin32.png [ 10.22 КБ | Просмотров: 32027 ]
DarkWoodsZX.png
DarkWoodsZX.png [ 11.89 КБ | Просмотров: 32027 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 09 дек 2013, 01:20 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Реализовал менюшки (I)nstructions и (Q)uit. Точность порта для Спектрума несколько страдает из-за платформенных особенностей, но зато удалось собрать снапшот игры для Win64, правда, польза в этом пока что больше теоретическая, но радует сама возможность.

Попутно вдохновился интерфейсом модуля Input, который описан и в Дубовых требованиях. Получилось конечно слегка не то, что я планировал с самого начала (универсальный модуль для ввода, работающий с любыми устройствами ввода), но и так неплохо. Сам модуль Input, как это можно предположить, развивался по мере повышения к нему требований. Сначала от него хотели только ввод печатных символов, потом комбинаций и прочее. Он слегка стеснён рамками типа CHAR (который хоть и может хранить непечатные символы, но всё-таки предназначен не для них). Я расширил модуль, исходя из своих нужд, даже сделав его несовместимым. Но это не страшно, потом сделаю обёртку и назову её OakInput, а пока что пары этих процедур, как я прикинул, хватит для реализации Dark Woods:
Код: "OBERON"
  1. DEFINITION Input;
  2.  
  3. (* Константы, описывающие кнопки, опущены *)
  4.  
  5. TYPE
  6. Key = CHAR;
  7.  
  8. PROCEDURE Available (): INTEGER;
  9. PROCEDURE Read (): Key;
  10.  
  11. END Input.
Тип Key здесь хоть и реализован на базе CHAR, но хочет своим именем показать, что он вовсе не ограничивается только печатными символами. Пока нет поддержки русского ввода, в остальном же модуль сделан по образу и подобию своего батьки — поддерживает буферизованный ввод (не реализован для Спека, но это возможно в будущем на базе режима IM 2), ввод как строчных, так и заглавных, некоторые (не все!) служебные кнопки также поддерживаются (курсорные клавиши, Backspace, Delete, Enter, Escape, Tab и т.д. Не все эти клавиши есть на Спектруме, поэтому назовём модуль условно-расширяемо-совместимым. Всё можно урегулировать конфигуратором).

Так что сознательно отхожу от типа CHAR в пользу его алиаса Key (подтверждает возможность ввода не только печатного символа, но и кода кнопки; будет требоваться точность при проверке ввода) и от изначального варианта процедуры Read (VAR ch: CHAR), потому что не вижу никаких преимуществ от такого решения. Наоборот, мой вариант позволяет обойтись в ряде случаев без переменной, в отличие от батьки. :)
Код: "OBERON"
  1. LOOP
  2. CASE CAP(Input.Read()) OF
  3. | "P": (* Играем! *) EXIT
  4. | "I": ShowIntro; EXIT
  5. | "Q": IF QuitMenu() THEN RETURN END; EXIT
  6. ELSE
  7. END;
  8. END; (* Обошлись без переменной типа Key,
  9.   которая была бы обязательна для "Дубового" варианта Input.Read *)
Все наработки по игре на данный момент залиты в репозиторий. Прикрепляю для интереса Спектрумный вариант — весит 7 Кб, но там много неупакованного текста. :)


Вложения:
DWoods2.tap [6.84 КБ]
Скачиваний: 1135
DWoods.png
DWoods.png [ 15.51 КБ | Просмотров: 31990 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club