Игры, которые я не смог создать

Настало время очередной игры и я уставился в блокнот. Записывая поступающие идеи, я освобождал свой мозг для новых идей. Вдруг я понял, что я придумал нечно важное для меня. Эта была идея новой игры. Я точно понял, что её нужно сделать. Играем снова за хакера. Я встречал игры с таким жанром и половина из них была простой менеджмент управления, но другая половина уже давала возможность немного программировать. Из программирования мне нравиться игра SHENZHEN IO, в особенности разработка на ассемблере. Я так люблю ассемблер и он стал для хакера в моей игре основным инструментом. Да, ассемблер это круто и его легче парсить если честно. Также он подходит по смыслу для игры. А смысл такой, вы играете в роли хакера. Вам поступают задачи и перейдя к выполнению задачи, вы подключаетесь к вебкамере жертвы. Игра в pixel art и сама комната выполнена вы изометрии. Я пишу этот текст, пока ещё не созданной игры, просто есть желание это написать. Так я проведу вас через весь этап разработки. В общем, пока задумка такая, я как хакер вижу каких нибудь роботов в комнате или устройства, не обязательно роботов, но что-то, к чему можно подключиться. Дальше, после того как подключились, мы можем запрограммировать устройство. В комнате, да и в любом уровне будет угроза в лице людей или животных. Цель что-то выгрузить или добыть. Запрограммировав робота, мы запускаем выполняться код и робот начинает двигаться. Если его обнаружить человек или животное, то робота уничтожат и придется переделывать код. Нужно рассчитать время, если например солдат ходит по территории, то нужно точно определить время, когда закодированный робот должен начинать выполнять код. Итак, начнем разработку.

Так как я пишу на своём движке, то первым делом нужно было научиться работать с текстом. Чтобы текст правильно парсился и выделял цветами особые названия для языка ассемблера. Я уже научен разделять пространство и буду делать это вновь. Чтоб вы понимали о чем я, я объясню. В руководствах в интернете по opengl всегда предлагают ортографию делить вот так от -1 до +1, это если хочешь, чтобы одинаково на всех экранах смотрелось. Либо делаешь размер экрана для ортографии, и тогда всё будет в тех размерах, которые указаны для спрайтов. В таком случае можно считать проценты ширины экрана и тоже выходить из этой ситуации, если хочется, чтобы одинаковый размер был. Но если взглянем на unity, то когда мы смотрим на 2d проекцию, мы видим, что в один экран помещается примерно больше 20 или 10 квадратов. Мне это дало идею разделать ортографию не на -1 и 1, а на 0 и 20 например. Я так делал игру HexFrontier. Мы указываем в ортографии от 0 до 20 и тайлу квадратному указываем размер в единицу и так получаем нашу карту. Такое же я решил сделать и для кодирования ассемблера. В aseprite я написал весь алфавит и разделил на тайлы. Написал парсер таких тайлсетов и загрузил в игру. Разделил пространство ортографии на 50 по вертикали, и начал писать код. В итоге на первых порах у меня вышло нечто такое.

Первый набросок кода

Ох ребята. Я сейчас работал около 8 часов с самого утра, чтобы добиться нормальной работы редактора кода. Теперь можно писать код и передвигаться по буквам.

текстовый редактор

Ох, и намучился же я с ним. Главное пишу, исправляю ошибки, опять пишу, а сделать нормально не получается. Как только отхожу отдохнуть, так через минут 5 уже приходит свежее решение и более грамотное. Сразу бегу исправлять. Так и не получается нормально отдохнуть, уж очень интересное занятие - программирование.

Для текстового редактора почти всё готово, осталось только сделать смещения для меток goto. Это такие метки, по которым можно быстро перемещаться из одной области кода в другую. Не знаю даже, отдыхать или нет, даже читать не охота сейчас ничего. :)

Итак, я поспал 4 часа и выспался. Первое занятие, которое я для себя нашел, это чтение фауста, книга Гёте. Вообще, я её читаю уже год. Всё никак не могу закончить. Где-то несколько месяцев назад я начал её заново читать, чтобы вспомнить всё и вот уже скоро её дочитаю и ещё одна книга будет мною прочтена. Меня впечатлил фильм "Девятые врата", он очень интересный и даёт толчок к новым мыслям; помню, когда посмотрел фильм и почитал фауста, я смог выдать вот такое видео со стихами.

Колдун в мире теней

О, я очень радовался, что у меня было желание сделать такую игру, эта книга 9 врат в мир царство теней, это что-то с чем-то. Я придумал стихи для интро игры за два-три часа. Потом нарисовал, но дело до разработки игры так и не дошло. Пока слаб в создании сюжета, но кто знает, может в будущем я всё-таки создам эту игру. Это будет скорее всего квест. Художественных книг я прочитал немного, и самая любимая из них, это Дон Кихот. После прочтения этой книги, я хотел написать свою и мои главы начинались бы также как в Дон Кихоте. Так я понял, что надо больше книг читать, чтобы развивать вариативность повествования.

Итак, мы немного отвлеклись, чтобы не так тяжело было читать только разработку. Всё же я хочу показать процесс разработки, а не только документалистику. Здесь важен процесс. Я хотел бы не только посвящать себя полностью разработке, но и развиваться в других сферах тоже. И чтобы не выгореть, я должен менять род занятий. Тем более я не знаю сколько займёт разработке этой игры, я про Shadow Hacker (Теневой хакер).

В месте где я остановился, я не мог решить проблему с меткой goto. Хотя, я её частично решил, но всё ещё оставались проблемы, и сейчас я покажу их.

Проблема с goto меткой.

Проблема в том, что курсор не правильно переносится на строку выше, да и на строку ниже скорее всего также будет. Пока я даже не знаю как решить эту проблему. Сама строка у меня как массив, а говоря языком c++ массив из векторов. Я использовал обычный std::vector, чтобы хранить всю строку. Я даже потом подумал, что лучше было бы хранить текст в двумерном массиве, но потом решил, что это будет не так удобно работать с перемещениями. Хотя, если я всё-таки пойму, что лучше хранить двумерный массив, то буду делать так, а пока попробую разобраться как решить проблему с одномерным массивом.

Как работает код. Когда мы нажимаем клавишу, то она добавляется туда, где стоит коретка. После того, как произошла обработка, мы возвращаем весь текст к исходному состоянию. Начало строки у меня на 4 позиции. У меня сделано всё для этой позиции, а goto занимает 2 позицию и из-за этого возникли сложности. Итак, сначала все строки приводятся к стандартному виду, а потом уже в рисовании один раз мы обрабатываем весь текст и назначаем ему цвета, смещения коретки. Если ещё нажать клавишу, то ещё раз перед рисованием всё распределиться, а потом просто будет рисоваться. Как было видно из скриншота gif, я решил проблему с goto, но не могу перейти с помощью backspace на нужную позицию, потому что закодирована 4 позиция и мы не знаем ничего на каких строках у нас есть смещения. Хорошо, я думаю я понял в чем проблема, пока писал этот текст; сейчас приступлю к разработке, а потом отпишусь как найду решение.

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

Я создал структуру и начал везде закрывать код с помощью if 0

#if 0 ... #endif

Так удобно в vim потом будет включать код обратно, если потребуется. Первым делом нужно убедиться, что добавляется текст на экран. Я также создал bool о том, что является ли записанным уже значение или нет. Так я буду ориентироваться куда добавлять новые значения.

Всё-таки я иногда начинаю понимать, что в сишном стиле мне более удобно программировать, что я не умею на c++ так мастерски писать код, чтобы прям не нужно было исправлять потом тонну кода. Но я сейчас пишу на c++ и думаю со временем я привыкну к языку абстракций.

Да, всё-таки двусвязный список мне помог больше чем vector. Хотя может и стоило бы использовать stl в c++, там ведь есть такой контейнер. Были сложно уловимые ошибки, но мне помог sanitizer. Он показывает где может быть ошибка и указал мне на ошибку; спустя какое-то время я нашел причину. Двусвязный список отлично подходит для текстового редактора в моём случае. Вот показываю, как сейчас, работает. Правда я не делал ещё выделение цветов с новым кодом, но сделаю позже. Итак, много часов потратил на всю работу. Опять уже поработал около 8 часов. Время летит незаметно.

Первая версия с новым двусвязным списком

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

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

Законченный цветной парсер кода

Далее мне нужно было разработать какие будут устройства, какие в них будут регистры и команды. Придумать возможности разного рода устройств. Всё это прописать в блокноте и начать делать парсер кода, чтобы можно было выполнить код и сделать рисунки для тестовой версии.

Первое устройство, которое я придумал, был робот пылесос. У него были возможности, передвигаться, поворачиваться, чистить пол, сканировать устройства вокруг и передавать данные по радио связи. Название протокола радио связи я не придумал тогда ещё, но CPU для такого робота назвал Deletech. Он включал в себя 4 регистра общего управления, два регистра передачи данных и два контрольных регистра. Без проверки нельзя было точно узнать, хватит ли такого функционала, но в тетрадке получалось, что хватает. У такого процессора есть режимы работы. Например, чтобы перейти в режим передвижения, то нужно было написать.

mov a0, 1 int 0x40

Далее, если хочется двигаться вперёд, то нужно указать единицу, если назад, то ноль.

mov a0, 1 int 0x80

Как видно из кода, int 0x40 отвечает за режим работы робота, int 0x80 за выполнение команд.

Также, есть операторы, куда же без них, mov и int вы знаете уже. Далее приведу набор операторов для этого cpu.

mov - копирование jmp - безусловный переход cmp - сравнение jq - переход, если равно jlq - переход, если меньше или равно jl - переход, если меньше jg - переход, если больше jgq - переход, если больше или равно swap - обмен между регистрами push - добавление значения в стек pop - выталкивания значения из стека inc - инкремент на единицу dec - декремент на единицу int - вызов прерывания in - получения байта из источника out - вывод байт в направление

Это был первый набор команд, которые мне как показались, были достаточны для программирования.

Далее я приступил к панели, где будет размещаться код. Панель должна была быть слева. В каждом уровне должно быть несколько устройств. Например, мы можем закодировать робота пылесоса, чтобы он ходил по комнате и сканировал сеть на предмет доступных устройств. Если он находит устройство, то может передать в него прошивку. Те, в свою очередь, могут узнать своё местоположение и в зависимости от положения делать то, что закодировано. Так как нам не известны адреса устройств изначально, можно было бы написать код автоматизации, который запустит все устройства, до которых доберется. Да, прошивка получится больше, но как зато это упростит задачу, если вдруг вам нужно активировать 4 устройства в комнате.

Поработав опять часов 14 за день я сделал несколько вещей. Во-первых я написал класс левой панели, которая включает в себя редактор кода. У редактора кода загнутые края. У меня был уже написан этот шейдер раньше, но его пришлось переделать для позиционирования от левого верхнего угла. Также, когда я хотел сделать скриншот, получил segfault в особом случае, которым я займусь на следующий день. Я исправил несколько ошибок в парсере и кажется, что осталась всего одна ошибка и мне не нужно будет больше возвращаться к фиксам багов для редактора. Я написал небольшой код как будет работать передвижение, поиск других устройств и передача прошивки на неё. Пока ещё не всё проработано и код пока что оставил такой. Дальше я буду думать как сделать более логично. И как всегда скриншот с левой панелью.

Код
Код

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

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

Измененный шрифт
Измененный шрифт

Далее мне нужно было поспать, чтобы потом проснуться и отловить последний баг, о котором я знаю в этом редакторе. После этого будет выбор, либо писать парсер симуляции кода, либо рисовать в pixel art стиле в изометрии рисунки. Тогда я лёг спать, подумав, что день прошел отлично и я что-то да сделал. Да, работа продвигается медленно как может показаться, но по сути игра не должна быть такой большой как я думаю. Мне всего то нужно было сделать нормальный редактор кода, симуляцию, рисунки и несколько видов процессоров. Потом Создать документацию по процессорам и обучение. Ладно, теперь я напишу, что было дальше на следующий день.

После того как я проснулся, я включил стрим на twitch и начал делать дальше игру. Я изменил разрешение экрана в игре и понял, что это не работает нормально на других разрешениях. Спустя час я решил проблему. Понял в чём дело. Мне захотелось проверить как на моём втором компьютере будет игра работать. Так как основной у меня компьютер с экраном 4k, то я думал, что всё должно быть нормально, но к моему разочарованию, на fullhd игра вообще как-то не правильно отображало ui интерфейс. Вот печальный скриншот.

печальный скриншот
печальный скриншот

Эту проблему можно было отладить с помощью RenderDoc, но мне кажется, что я не совсем правильно делаю, что разделяю пространство для ui. Почему это нормально работает на Hdpi и не правильно на fullhd? Ведь математика для всех одна. Этот вопрос не давал мне покоя и я не мог найти на него ответ. Да, кстати, на 4k, если запустить fullhd окно игры, то всё будет нормально отображаться. Поэтому было сложно даже понять как решать проблему. Мне даже захотелось создать новый движок только уже не с opengl, а с vulkan. Зная, что мне придется изучать новый api, я был в ужасе. Я не знал что делать. Ещё проблемой для windows было то, что у меня не получалось с помощью freetype отобразить русский шрифт. Хотя я уже начинаю догадываться, что там в редакторе нужно было установить codepage utf8. ) Ну ладно, проверим потом. Нужно было всё хорошенько обдумать и принять верное решение. Всё-таки переносить разработку игры на неопределенный срок, пока не сделаю новый двиг на vulkan, тоже не хотелось. Всё-таки желание делать игру превалировало. Можно было делать на этом движке, но тогда надо понять, почему на fullhd неправильно показывается. Да, на opengl игры делают для windows, серия игр, что мне знакома, это amnesia. Я уже так привык к opengl, что сложно с него слазить. А vulkan похож чем-то на directx по api. Хотя vulkan я знаю не очень хорошо и directx 11 тоже, но я писал на directx 11 немного движок.

Ладно, я решил всё-таки сначала попробовать разобраться в чем может быть проблема на том компьютере с fullhd экраном. Но сначала я решил отвлечься и почитать книжки, попить чаю и покушать. )

Не прошло так много времени, как я решился на проверку что не так на том компьютере, где глючный экран был. В программе RenderDoc показывало, что всё нормально в плане передаваемых данных. Я даже нашел баг и исправил его. Покопавшись в коде, меня осенило, что возможно я тупо размер большой задаю. Я делал некоторую хитрость, чтобы одинаково смотрелось на экранах и эта хитрость вышла боком на обычном экране. Хорошо, буду знать. Я даже сейчас объяснить более подробно не смогу в чём проблема, но и также уберегу вас от этого. Если бы это был бы глюк в opengl, то мне пришлось бы переделывать на vulkan. Дорогой читатель, тебя может раздражать или ты можешь смеяться как я мучаюсь со своим движком, пытаясь сделать игру. Но я думаю наперёд. Я не хочу проблем с лицензиями, а предоставить лицензии и разрешения на пользования продуктом мне придется, если запросят магазины vkplay или rustore, поэтому я делаю на своём движке, мне хоть это иногда и в тягость, но я знаю на что иду. Если я сумею заработать большую сумму денег, то свой движок мне даст преимущество. Если бы я на unity делал игры и заработал со всех игр больше 100 000$, то мне пришлось бы заморачиваться с покупкой лицензии. Я вот не хочу пытаться как-то обходить санкции, ездить в другую страну, чтобы оплатить лицензию, слишком много юридических проблем. Так как это инди разработка и игра ты сам понимаешь не требует AAA движка, то почему бы и не сделать её на своём движке. Я не хочу, чтобы меня переубеждали насчет этого, просто хочу объяснить почему я мучаюсь с движком. Да, если российский движок от vk выйдет, то возможно перейду на него. Смотря какие там условия конечно же будут. Ну а пока буду делать и развиваться вот так как сейчас.

Итак, для fullhd я сделал, чтобы работало, но закругленные края перестали работать. Пора снова перейти на основной компьютер и писать на нём.

И что вы думали? На основном компьютере теперь картинки не правильные. Я решил поменять цвет фона, чтобы было видно что где находится.

Результат на 4k телевизоре
Результат на 4k телевизоре

Как видно, что работает на обычном пк с fullhd, и как работает на 4k hdpi. Это капец. Почему в hdpi я должен для правильного размера умножать на делитель экрана, а в fullhd нет? Ну, делитель экрана, например 1920 делю на 50 частей и каждая часть является целой, если задать размер в единицу. Почему это работало для спрайтов, но не работало для UI? Мне кажется я начал догадываться. Я решил убрать весь код из шейдера для UI, оставив только присвоение цвета. Посмотрим что будет.

И прокатило! Оказывается, из-за попытки нарисовать прямоугольник, он проваливался, потому что что-то было не так с координатами, ведь я же делил пространство и нужно было подумать, как исправить эту ситуацию. Зная, что в этом всё дело, нужно было получить правильные размеры объектов. Думаю, эти размеры нужно передавать через шейдер, но это будет отдельная переменная, которая будет отвечать за размеры.

скрин
скрин

Всё-таки я справился и теперь всё работает как нужно. Оказывается, если ты делишь пространство, то при вычислении позиции или размера нужно делать такое вычисление:

x * screen_width / aspect / count_div width * screen_width / aspect / count_div y * screen_height / count_div

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

В общем смотрите в чем смех. Я раньше делал спрайты в изометрии и выходила вот такая картинка.

Начатый тайл
Начатый тайл

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

Исправленная версия
Исправленная версия

Если вам не смешно, а грустно, то ладно, а мне капец как смешно.

Так как я не работаю, я иногда посматриваю вакансии на hh.ru, хочу сишником работать, но работы почти нет. Для c++ у меня не хватает таланта и опыта. И я выгорел. Всего лишь несколько дней поработал, не нашел работу сишником и выгорел. Это ужасно, я боялся что разработка из-за этого затянется на неопределенный срок. Мне не хотелось приступать к разработке на c++, я хотел писать что-нибудь на C или заняться хакингом. Но это было моим спасением. Когда меня бросает в эту сторону, то всё обдумав, сам начинаешь понимать, что разработчик игр это нормальная профессия и для меня это комфортные условия труда. Проснулся когда хочешь, пишешь код, выгорел, отдыхаешь. Тогда я подумал, что мне нужен день два на обдумывание и я пойму, что я хорошим делом занимаюсь и вернусь в строй. Мне даже не хотелось рисовать спрайты так нужные для игры.

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

пол
пол

Я нарисовал робота пылесоса сначала такого.

робот пылесос
робот пылесос

Потом стёр для каждого направления стрелки и получилось вот так.

робот пылесос
робот пылесос

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

Сначала я расширил форму для кодирования и ввел ограничение в количество написанных в строку символов.

скриншот
скриншот

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

Я решил сразу сделать класс, который бы отвечал за то, какие объекты будут на сцене, хотя для начала я обычно делал по-простому, размещал объекты как мог.

Загрузка карты вышла в один экран. Другая функция перегоняет номера ресурсов в спрайты.

Чтение карты из data файла в одну страницу
Чтение карты из data файла в одну страницу

Тем временем подвезли ещё один монитор и я с радостью подключил. Осталось подставку дождаться и подсоединить правый монитор как левый.

мониторы
мониторы

Итак, я уже вывел пол на экран и это выглядит так.

вид игры
вид игры

Мне подвезли кронштейн для монитора и теперь всё выглядело очень круто.

Рабочее место
Рабочее место

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

Поиграв в event 0 я подумал, а что если мне сделать 3d игру? Ведь раньше у меня была одна из мечт сделать 3d игру ужастик где надо было бы писать код в страхе, что тебя могут схватить, но ты типа успеваешь и проходишь в безопасное убежище. Это ужасно смешно со стороны, но если играть в такое, то я думаю можно будет получить массу впечатлений. Итак, что же делать? Писать двумерную игру или 3d. 3d игра отсрочит выпуск игры, так как 3d я почти не писал на своем движке. Для этого нужно будет сделать программу, где можно будет размещать объекты на сцене. Плюс каждый объект моделировать и разработка игры затянется на долго. Я мог бы выпустить две игры, одну пиксельную, другую 3d. И я стал думать. Вообще, для начала нужно было бы создать рабочий прототип пиксельной игры и поиграть, если будет играбельно, то продолжить разработку.

Я знал, ошибаться было нельзя. Разработка первоначальной игры тоже могла бы возыметь успех, но я не продумал до конца всю игру. Я не всё понимал как в игре должно работать. Например, переключение режимов и загрузка прошивки в другие устройства это прикольно, охранник или кто-нибудь, кто может поймать устройство это классно, но что, если игра будет скучная. Типа везде почти один и тот же код придется писать, чтобы достигнуть цели? Всё завязывалось на том, что надо было как то преграду преодолеть и дойти до финиша, типа скачать с сервера данные. Также мне не приходило в голову идеи по поводу каких роботов можно было бы нарисовать. И я стал думать над 3d игрой. Нужно было снова открыть тетрадку и накидывать идеи. Также, если я придумаю что-то для пиксельной игры, то тоже добавлю и посмотрим, будет ли что-то интересное вырисовываться.

Следующие дни я искал работу и забил на создание игр. У меня не было мотивации делать эти игры, так как обе игры не было полностью наполнены контентом. Я расстроился, что у меня не вышло сделать что-то совершенное. Я понял, да и понимал это раньше, что одной задумки мало, что нужно ещё наполнить всю игру полным контентом, что я пока не в силах создать. Я начал писать эту статью ещё с начале разработки, чтобы потом было что объяснить и показать, показать весь процесс разработки. В итоге всё провалилось. Это меня останавливало какое-то время, но я всё ещё читаю книгу по гейдизайну и возможно пойму что нужно делать. Игру не так то просто создать, если там должно быть много вариаций, чтобы не было скучно. Уровень сложности в головоломке должен увеличиваться, но я начал думать, что кодирование в таком стиле, котором я задумал, будет скучновато.

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

Всем пока!

1010
2 комментария

Комментарий недоступен

1
Ответить

Больно просто, подключится сразу к камере. Для начала тебе нужно узнать ipшник жертвы, потом подрубиться к внешнему узлу (аля роутер в домашней сети, или сервак dhcp где нибудь на объекте при том там скорее будет файрвол) составить карту локалки и от этого плясать, подрубится к запароленной IP камере или серверу видеонаблюдения или устройству с подключенной вебкой, и ломать не с помощью тыка устройства через камеру как вачдогс, а зная конкретный адрес устройства, а с камеры тупо вести наблюдения. Для начала лучше посмотреть архитектуры ЛВС, так как, это так не работает, а также хотя бы про протокол tcp/ip.

Ответить