Разработка и ромхакинг > Ромхакинг и программирование
[SMD] Rock 'n' Roll Racing -= Ломаем игру=-
<< < (39/111) > >>
r57shell:

--- Цитата: BARAKA от 27 Апрель 2010, 11:44:51 ---и от отчаяния что я не программер.

--- Конец цитаты ---
учись.

Добавлено позже:
#include <stdio.h> //подключаем библиотеку ввода вывода
#include <io.h> //ввод вывод только более низкого уровня
#include <fcntl.h> //для констант открытия файлов (каким образом открыть файл)

void usage() //функция которая будет выводить "Usage"
{
   printf( //функция которая выводит строки на консоль
"Usage:\n"   //С++ так устроен что если видит подряд идущие строки то склеивает их в одну
"  .exe rompath archive_id offset archivepath\n" // \n это перевод строки
"\n" // аналогично \t табуляция
"  Author r57shell@uralweb.ru\n"
"  last update 27.04.10");
}   //функция закончилась

int gi(char *s) //объявим функцию другую (параметр указатель(адресс) на символ(на первый в строке))
{ //эта будет по строке определять какое число написано
   int r=0; //сначала число "ответ" равно нулю
   while(*s>='0'&&*s<='9') //если в строке видим цифру
   { //конец строки по определению символ с кодом 0
      r*=10; //умножим текущий ответ на 10 это тоже самое что r=r*10;
      r+=*s-'0'; //т.к. символы это их коды, то чтобы узнать число нужно вычесть код нуля
      ++s; //увеличим адресс на единичку
   }
   return r; //вернём ответ
} //конец функции

int gx(char *s) //аналогично только теперь щестнадцатиричное число надо распознать
{
   int r=0;
   while((*s>='0'&&*s<='9')
      ||(*s>='A'&&*s<='F')
      ||(*s>='a'&&*s<='f'))
   {
      r*=16;
      if (*s>='0'&&*s<='9')
         r+=*s-'0'; //если цифра то вычесть код нуля
      else if (*s>='A'&&*s<='F')
         r+=*s-'A'+10; //если буква то вычесть код буквы и прибавить 10 т.к. A = 10
      else if (*s>='a'&&*s<='f')
         r+=*s-'a'+10;
      ++s;
   }
   return r;
}

//эта функция запускается при запуске .exe
int main(int argc, char ** argv) //argc - кол-во параметров командной строки, argv - сами параметры (указатель(адресс) первого указателя(адресса) на первый символ строки))
{
   if (argc!=5) //если параметров не 5 (путь к текущему .exe + параметры) то нам не всё ввели
   {
      usage(); //выводим как использовать
      return 0; // выходим
   }

   int rom=_open(argv[1], _O_BINARY|_O_RDWR); //открываем файл (первый аргумент путь к рому) открываем с флагами "бинарно" и "чтение-запись"
   if (rom==-1) //если несмог открыть то он вернёт -1 поэтому проверяем если -1 то несмогли открыть
   {
      printf("Can't open file \"%s\"",argv[1]); //выводим что несмогли открыть такойто файл
      usage(); // вдруг просто пользователь не те параметры указал, показываем ему как использовать
      return 0; // выходим
   }

   FILE *f=fopen(argv[4],"rb"); //открываем файл (это другая функция, тут по другому открывается)
   if (!f) //она выдаёт 0 если несмогла открыть а 0 тоже самое что false, а "!" это оператор логического "не", то есть тут написано если f==0 (в таком случае (не(лож)) будет равно истина)
   { //тогда
      printf("Can't open file \"%s\"",argv[4]); // неможем открыть файл
      usage(); //использование
      return 0; //выходим
   }

   int id=gi(argv[2]), // обьявляем id и переводим второй аргумент в число
      len,
      size=2, //размер архива сначала говорим = 2 т.к. там эти 2 байта... сюда мы вычислим размер архива
      offset=gx(argv[3]);

   lseek(rom,offset+2,SEEK_SET); //lseek выставляет позицию чтения/записи (на подобии курсора) в файле. говорим перейти  на адресс offset+2 - туда будем писать архив сжатый

   unsigned char buff[1000]; //обьявим массив - будет буфером
   for (;;) //цикл без условий (бесконечный)
   {
      len=fread(buff,1,1000,f); //попытаемся считать 1000 символов. функция выводит кол-во считанных
      if (!len) //несчитали не один значит файл закончился
         break; //прерываем цикл
      _write(rom,buff,len); //пишем в ром из буффера ровно len байтов
      size+=len; //увеличиваем значение размера на то скока считали.
   }
   //разделим размер архива на 2 байта
   buff[0]=size>>8; //сначала старший байт (">>" битовый сдвиг вправо(тоже самое что целочисленное делние на 2) правый операнд - кол-во делений(на сколько бит сдвинуть) ) 8 бит - один байт
   buff[1]=size; //теперь младший байт. фишка в том что символ - один байт, и всё что не влезает в байт просто обрезается - остаются только младшие 8 битов
   lseek(rom,offset,SEEK_SET); //перейдём на оффсет
   _write(rom,buff,2); //запишем размер архива
   lseek(rom,0x6B000+id*4,SEEK_SET); //6B000 - адресс таблицы адресов архивов. Перейдём к id значению таблицы
   offset-=0x6B000; //разберём оффсет на 4 байта (запись в таблице адресов архивов - 4 байта)
   buff[3]=offset; //сначала младший
   buff[2]=offset>>8; //2-й байт
   buff[1]=offset>>16; //третий
   buff[0]=offset>>32; //четвёртый
   _write(rom,buff,4); //запишем в таблицу 4 байта

   //теперь почему buff[3] а байт младший. а потому что в сеге little-endian - то есть маленький - последний. младший байт - последний.
   //а вот на x86 наоборот - big-endian старший - последний.
   return 0;
}

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

