russian ROMhacking
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Форум ромхакеров » Около темы » Геймдев » Disco (порт симулятора дискотеки с J2ME) (в работе...)
Disco (порт симулятора дискотеки с J2ME)
TLTДата: Пятница, 23.02.2024, 18:09 | Сообщение # 31
Генералиссимус
Группа: Администраторы
Сообщений: 2340
Статус: Оффлайн
ОК, займусь...


Вот так.
 
SegaMarkДата: Суббота, 24.02.2024, 14:32 | Сообщение # 32
Сержант
Группа: Проверенные
Сообщений: 29
Статус: Оффлайн
Есть небольшая проблема. В файлах "lang.**" содержаться не все строки которые мы используем в игре, например "settings", "information", "reset" и другие, что бы не писать каждый раз при использовании своих строк:
Код

If Language=0 Then
...  
endif
If Language=1 Then
...
endif
If Language=2 Then
...
endif

нужно писать отдельный софт для добавление кастомных строк в файлы "lang.**", что бы самому не вычислять адреса и длину строки. В добавок нужно еще добавить функционал для создания своих файлов "lang.**", так как игру к сожалению не переводили на русский, а на родном языке поиграть хочется. Думаю мы будем использовать все какие есть языки, поэтому нужно найти и анимировать флаги остальных стран, которых не хватает.
Теперь насчет файла "data.bin" он оказался очень хитро зашифрован, поэтому на его расшифровку уйдет больше времени чем изначально планировалось. Судя по всему этот файл хранит: координаты спрайтов, координаты кропа, anchor, манипуляцию. Но это не точно, на данный момент пытаюсь это выяснить.


Сообщение отредактировал SegaMark - Суббота, 24.02.2024, 14:34
 
ТомахомэДата: Суббота, 24.02.2024, 15:17 | Сообщение # 33
Генерал-лейтенант
Группа: Проверенные
Сообщений: 500
Статус: Оффлайн
На русском я эту игру таки встречал - если мне память за давностью лет не изменяет, на "раскладушке" LG одной моей знакомой. Причём игра уже изначально шла в одном пакете с "ОС" телефона.
 
TLTДата: Суббота, 24.02.2024, 15:23 | Сообщение # 34
Генералиссимус
Группа: Администраторы
Сообщений: 2340
Статус: Оффлайн
Томахомэ, проверь мелодии на переходы (конец/начало, как зацикливается) и пр.

Я быстро проверил:
0 - так себе звучит в начале. обрезать начало
1 - хорошо
2 - норм
3 - норм

4 - не подошла полифония. del

5 - норм
6 - норм
7 - средне, тихо всё, кроме ударных. Заменить?
8 - хорошо
9 - норм
Прикрепления: Music.7z (68.4 Kb)



Вот так.
 
ТомахомэДата: Суббота, 24.02.2024, 17:09 | Сообщение # 35
Генерал-лейтенант
Группа: Проверенные
Сообщений: 500
Статус: Оффлайн
Под нож пошли, я так понимаю, Slice Me Nice и Jet Airliner? 7.xgc, кстати, звучит на штатной громкости Windows в 50% и и 200%-й громкости MAME вовсе не тихо, вполне себе нормальцом. Label XGMsong1, в отличие от предыдущего проекта, использует теперь файл 1.xgc.
 
TLTДата: Вторник, 27.02.2024, 22:47 | Сообщение # 36
Генералиссимус
Группа: Администраторы
Сообщений: 2340
Статус: Оффлайн
Томахомэ, по названиям не знаю... Потом на завершающем этапе добавим ещё - выберешь варианты.


Вот так.
 
ТомахомэДата: Среда, 28.02.2024, 05:41 | Сообщение # 37
Генерал-лейтенант
Группа: Проверенные
Сообщений: 500
Статус: Оффлайн
В CD-версии можно будет добавить в виде полноценных аудиодорожек даже те композиции, для которых MIDI-версии не нашлось.
 
TLTДата: Среда, 28.02.2024, 19:43 | Сообщение # 38
Генералиссимус
Группа: Администраторы
Сообщений: 2340
Статус: Оффлайн
Томахомэ, а какой смысл с CD версии? В первую очередь лучше делать именно на картриджную консоль.


Вот так.
 
SegaMarkДата: Воскресенье, 10.03.2024, 12:43 | Сообщение # 39
Сержант
Группа: Проверенные
Сообщений: 29
Статус: Оффлайн
Из хорошего: нашел функцию которая рисует задний фон, сцену и пол. Можно попробовать переписать ее на BEX, возможно что то из этого получиться.
Код

private void DrawStageAndFloor(Graphics paramGraphics) {
    int bgColor = 7377646;
    bgColor = 2239591;
    paramGraphics.setColor(bgColor >> 16 & 0xFF, bgColor >> 8 & 0xFF, bgColor & 0xFF);
    paramGraphics.fillRect(0, 11, 51, 69);//drawRect(int x, int y, int width, int height)
    int fgColor = 725306;
    paramGraphics.setColor(fgColor >> 16 & 0xFF, fgColor >> 8 & 0xFF, fgColor & 0xFF);
    paramGraphics.fillRect(51, 11, 77, 81);
    DirectGraphics directGraphics = DirectUtils.getDirectGraphics(paramGraphics);
    int stageNum = this.soundController.e(1);
    if (stageNum > 0) {
      byte stageWidth = 2;
      byte stageHeight = 2;
      char charCode = '0';
      if (stageNum > 1 && stageNum <= 3) {
        stageWidth = 7;
        stageHeight = 9;
        charCode = '{';
      } else if (stageNum > 3) {
        stageWidth = 14;
        stageHeight = 15;
        charCode = 'm';
      }
      int x = 51 - stageWidth;
      int y;
      for (y = 39 - stageHeight; x > -stageWidth; y += 7) {
        for (int stageImgY = y; stageImgY > -stageHeight; stageImgY -= 15) {
          paramGraphics.setClip(x, stageImgY, stageWidth, stageHeight);
          paramGraphics.drawImage(this.stageImg, x - charCode, stageImgY, 20);
        }
        x -= 14;
      }
      x = 51;
      for (y = 24; x < 128; y += 7) {
        for (int imgY = y; imgY > -15; imgY -= 15) {
          paramGraphics.setClip(x, imgY, stageWidth, stageHeight);
          DirectGraphics directGraphics1 = DirectUtils.getDirectGraphics(paramGraphics);
          directGraphics1.drawImage(this.stageImg, x - this.stageImg.getWidth() - charCode - stageWidth, imgY, 20, 8192);
        }
        x += 14;
      }
    }
    int floorImgHeight = this.floorImg.getHeight();
    int midFloorImgHeight = this.floorImg.getHeight() / 2;
    byte imgWidth = 22;
    byte imgHeight = 11;
    int num = (128 - 51 - imgHeight) / imgWidth;
    int x1 = 51 - imgHeight - (num + 1) * imgWidth;
    int y1 = 39 + (num + 1) * floorImgHeight;
    int step = 0;
    int stageEffect = this.soundController.v();
    if (stageEffect == 1) {
      stageEffect = 2;
    } else if (stageEffect > 1) {
      stageEffect = stageEffect * 2 - 1;
    }
    while (x1 < 128) {
      int imgY = y1;
      int step1 = step + stageEffect;
      while (imgY < 128 + floorImgHeight) {
        paramGraphics.setClip(x1, imgY, imgWidth, floorImgHeight);
        paramGraphics.drawImage(this.floorImg, x1 - step1 * imgWidth, imgY, 20);
        imgY += floorImgHeight;
      }
      if (stageEffect != 2)
        step = ++step % 2;
      x1 += imgHeight + 1;
      if (x1 <= 51 - imgHeight) {
        y1 -= midFloorImgHeight;
        continue;
      }
      y1 += mid;
    }
  }


Из плохого. Так и не ясно для чего используется файл data.bin. Предположительно он используется для анимации, но мне не удалось это подтвердить.
 
ТомахомэДата: Воскресенье, 10.03.2024, 19:29 | Сообщение # 40
Генерал-лейтенант
Группа: Проверенные
Сообщений: 500
Статус: Оффлайн
Начать, думаю, следует со стен. Где их самая-самая начальная координата, и какой элемент какого файла для них используется?
 
SegaMarkДата: Воскресенье, 10.03.2024, 20:45 | Сообщение # 41
Сержант
Группа: Проверенные
Сообщений: 29
Статус: Оффлайн
Начинаются с координат (0, 11), так как вверху расположен интерфейс с высотой 11. Думаю лучше его сделать кратным 8, то есть либо 8, либо 16, так как нам в дальнейшем будет проще его строить и расчитывать от него. Файла и изображений стен нет, они рисуются с помощь j2me API, а точнее с помощью функции fillRect. Так что нужно делать скрин или если в BEX есть возможность рисовать примитивы, то можно ей воспользоваться.
 
ТомахомэДата: Понедельник, 11.03.2024, 15:24 | Сообщение # 42
Генерал-лейтенант
Группа: Проверенные
Сообщений: 500
Статус: Оффлайн
Цитата SegaMark ()
Думаю лучше его сделать кратным 8, то есть либо 8, либо 16, так как нам в дальнейшем будет проще его строить и расчитывать от него.


Об этом уже позаботился. Теперь запрашиваю координаты "человечка", смайлика и знака доллара из файла symbols.
 
SegaMarkДата: Понедельник, 18.03.2024, 18:07 | Сообщение # 43
Сержант
Группа: Проверенные
Сообщений: 29
Статус: Оффлайн
сначала идет спрайт бортика(это 4 последних пикселя в конце symbols.png), он рисуется в начале координат x=0 y=0. Потом рисуется человечик который находиться на один пиксель ниже чем бортик. доллар рисуется в координатах x=46 y=1. смайлик рисуется в координатах x=102 y=1.
цифры рисуются по координатам x=23 x=77 x=125 Y у них всех равен 2. максимальное количество цифр по порядку 3 6 3. Скорей всего между цифрами нет расстояния или я пока не нашел его. Надеюсь все правильно посчитал, если что то не сходиться пишите, перепроверю.
Вот часть кода которая это все рисует.
Код

paramGraphics.setClip(0, 0, 4, 14);
    paramGraphics.drawImage(this.symbolsImg, -this.symbolsImg.getWidth() + 4, 0, 20);//бортик
    byte yDraw = 1;
    int xDraw = 1;
    if (!this.soundController.o() || this.X % 2 == 0) {
      paramGraphics.setClip(xDraw, yDraw, 11, 14);
      xDraw -= true;
      paramGraphics.drawImage(this.symbolsImg, xDraw, yDraw, 20);//человечик
    }
    if (!this.soundController.t() || this.X % 2 == 0) {
      yDraw = 1;
      xDraw = 117 - numImgWidth * 3;//102
      paramGraphics.setClip(xDraw, yDraw, 10, 10);
      xDraw -= 24;//78
      paramGraphics.drawImage(this.symbolsImg, xDraw, yDraw, 20);//смайлик
    }
    yDraw = 1;
    xDraw = (121 - numImgWidth * 5 - 2) / 2 - 1;//46
    paramGraphics.setClip(xDraw, yDraw, 7, 12);
    xDraw -= 34;//12
    paramGraphics.drawImage(this.symbolsImg, xDraw, yDraw, 20);//долар
    paramGraphics.setClip(0, 0, 128, 128);
    //скорей всего в этом условии рисуются цыфры
    if (this.aU == 1 || (this.I != 2 && this.aU == 4) || (this.I == 2 && this.aU == 4 && this.X % 2 == 0)) {
      xDraw = 13;
      yDraw = 2;
      int i6 = this.soundController.b();
      if (i6 < 0)
        i6 = 0;
      RenderImages(paramGraphics, xDraw, yDraw, this.unknownImg, numImgWidth, 3, i6);//xDraw=23
    }
    if (this.aU == 1 || (this.I != 1 && this.aU == 4) || (this.I == 1 && this.aU == 4 && this.X % 2 == 0)) {
      xDraw = 127 - numImgWidth * 3;//102
      yDraw = 2;
      int i6 = 100 * this.soundController.d() / 150;
      if (i6 < 0) {
        i6 = 0;
      } else if (i6 > 100) {
        i6 = 100;
      }
      RenderImages(paramGraphics, xDraw, yDraw, this.unknownImg, numImgWidth, 3, i6);//125
    }
    if (this.aU == 1 || (this.I != 0 && this.aU == 4) || (this.I == 0 && this.aU == 4 && this.X % 2 == 0)) {
      xDraw = (121 - numImgWidth * 6 - 2) / 2 + 7 + 1;//52
      yDraw = 2;
      int i6 = this.soundController.s();
      if (i6 < 0)
        i6 = 0;
      RenderImages(paramGraphics, xDraw, yDraw, this.unknownImg, numImgWidth, 6, i6);//xDraw=52+25=77
    }


Сообщение отредактировал SegaMark - Понедельник, 18.03.2024, 18:08
 
ТомахомэДата: Пятница, 22.03.2024, 09:32 | Сообщение # 44
Генерал-лейтенант
Группа: Проверенные
Сообщений: 500
Статус: Оффлайн
Предварительные результаты - на скрине ниже (правда, объекты слоя Scroll A затенены непонятно почему, но с этим разберёмся позже). Где начинается пол дискотеки?
Прикрепления: 9743841.png (6.9 Kb)
 
SegaMarkДата: Среда, 10.04.2024, 17:07 | Сообщение # 45
Сержант
Группа: Проверенные
Сообщений: 29
Статус: Оффлайн
Думаю координаты пола мало что дадут. Я примерно прикинул как можно разметить объекты с учетом ограничений сега, думаю с этим уже можно начать работать. Для того что бы увидеть расстояние между объектами нужно нажать на объект, зажать alt и навести на другой объект.
Disco design
 
Форум ромхакеров » Около темы » Геймдев » Disco (порт симулятора дискотеки с J2ME) (в работе...)
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: