Перейти к содержимому

Сообщений в теме: 72
Фотография

Fallout 2 - Reference Edition: Изучаем и улучшаем движок игры

Fallout 2 RE Reverse engineering Улучшение Изучение Движка Reference Edition

#1 Jordan

Jordan

    Выживший

  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 14 Май 2022 - 17:39

Fallout 2 - Reference Edition 

Приветствую.

 

Некоторое время назад, юзер alexbatalov, на своем гитхабе опубликовал декомпилированный код оригинального движка fallout 2 на си.

 

Сам проект.

https://github.com/a...lov/fallout2-re

 

Собственно, и че?

Отвечаю, скомпилировав данный код, возможно собрать оригинальный двиг и играть. Сам автор написал, что еще не перенесено 5% функционала.

 

Игра запускается, и частенько багует, автор исправляет ошибки и полирует код.

 

Я предлагаю, в данной теме обсуждать идеи по изменению кода, возможно добавление нового функционала.

На данный момент, у меня получилось собрать двиг под MSVC 2022, но для этого пришлось физически добавить библиотеки zlib и fpattern. Изменить файл сборки. С zlib получилось немного костыльно, требуется поправить данный вариант.

 

Как решу проблему со сборкой, сделаю форк и опубликую на гитхабе. Я могу конечно сделать коммит включающий zlib код, но думаю, автор отклонит.

 

Ставлю первую задачу для себя.

Сделать запуск игры в окне. Игра юзает старый directx захватывающий эксклюзивный режим экрана. Мои попытки изменить инициализацию directx не дали плодов. Пока экспериментирую.

 

Двиг интересен для изучения функционала игры. С++ пока не возможно использовать для разработки, но я уверен, со временем решим данную проблему.

 

Исходники открывают, все двери к модификации игры, это перенос нативно в Linux с помощью библиотеки SDL2. Добавление новых форматов, png изображений, 32 битный цвет. Нативные высокие разрешения экрана. Изменение геймлея, и чего угодно. Но это будет возможно, после погружения в суровый си код. В принципе код не так страшен.

 

Жду бурного обсуждения. 

 

Ну а пока погружусь сам в изучение движка.

добавлено позже

Написал автору, сможет ли он принять коммит, добавляющий файлы zlib и fpattern. Все же хотелось бы работать с одним источником. Пока идет полировка кода, наименование функций, структур могут меняться и при обновлении форка могут возникать конфликты.

 

Сообщение

https://github.com/a...t2-re/issues/59


  • DeKRuS это нравится


#2 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 14 Май 2022 - 18:37

Джордан ты как только что из лесу вышел) Код движка давно изучен и лежит в базе IDA (только рекомпилировать нельзя).

 

Последние 5-10 лет не замечал от тебя ни какого рвения по добавлению нового функционала в фоллаут в sfall.

 

Все что необходимо уже добавлено в sfall, и необходимые доработки/улучшения можно делать внутри sfall.

 

Ты это подожди сейчас у тебя пройдет эйфория от конфетки в  виде исходников - и все будет как прежде, нужно просто переждать))) 

добавлено позже

с помощью библиотеки SDL2

говнище а не библиотека. пример этого говнища можно видеть на примере того заброшенного движка на букву F - где в режиме дебага я получил пошаговую стратегию в 5-10фпс на пне4.

в релизе максимум было в районе 30-40 - против до 1000 у ванильного фола.

на эту проблему еще указывал фобос что двиг получился тормозной для стареньких компов. 


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#3 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 14 Май 2022 - 18:52

Джордан ты как только что из лесу вышел) Код движка давно изучен и лежит в базе IDA (только рекомпилировать нельзя).

 

Я простой богобоязненный программист на C#. Мне эти ваши хексы и смещения непонятны))

 

Последние 5-10 лет не замечал от тебя ни какого рвения по добавлению нового функционала в фоллаут в sfall.

Сорь не знал, что нужно каждый год было отмечаться в журнале посещений и модификаций фаллоута))

Я больше скажу наверно лет 13-14 не занимался моддингом.

 

Все что необходимо уже добавлено в sfall, и необходимые доработки/улучшения можно делать внутри sfall.

Sfall вещь хорошая, но когда есть непосредственно исходники, лучше. Добавление фич легче, не нужен ассемблер, смещения в движке и т.д

 

Ты это подожди сейчас у тебя пройдет эйфория от конфетки в  виде исходников - и все будет как прежде, нужно просто переждать))) 

Исходники фола, даже на суровом декомпилированном си это клево))

 

говнище а не библиотека. пример этого говнища можно видеть на примере того заброшенного движка на букву F - где в режиме дебага я получил пошаговую стратегию в 5-10фпс на пне4. в релизе максимум было в районе 30 - против до 1000 у ванильного фола. на эту проблему еще указывал фобос что двиг получился тормозной для стареньких компов. 

 

Фол юзает просто бэк буффер памяти и все картинки копируются на нее. SDL2 создает текстуры, на каждый кадр анимации, после чего покадрово воспроизводит. Еще в SDL2 нет пулов памяти, для SDL_Surface. Да есть проблемы для 2D.




#4 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 14 Май 2022 - 19:15

Тут подумалось: А не придет ли завтра Беседа и не попросит ли прикрыть "ваши" исходники - так как это по сути дизассеблирование + прямое копирование и выкладывание кода в открытый доступ.

добавлено позже

Я простой богобоязненный программист на C#. Мне эти ваши хексы и смещения непонятны))

а что ты тогда забыл в СИ ))


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#5 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 14 Май 2022 - 19:19

В России сейчас с этим проще. Объявляем принудительную лицензию и юзаем как хотим) Вообще на изи))

У забугорников только с этим проблемы.

добавлено позже

А чё это ты так скромненько выделил ваши исходники?) Что можно скопировать, уже наше)
  • QweSteR и Mr.Сталин это нравится


#6 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 14 Май 2022 - 19:37

Sfall вещь хорошая, но когда есть непосредственно исходники, лучше. Добавление фич легче, не нужен ассемблер, смещения в движке и т.д

У тебя не правильное или устаревшее предоставление об организации sfall.

Сейчас в sfall можно писать код на c++, а хак в exe делается только как точка входа из exe в код сфала - все просто как два пальца.

По этому я не вижу смысла в этих рекомпилированных исходниках - ну а как референс для вставки кода в sfall годится.

добавлено позже

Ладно разбирайся с исходниками, для меня там все равно ничего нового нет.

 

Кстати попробуй расширить структуру игрового объекта Object - это единственное, что нельзя сделать в sfall (без полной рекомпиляции), добавишь новые поля для для чего нибудь нового.


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#7 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 14 Май 2022 - 19:52

У тебя не правильное или устаревшее предоставление об организации sfall.
Сейчас в sfall можно писать код на c++, а хак в exe делается только как точка входа из exe в код сфала - все просто как два пальца.
По этому я не вижу смысла в этих рекомпилированных исходниках - ну а как референс для вставки кода в sfall годится.

добавлено позже

Ладно разбирайся с исходниками, для меня там все равно ничего нового нет.

Кстати попробуй расширить структуру игрового объекта Object - это единственное, что нельзя сделать в sfall (без полной рекомпиляции), добавишь новые поля для для чего нибудь нового.

С sfall мы намертво прибиты к оригинальному екзешнику игры. И это реальный стопор.

Попробую расширить, но у меня есть предположение, что так как просто файлы хранятся в бинарном формате. Возможно что где то зашито fread sizeof(object). Как буду вечером у ноутбука, посмотрю.


#8 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 14 Май 2022 - 20:07

С sfall мы намертво прибиты к оригинальному екзешнику игры. И это реальный стопор.

согласен.

но переносить код sfall в исходники еще рановато - да и си код этих исходников черт подери напрягает, а переписывать дохрена надо, имена функции не соответствуют оригинальным названиям, этот чел что все это время в подвале сидел и не видел что давно была выложена нормальная IDА база с исходниками.


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#9 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 14 Май 2022 - 20:22

согласен.
но переносить код sfall в исходники еще рановато - да и си код этих исходников черт подери напрягает, а переписывать дохрена надо, имена функции не соответствуют оригинальным названиям, этот чел что все это время в подвале сидел и не видел что давно была выложена нормальная IDА база с исходниками.


По мне так на си все очевидно, минимум абстракций. Код реально читаем.

Не знаю где этот парень сидел, но он сделал отличную работу.

Переименовать мы и сами можем. Сейчас современные IDE функциональны.

Проблема с исходниками в глобальных переменных. Видел наверно extern var. И так по всему коду. Тяжко отлаживать.

добавлено позже

Сейчас главное сделать фол в окне. И есть подвижки для C++. Может весь код обернуть extern C {}

добавлено позже

Все таки плюс языка си прямолинейность Что написано, то и делает.


#10 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 15 Май 2022 - 00:00

Все таки плюс языка си прямолинейность Что написано, то и делает.

А что другие, если написано то делают что-то другое?)) может читать просто не умеем.

По факту пока имеем код лапшу.


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.

  • Chief это нравится


#11 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 15 Май 2022 - 00:42

А что другие, если написано то делают что-то другое?)) может читать просто не умеем.
По факту пока имеем код лапшу.


Спокойно товарищ, все умеем и как надо, читать и понимать. Код лапша, есть немного. Самая жуть это конечно интерпретатор. 6k строк отборной лапшы))
Меня больше напрягает графическая часть, код инициализации графики, особенно части directx. Ппц как запутано.
Нет другого кода. Как говорится что есть, то есть.
Понятно, что нет цели чик чик и в продакшн. Потихоньку перетягиваь функционал sfal'а в двиг. Но для этого нужно, конвертнуть исходники для компиляции С++.

добавлено позже

У меня есть желание вручную исправить все ошибки при компиляции С++ компилятором. Но мне нужен конечный вариант исходников. А то вложишь силы и время сделаешь. Функции переименуют, добавятся файлы и хрен смержишь.


#12 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 15 Май 2022 - 02:26

У меня есть желание вручную исправить все ошибки при компиляции С++ компилятором. Но мне нужен конечный вариант исходников.

Да куда ты спешишь там еще 50% (а то и больше) кода надо приводить в удобоваримый вид, переменным не даны имена одни V##


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#13 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 15 Май 2022 - 09:38

Добавление полей в Object поломает совместимость с proto файлами. Добавление и изменение структур персонажей, предметов, учитывается при чтении и записи proto файлов. После перевода proto файлов в тексовый формат, возможно будет безопасно расширять данные структуры.

добавлено позже

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

добавлено позже

В принципе это не критично, просто требуется обработать напильником :)




#14 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 15 Май 2022 - 20:25

Предлагаю информацию о характерихстиках криттеров, предметов, тайлов и сценери хранить в бд sqlite.

Возможно и текст лучше хранить в бд.

Плюсы очевидны. Легко массово изменять характеристики простыми запросами update. Читать select. Можно делать любые выборки по критерию. Легко создавать новые таблицы, специфичные настройки для геймплея.

Минусы нужно чуть подучить sql, как бекенд разработчик скажу, что сложного в языке запросов нет. Упраздняются форматы протофайлов, msg, ini файлы для настройки случайных встреч.

Sqlite можно просто вкомпилить в движок, написать удобное api. Загрузить криттера просто select * from critters. И заполнить полученными данными структуру critter в движке.

Думаю, что идея не плохая.

добавлено позже

Уточню, ни все могут понимать о чём я говорю.

Sqlite это встраиваемая файловая реляционная база данных. Бд это просто бинарный файл, позволяющий хранить любую информацию. Язык запросов использует sql, как редактор можно взять dbeaver.


#15 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 15 Май 2022 - 22:30

Добавление полей в Object поломает совместимость с proto файлами.

Добавлять надо в конец структуры.

Может ты куда-то не туда добавил, при чем тут протофайлы - я о структуре которая хранится в памяти во время игры и которая сохраняется в карте при сохранении игры.

Хотя может ты движок еще игры не знает.


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#16 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 17 Май 2022 - 16:50

Добавлять надо в конец структуры.

Может ты куда-то не туда добавил, при чем тут протофайлы - я о структуре которая хранится в памяти во время игры и которая сохраняется в карте при сохранении игры.

Хотя может ты движок еще игры не знает.

 

Таки да. Как оно в движке устроено, информации в моей голове крохи. Изучаю пока реверснутый движок.




#17 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 17 Май 2022 - 17:39

Мини план на будущее, хочу зафиксировать в каком направлении хотел бы развивать двиг. 

Видение, как бы я хотел улучшить внутреннюю структуру движка.

 

1. proto файлы, map - карты перевести в текстовый формат. json или xml  

Данное изменение позволит отвязать двиг от работы с бинарными файлами и позволит редактировать текстовые файлы другими редакторами. Так же это упрощает парсинг. Позволяет легко добавлять новые атрибуты и расширять формат.

 

2. Убрать из форматов привязку к id. К примеру у тайла есть прототип с его настройками, при загрузке карты, загружается proto.lst и уже по id(номер строки) получает имя файла, и уже загружает прототип. В данных файлах прописывать полное имя, на которое ссылается тайл. В картах тоже указывать не id а имя файла.

Данное изменение упростит добавление новых прототипов и карт. Ресурсов, графики, звуков. Важно обеспечить, что бы движок не лазил в файл регистрации, где бы вычитывал соответствие id -> имя файла. 

Данную концепцию применить ко всем возможным форматам игры. При добавлении города, нужно просто в каталог maps добавить файл NewBestMyMap.json(содержит в себе не только карту, но и координаты на карте, точки перехода), движок при загрузке вычитывает весь каталог карт.

 

3. Разделить прототипы на два файла, proto/critter/base/jordan.json - базовые характеристики(значение стато и скилов), proto/critter/view/jordan.json - имя анимации персонажа.

Возможно добавить возможность наследования статов и скилов. Есть базовый файл кротокрыса, на его основе хотим создать другого более выносливого, можем добавить в текстовый файл имя базового файла + модификатор к примеру здоровья +30%. В итоге Если у базового кротокрыса было 100 hp в новом будет 130.

 

4. Продумать систему модулей для объединения модов. Что бы модули не заменяющие другие файлы, могли работать вместе. Типа как в в играх беседки. Но пока технически не представляю как.

 

5. Возможно заменить встроенные скрипты ssl на lua. Но для совместимости переконвертировать старые скрипты в lua. (Это явно не в первую очередь)

 

6. Мелочи, типа поддержка локализаций из коробки, если у нас картинка с названием на русском, а другая на английском, то лежать они будут по таким путям, art/scenery/russian/my.frm и для английского art/scenery/english/my.frm В зависимости от выбранного языка в настройках, будет загружаться определенный файл. И так для всех ресурсов, звуки, тексты, графика, субтитры для видеороликов, звуковые дорожки.

 

7. Отвязать двиг от винды, и портировать под linux.(SDL2, SFML) 

Плюсом даст, поддержку современных форматов изображений(png, jpeg) Звук (mp3, ogg), Видео.

 

8. Добавить нативные высокие разрешения экрана + 32 битный цвет картинке. Пусть старые фрм остаются в своем качестве, но новые форматы типа png и jpeg будут в 32 битном цвете.

 

9. Новый формат анимации. png + json с описанием кадров.

 

Это уже совсем будущее.

Далее понятно запилить 3D персонажей как в FOnline)) Или вообще добавить 3D с триметрической проекцией.

 

Собственно, пока всё.

добавлено позже

Чуть не забыл, поддержку utf8 для текста + поддержку современных шрифтов ttf.




#18 Mr.Сталин

Mr.Сталин

    *** Destroy u$a ***

  • Desert Rangers
  • PipPipPipPipPip
  • 5 517 сообщений

Отправлено 17 Май 2022 - 19:00

У тебя наполеоновские планы.
Хml полное дерьмо. Чтобы работать с бинарниками проще написать редактор (которые итак уже имеются) а не перелопачивать уже готовое. Конвертор в худщем случае если ты любитель копаться в файлах.
Невижу никакого смысла перекраивать все и вся на другие форматы.
Нус твое желание.

добавлено позже

2. Убрать из форматов привязку к id.

из всего списка предложенного плана это самое более приземленное желание - но карты уже будут не совместимы. придется и карты конвертировать. так, что...
 

6. Мелочи, типа поддержка локализаций из коробки,

Такое в движке частично есть например для интерфейса, картинок - просто об этом не знают.
 

Это уже совсем будущее. Далее понятно запилить 3D персонажей как в FOnline

будущее - это когда уже после 2077 года ?)))
 

добавлено позже

Вся эта затея с этими исходниками просто один большой пиZдес.  :smile51:

 

Я вижу только один путь это перенос всего функционала sfall из длл в новый ехе - но видя эти исходники на СИ, пропадает всякое желание возни с ними, и убивание тонны времени на это дело.


sFall 5.0 - Официальная и расширенная версия для Fallout 2.

Fallout Proto Manager v1.4.0 - Создание и редактирования прототипов файлов.

sFall Script Editor v4.1.7.RC1 - Написание скриптов и отладки диалогов.

Mapper by Dims v0.99.3 - Обновленный редактор карт c дополнительными возможностями.

Другие утилиты для моддинга Fallout.



#19 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 17 Май 2022 - 19:46

Я по вечерам изучаю исходники и тоже были мысли, просто брать и переносить код в самописный двиг. Но минус в том, что это будет вечная неработающая альфа.

Плюс исходников, что мы можем собирать и релизить двиг. Добавлять фичи, рефакторить код. После адаптации исходников для С++, работа пойдет веселее. Но у нас уже есть работающий двиг. Конечно код всратенький.

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

добавлено позже

Как раз для этих целей, дочитываю книгу: Майкл Физерс: Эффективная работа с унаследованным кодом.


#20 Jordan

Jordan

    Выживший

  • автор темы
  • Desert Rangers
  • PipPip
  • 118 сообщений
  • Откуда:Самара

Отправлено 17 Май 2022 - 23:53

Экспериментирую с движком. Так и не получается, запустить в окне. Но получилось запустить в нативном 1366x768

 

image.jpg

добавлено позже

Вот эти строки отвечают за режим в окне

   

 

    if (IDirectDraw_SetCooperativeLevel(gDirectDraw, gProgramWindow, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN) != DD_OK) {
        return -1;
    }
 

Поменял так

 

    if (IDirectDraw_SetCooperativeLevel(gDirectDraw, gProgramWindow, DDSCL_NORMAL) != DD_OK) {
        return -1;
    } 
 
Документация 

добавлено позже

Есть подвижки для выпиливания directx для видео и рисование просто в буфер ОЗУ. Это позволит выводить буфер, с помощью GDI, OpenGL, SDL.

И далее по списку, перенос на SDL, управление мышью, клавиатурой.

Уверен, поддержку и развитие движка осилим.

добавлено позже

На днях постараюсь закончить перенос на С++.

Для мержа с основной веткой, буду батником переименовать файлы обратно в .с
После обновления, обратно в .cpp

добавлено позже

Как первое изменение, хочу добавить новый конфиг, для изменения разрешения экрана игры. Будет второй файл fallout2new.cfg

Авторизуйтесь для ответа в теме
Новых тем нет

Похожие темы


Количество пользователей, читающих эту тему: 0

0 members, 0 guests, 0 anonymous users