Добавлено позже:
Аналогично (а ну + более удобный интерфейс) ImageToSega

Добавлено позже:
И Palette
Vivi the Black Mage:
Почему бы не сделать шапку темы в которой можноо указывать ссылки на старые и новые версии рома и утилит для редактинга?
Brick_Man:
Вот нарисовал... бред, конечно, но всё же... верхнюю часть начиная с очков планируется сделать металлической, и металлический ирокез, а подбородок и зубы - живые человеческие. Этакий киборг-металлист... :D Конечно это вам не фотошоп :lol:
Nemesis_c:

--- Цитата: minimog от 28 Апрель 2010, 08:36:35 ---Почему бы не сделать шапку темы в которой можноо указывать ссылки на старые и новые версии рома и утилит для редактинга?

--- Конец цитаты ---
с какой целью? те кто заинтересованы спросят - им все дадут. тем более, разных версий рома просто нет. есть одна и куча патчей и большенство патчей не несут в себе какого-то большого смысла (установи последний и всё)- для обычной игры пойдет и  RRR_Hack_v11
BARAKA:
блин,надо будет с рожами тоже похимичить, а то на уроках только трассы рисую,хотя из меня художник не ах.да и как в электронный вариант перевести вопрос...ибо не сканера ни камеры нету..ничё,придумаю чёнить.
по хорошему надо вообще взяться и карты в  цифровой вид переделать,которые за это время напридумывал.но,завтра,щас спать! -_-
Nemesis_c:
несколько задумок на счет портретов персонажей...
ниже привел миниатюры художника Samwise Didier'а, который придумал всех персонжей в RRR
первые четыре и чувак в шляпе под[одят идеально (на мой взгляд)
краснорылый с рогами тоже в рамочку вписывается как надо...
r57shell:

--- Цитата: Nemesis_c от 28 Апрель 2010, 18:47:39 ---с какой целью? те кто заинтересованы спросят - им все дадут. тем более, разных версий рома просто нет. есть одна и куча патчей и большенство патчей не несут в себе какого-то большого смысла (установи последний и всё)- для обычной игры пойдет и  RRR_Hack_v11

--- Конец цитаты ---
Не соглашусь, хотелось бы действительно шапку, но как я понимаю их могут делать только модераторы.

Разных версий рома дофига (иначе почему ром называется v11 значит было уже как минимум 11 версий несчитая промежуточные). А на счёт утилит... их немного, но их версий нормально :).

Nemesis_c:
Наши графические редакторы - самые графические в мире. И никакие другие редакторы не перередактируют наших редакторов по редактируемости!

Подогнал физиономии под нужные размеры. почти без потерь...

Для тех кто хочет попробовать нарисовать своего персонажа ниже прикрепил пустую рамку.

Рисовать разрешается только на розовом фоне. Можно рисовать и на самой рамке (зелены цвет),
но на синий фон заступать нельзя. Размер выделяемый под рамку с физиономией - 64х64 пикселя.

Сразу говорим какие морды кому не понравились (надеюсь хоть что-то кому-то понравится?
А то чую надвигается буря критики и недовольства)

внизу анимашка для r57shell  :lol:
BARAKA:

--- Цитата ---Сразу говорим какие морды кому не понравились (надеюсь хоть что-то кому-то понравится?
А то чую надвигается буря критики и недовольства)
--- Конец цитаты ---
довольно таки ничего,но имхо можно попробовать и из варкрафта вставить кого нибудь.Блин а про стрит рейсеров то я и забыл.долго бился головой с вопросом какие ещё гонки на сегу то есть...
Nemesis_c:
вставил одну физиономию в ром. перепутал несколько цветов, но это не страшно...
физиономия в ром не влазела - запихнул поверх других рож, но и это не страшно...
кроме первой планеты теперь ничего не работает, но и это не беда...
вставлял и подбирал палитру вручную а не прогой т.к. после проги размер очень велик...
r57shell че-то пытался вдолбить мне в мозг - не смог, ну и ладно...
короче если есть желающие заценить самый глючный ром из всех которые только могли
появиться - качайте и радуйтесь.
Vivi the Black Mage:
BARAKA, ага! Самого мистера Ди втыкнуть в игру хотите?
BARAKA:

--- Цитата: minimog от 29 Апрель 2010, 11:59:38 ---BARAKA, ага! Самого мистера Ди втыкнуть в игру хотите?

--- Конец цитаты ---
это кто?!?!?!
Vivi the Black Mage:
BARAKA, сам Дьябло))))
Brick_Man:
Вот блин, время есть - возможности нет :( так попробовал бы что-нибудь в рамочке покалякать :(
BARAKA:
Так,хорошь оффтопить!
я вот тут намалевал ещё парочку трасс,кому интересно,покатайтесь.есть там парочку интересных задумок...
Brick_Man:
куда совать эти твои трассы????
BARAKA:

--- Цитата: kupnu4 от 30 Апрель 2010, 12:46:14 ---куда совать эти твои трассы????

--- Конец цитаты ---
с помощью проги сноуворма.(идёт в архиве с хаком).trackeditor называется.там прогу открываешь,потом опэн трэк,экспорт трэк ту ром и выбираешь ром с РРР
однако не знаю почему но трассы засовываются только в оригинальную РРР.в хак не хотят через прогу.в хак их Тай засовывает.

Добавлено позже:
решил тут попробовать машинку из pro-am2 перенести...откровенно говоря она слишком большого размера.но всё равно,воть.
Nemesis_c:

--- Цитата: BARAKA от 30 Апрель 2010, 14:48:42 ---решил тут попробовать машинку из pro-am2 перенести...

--- Конец цитаты ---
:thumbup: это уже прогресс. topos84 только где-то заблудился, он там тоже хотел чего-то состряпать.

Добавлено позже:
так, вот еще одно (хорошее) предложение по поводу изменения титульного экрана.
topos84:

--- Цитата: Nemesis_c ---topos84 только где-то заблудился, он там тоже хотел чего-то состряпать.
--- Конец цитаты ---
Да меня в няньки запрягли (чуть ли не на полный рабочий день). Времени хватает только на то, чтоб с семеркой поковыряться (никак не могу исправить один баг).
Nemesis_c, титульный зачетный! :thumbup: И тетка с рыжимы волосами вписывается отлично! :thumbup: Рожа у нее прямо байкерская.
BARAKA:

--- Цитата ---это уже прогресс.
--- Конец цитаты ---
это не прогресс,это я от скуки маялся...да и не пойдёт по моему машинка в игру...не вписывается она как-то....

--- Цитата ---так, вот еще одно (хорошее) предложение по поводу изменения титульного экрана.
--- Конец цитаты ---
красавчик! :thumbup: сам рисовал,али нашёл где?
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии