Page 1 of 1

CIB format from sega lindbergh games

Posted: Sun Nov 20, 2016 2:04 am
by luffytam
here's 2 cib files from a sega lindbergh game "rambo" uses criware technology
with the filename said is a graphic file for criware and sega logo
all .cib files cannot decode or even recognize, is a never before seen

here's the cib
https://mega.nz/#!AwMR0JAC!vQRcVKd1nBPK ... kzDZr-a4mo

Re: CIB format from sega lindbergh games

Posted: Thu Feb 02, 2017 3:40 pm
by luffytam
NEWS HERE:Silent hill arcade which develop by Konami also use cib format. both game have a ObjInit folder and .oni script inside. the exe/elf data show us there's a tool/engine called "Clarithplayer" because Rambo game data have clarith folder. So i import rambo cib files into Silent hill arcade, it work perfectly. somebody could reverse engineering exe files and write bms export script for cib files with this discovery:)
Image

Re: CIB format from sega lindbergh games

Posted: Fri May 05, 2017 8:56 am
by luffytam
Decompile code that handle CIB file from silent hill arcade via. IDA Pro

Code: Select all

int __fastcall sub_402770(int a1, int a2, const void *a3, unsigned int a4)
{
  int v4; // ebx@1
  unsigned int v5; // edx@1
  unsigned int v6; // eax@2
  _DWORD *v7; // eax@5
  int v8; // ecx@6
  int result; // eax@11
  unsigned int v10; // eax@14
  bool v11; // zf@15
  void *v12; // edi@18
  bool v13; // cf@24

  v4 = a1;
  v5 = *(_DWORD *)(a1 + 24);
  if ( v5 < 0x10 )
    v6 = a1 + 4;
  else
    v6 = *(_DWORD *)(a1 + 4);
  if ( (unsigned int)a3 < v6
    || ((v7 = (_DWORD *)(a1 + 4), v5 < 0x10) ? (v8 = a1 + 4) : (v8 = *v7), v8 + *(_DWORD *)(v4 + 20) <= (unsigned int)a3) )
  {
    if ( a4 > 0xFFFFFFFE )
      sub_66A8E3(v4);
    v10 = *(_DWORD *)(v4 + 24);
    if ( v10 >= a4 )
    {
      v11 = a4 == 0;
      if ( !a4 )
      {
        *(_DWORD *)(v4 + 20) = 0;
        if ( v10 < 0x10 )
        {
          *(_BYTE *)(v4 + 4) = 0;
          result = v4;
        }
        else
        {
          **(_BYTE **)(v4 + 4) = 0;
          result = v4;
        }
        return result;
      }
    }
    else
    {
      sub_402050(a4, *(_DWORD *)(v4 + 20));
      v11 = a4 == 0;
    }
    if ( !v11 )
    {
      if ( *(_DWORD *)(v4 + 24) < 0x10u )
        v12 = (void *)(v4 + 4);
      else
        v12 = *(void **)(v4 + 4);
      qmemcpy(v12, a3, a4);
      v13 = *(_DWORD *)(v4 + 24) < 0x10u;
      *(_DWORD *)(v4 + 20) = a4;
      if ( !v13 )
      {
        *(_BYTE *)(*(_DWORD *)(v4 + 4) + a4) = 0;
        return v4;
      }
      *(_BYTE *)(v4 + 4 + a4) = 0;
    }
    result = v4;
  }
  else
  {
    if ( v5 >= 0x10 )
      v7 = (_DWORD *)*v7;
    result = sub_402690(v4, (_BYTE *)a3 - (_BYTE *)v7, a4);
  }
  return result;
}