Вся троица онлайн-рогаликов написанных на языке программирования ANSI C (~ стандарт C89-C99), так как изначально все они были основаны на исходном коде Angband
- MAngband
- TomeNET
- PWMAngband (Tangaria основана на нём)
- Tangaria
3) Прочитайте книгу о C. Существует множество книг о ANSI C; моя личная любимая — «C Primer Plus» от Stephen Prata. C — это язык, который не следует изучать в спешке, так как вам необходимо понять множество глубоких внутренних аспектов. Не торопитесь 🙂
FAQ по программированию:
Да, потому что тайлсеты могут быть больше, чем 128×128. Также клиент GCU использует специальные атрибуты больше 128 из-за фронтенда Necklace of the Eye. Например: невозможно использовать символы @, потому что NotEye использует @ для отслеживания позиции игрока, поэтому вместо этого можно использовать смайлик (0x263A).
Дайте общий обзор того, как уровни подземелья выстроены в памяти в V/PWMA сейчас? (например, в mang это ужасный массив cave[-4096 to 127], с индексами дикой местности, закручивающимися в отрицательных измерениях (как вы хорошо знаете))
Теперь уровни хранятся в массиве [x/y/z]. Дикая местность прямоугольная. Города или области дикой местности находятся на (x,y,0). Затем в локации (x,y) вы можете иметь подземелье с этажами от 1 до 127 по оси z.
Есть ли также функция вроде get_player_level(struct player*p), которая использует p->world_x, p->world_y, p->depth или что-то подобное? и есть ли такие средства доступа?
Нет, только get_cave.
Монстры/объекты всё ещё хранятся глобально со ссылками на уровни, или теперь они являются частью структуры уровня?
Часть уровня. Теперь всё в cave: мобы, объекты, ловушки.
Как отлаживать сервер?
Установите C++Builder Community Edition
Есть два способа сделать это — через готовое решение или вручную:
1) решение: скачайте файл проекта для сервера (ПКМ → ‘Сохранить как…’)
2) вручную:
- создайте новый проект
- консольное приложение → C
- укажите исходный код проекта, выберите «main.c» в /src/server
- сохраните проект с именем:
mangband
в /src/bcb6 (сначала он сохранит .h файл; а затем появится новое окно с *.cbproj) // имя важно, т.к. оно будет генерировать исполняемый файл сервера как mangband.exe - теперь настроим игру: вкладка проекта → попробуйте найти «options»
- Building →
C++ Shared Options → Final output directory → выберите PWMAngband (основную папку исходников) - C++ Compiler → ‘Use classic Borland compiler’ → true
- Directories and Conditionals → conditional defines:
_DEBUG;STRICT;BCC_IDE;WINDOWS
- Directories and Conditionals → Include file search path нам нужно добавить
..\win
и..\common
для этого нажмите на «…» чтобы добавить строку - Directories and Conditionals → Object file output directory → PWMAngband
- Pre-compiled headers → cache: true
- теперь нам нужно добавить все файлы в проект; сначала файлы в «common», все .c файлы
щелкните правой кнопкой мыши на project.exe и нажмите «добавить»
в /common
.c
добавьте всё, кроме net-unix.c
они появятся в папке проекта (разверните, чтобы увидеть файлы) - теперь добавьте все файлы из /server, кроме main.c
- последний файл для добавления — «angband.rc» из /win
- project -> make … если он выполняет связывание — всё хорошо 🙂
- проверьте, сгенерированы ли .exe файлы (должны быть в папке PWMAngband)
- выполните (зелёная стрелка)
- теперь откройте «game-world.c»
- найдите «void exit_game_panic(void)» (Ctrl+f должен открыть окно поиска)
- поставим здесь точку останова: нажмите на полях слева на этой строке (появится красная точка маркера)
- теперь закройте окно сервера (которое запущено после выполнения); используйте ctrl+c для закрытия (закрытие с помощью «x» может вызвать сбой)
- теперь запустим сервер в режиме отладки: нажмите на кнопку рядом с зелёной стрелкой (Run)
- он теперь в режиме отладки: «exit_game_panic» — это функция, которая вызывается при сбое; так что когда игра вылетает, отладчик остановится на этой строке
- откройте окно под названием «stack view» в меню отладки: view → call stack (оно появится слева)
- когда программа остановится, вы получите строку, где произошёл сбой, так что вы можете сразу исправить код!
Как отлаживать клиент?
Решение: скачайте файл проекта для клиента (ПКМ → ‘Сохранить как…’)
В основном то же самое, но вам следует добавить переменные из PWMAngband\src\bcb6\<file>.bpr в файл проекта вашей IDE.
-
посмотрите в mangclient_sdl.bpr и вместо серверного
_DEBUG;STRICT;BCC_IDE;WINDOWS
(Directories and Conditionals → conditional defines:), используйте:
STRICT;BCC_IDE;WINDOWS;SOUND_SDL;USE_SDL;_DEBUG
-
добавьте путь к библиотеке в свойства проекта:
D:\GitHub\Tangaria\PWMAngband\src_SDL - также добавьте файлы
.._SDL\SDL.lib
.._SDL\SDL_ttf.lib
.._SDL\SDL_image.lib
.._SDL\SDL_mixer.lib
непосредственно в проект (щелкните правой кнопкой мыши project.exe и нажмите «добавить»)