Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - paul

Pages: 1 2 3 4 [5] 6 7
101
Cool - if you come in IRC I can provide help to get you running on github sources version.

Dat exporter had some big changes in github version to fixing compling in MSVC, the if/else chain on opcode had to be changed to switch/case. We also have SUDM that will decompile FF7 script to structured LUA, don't know if you've seen this work yet.


102
Don't forget qgears team have this:

https://github.com/paulsapps/SUDM

Which will eventually support disassembly of all FF7 scripts (AI/Field,World whatever else). Creating an assembler (and then a generic compiler) shouldn't be too much more work..

/plug

103
Team Avalanche / Re: Midgar City Information
« on: 2015-02-14 11:25:44 »
Please tell me that these are real-time Qgears renders...

That could easily be done in real time in Ogre.

104
Team Avalanche / Re: Midgar City Information
« on: 2015-02-12 22:58:04 »
http://s36.photobucket.com/user/Killerx20/media/Midgar%20Renders/NightTest6.jpg.html

This guys last rendering is looking like hes getting near done, must be at least 70% complete? SpooX is this the same model you're working on with this guy? Looks awesome btw.

105
Chrome thinks your zip is malware and won't let me save it.

106
Nice work, this means reading mesh without U/V and texture information is fully reversed now?

107
Akari I see you're still not using a Github fork.. please, pleaseeeeee could you create one so your code is always backed up and its easy to sync/see what everyone is up to :)

BTW I noticed you used Code::Blocks IDE, you can tell CMake to generate code blocks IDE files:

http://www.cmake.org/cmake/help/v3.0/generator/CodeBlocks.html

If there is any other issue you have that prevents you using github let me know so I can fix. On github we also have issue/task lists so dialog task could be assigned to you. When you make pull request travis will check Linux and OSX compiling too (unit tests will run soon too).

108
Q-Gears / Re: QGears team needs more people!
« on: 2015-02-09 12:14:01 »
Its sort of possible to do this already. You can use any 3d software that has OGRE mesh import/exporter to make your mesh/uv/textures/animations.

Then for the scripts they use LUA, so edit the text file, save, and re-enter the field to re-execute the script. You can also type script/LUA directly into the console (use ~ to display the console).


109
Too bad I don't have a copy of FF8 to dig in to the EXE :(

Looks like you're making good progress anyway :)

110
If its like FF7 there is probably some script data in there?

111
So that must be the ground plane?

112
Decompiler now generates "parseable" Lua :)

Tom is working on a script that uses all opcodes to implement/test all FF7 field opcodes.

My next task is to allow feeding in metadata to replace "cl" with "Cloud" or to auto generate the gateway data/script.

sithlord48 is busy breaking the build and then running away.

Code: [Select]
EntityContainer[ "dir" ] = {
  dir = nil,

  init = function( self )
    self.dir = entity_manager:get_entity("dir")
    BTLMD(32)
    MUSIC(0)
    setMapName(2)
  end,

  main = function( self )
    repeat
      getEntityTriangleId(temp6_0, 1);
    until (true)
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "cl" ] = {
  cl = nil,

  init = function( self )
    self.cl = entity_manager:get_entity("cl")
    Char(0)
    setPlayableChar(0)
  end,

  main = function( self )
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "av_b" ] = {
  av_b = nil,

  init = function( self )
    self.av_b = entity_manager:get_entity("av_b")
    Char(1)
    placeObject(0, 0, 3437, 31524, 642)
    self.av_b:set_solid(true)
    if (var_2_0 >= 8) then
      self.av_b:set_talkable(true)
      self.av_b:set_solid(true)
      self.av_b:set_visible(false)
    end
  end,

  main = function( self )
    if (var_2_0 < 8) then
      self.av_b:set_move_auto_speed(0, 4096)
      move(0, 3646, 31219)
      var_2_0 = 8
      playBlockingAnimation(3, 1)
      move(0, 4277, 31259)
      move(0, 4364, 32052)
      move(0, 3381, 32313)
      move(0, 3010, 32350)
      self.av_b:set_talkable(true)
      self.av_b:set_solid(true)
      self.av_b:set_visible(false)
    end
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "av_c" ] = {
  av_c = nil,

  init = function( self )
    self.av_c = entity_manager:get_entity("av_c")
    Char(2)
    playAnimationLoop(3, 1)
    self.av_c:set_move_auto_speed(0, 4096)
    turnToEntity(0, 252)
    placeObject(0, 0, 3574, 32483, 636)
    self.av_c:set_solid(true)
    if (var_2_0 >= 8) then
      self.av_c:set_talkable(true)
      self.av_c:set_solid(true)
      self.av_c:set_visible(false)
    end
  end,

  main = function( self )
    if (var_2_0 < 8) then
      script:wait(8.500000)
      move(0, 3381, 32313)
      move(0, 3010, 32350)
      self.av_c:set_talkable(true)
      self.av_c:set_solid(true)
      self.av_c:set_visible(false)
    end
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "av_w" ] = {
  av_w = nil,

  init = function( self )
    self.av_w = entity_manager:get_entity("av_w")
    Char(3)
    playAnimationLoop(3, 1)
    self.av_w:set_move_auto_speed(0, 4096)
    turnToEntity(0, 252)
    placeObject(0, 0, 4356, 31678, 652)
    self.av_w:set_solid(true)
    if (var_2_0 >= 8) then
      self.av_w:set_talkable(true)
      self.av_w:set_solid(true)
      self.av_w:set_visible(false)
    end
  end,

  main = function( self )
    if (var_2_0 < 8) then
      script:wait(4.266667)
      move(0, 4312, 32085)
      move(0, 3381, 32313)
      move(0, 3010, 32350)
      self.av_w:set_talkable(true)
      self.av_w:set_solid(true)
      self.av_w:set_visible(false)
    end
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "light0" ] = {
  light0 = nil,

  init = function( self )
    self.light0 = entity_manager:get_entity("light0")
    temp5_28 = 0
    temp5_31 = 255
  end,

  main = function( self )
    STPLS()
    ::label_0x46C::
    while (temp5_28 == 0) do
      if (temp5_31 > 250) then
        temp5_31 = temp5_31 - 1
        break
      end
      temp5_28 = 1
      script:wait(0.133333)
    end
    if (temp5_28 == 1) then
      if (temp5_31 < 255) then
        temp5_31 = temp5_31 + 1
       else
        temp5_28 = 0
        script:wait(0.133333)
      end
    end
    ADPAL()
    LDPLS()
    script:wait(0.066667)
    goto label_0x46C
  end,
}

EntityContainer[ "light1" ] = {
  light1 = nil,

  init = function( self )
    self.light1 = entity_manager:get_entity("light1")
    temp5_29 = 0
    temp5_32 = 255
  end,

  main = function( self )
    setPalette(0, 14, 34, 31)
    script:wait(0.133333)
    ::label_0x4C2::
    while (temp5_29 == 0) do
      if (temp5_32 > 250) then
        temp5_32 = temp5_32 - 1
        break
      end
      temp5_29 = 1
      script:wait(0.133333)
    end
    if (temp5_29 == 1) then
      if (temp5_32 < 255) then
        temp5_32 = temp5_32 + 1
       else
        temp5_29 = 0
        script:wait(0.133333)
      end
    end
    ADPAL()
    loadPallete()
    script:wait(0.066667)
    goto label_0x4C2
  end,
}

EntityContainer[ "light2" ] = {
  light2 = nil,

  init = function( self )
    self.light2 = entity_manager:get_entity("light2")
    backgroundClear(0, 2)
    backgroundOn(0, 2);
    temp5_33 = 255
  end,

  main = function( self )
    STPLS()
    ::label_0x518::
    temp5_33 = 255
    while (temp5_33 > 252) do
      ADPAL()
      LDPLS()
      temp5_33 = temp5_33 - 1
      script:wait(0.066667)
    end
    LDPLS()
    temp5_33 = rand()
    temp5_33 = temp5_33 % 3
    temp5_33 = temp5_33 + 1
    while (temp5_33 > 0) do
      backgroundOff(0, 2);
      script:wait(0.033333)
      backgroundOn(0, 2);
      temp5_33 = temp5_33 - 1
    end
    script:wait(2.000000)
    goto label_0x518
  end,
}

EntityContainer[ "warning" ] = {
  warning = nil,

  init = function( self )
    self.warning = entity_manager:get_entity("warning")
    backgroundClear(0, 1)
    backgroundOff(0, 1);
    temp5_24 = 0
    temp5_27 = 255
  end,

  main = function( self )
    setPalette(0, 11, 0, 255)
    repeat
      temp5_27 = temp5_27 + 1
      while (temp5_27 > 2) do
        temp5_27 = 0
      end
      callScriptBlocking()
      backgroundOn(temp5_27, 1);
      callScriptBlocking()
      loadPallete()
      script:wait(0.033333)
      callScriptBlocking()
      loadPallete()
      script:wait(0.033333)
      callScriptBlocking()
      backgroundOff(temp5_27, 1);
      loadPallete()
      script:wait(0.033333)
    until (true)
  end,
}

EntityContainer[ "light" ] = {
  light = nil,

  init = function( self )
    self.light = entity_manager:get_entity("light")
  end,

  main = function( self )
  end,

  script_1 = function( self )
    temp5_24 = 66
    while (temp5_24 < 98) do
      temp5_24 = temp5_24 + 16
      mulitplyPallete()
      copyPallete()
      loadPallete()
      script:wait(0.066667)
    end
    while (temp5_24 > 4) do
      temp5_24 = temp5_24 - 24
      mulitplyPallete()
      copyPallete()
      loadPallete()
      script:wait(0.066667)
    end
  end,
}

EntityContainer[ "zizizi" ] = {
  zizizi = nil,

  init = function( self )
    self.zizizi = entity_manager:get_entity("zizizi")
  end,

  main = function( self )
  end,

  script_1 = function( self )
    temp5_25 = 0
    temp5_26 = rand()
    temp5_26 = temp5_26 % 4
    if (temp5_26 == 0) then
      temp5_26 = 1
    end
    while (temp5_25 < temp5_26) do
      backgroundOn(temp5_27, 1);
      script:wait(0.033333)
      backgroundOff(temp5_27, 1);
      script:wait(0.033333)
      backgroundOn(3, 1);
      script:wait(0.033333)
      backgroundOff(3, 1);
      script:wait(0.033333)
      temp5_25 = temp5_25 + 1
    end
  end,
}

113
you can just call me paul, not "paulwork" :P

are you interested in hacking world map model format too? looks like you're making good progress with this.

Edit: P.S I would help you out but I don't own a copy of the game.

114
Akari:

Quote
We need to initialize model for entity in qgears

Code: [Select]
        set_entity_to_character( "Cloud", "Cloud" )
        self.cloud = entity_manager:get_entity( "Cloud" )

In ffvii this is done with PC opcode wich translates to

Code: [Select]
0441 (end 0441): -- assosiate entity with model (CHAR) argument doesn't matter
0443 (end 0443): set_entity_to_character( "cl", 0 );

Does this mean that opcode PC N will always become set_entity_to_character( "current_entity", "current_entity" )? What are the 2 parameters meaning here?

115
Q-Gears / Q-Gears team needs developers/artists/scripters!
« on: 2015-01-20 22:23:25 »
I see quite a few people in the past seemed like they would help out but then gave up because  they couldn't even get it to compile/run.

Hopefully things have changed now that the project has moved to github/travis-ci.

Anyways I thought I'd start this topic as a fresh shout out to anyone that wants to help out. Even if you feel you don't have the skills then still let me know, you could do something as simple as fixing up the license in each source etc :) We need some artists too to help with things like: https://github.com/q-gears/q-gears/issues/39

You can find me on IRC most of the time:

Servername:  irc.esper.net
Groupname:  EsperNet
Default Port:  6667
Channel: #qhimm.com

And off course the project is here, and as of now there are 2 branches of the project:

Q-Gears: https://github.com/q-gears/q-gears

New: If you want to help and are new and don't know what to do, you can start by checking out the issue list and seeing if you can fix or help with any of them: https://github.com/q-gears/q-gears/issues

And you can find builds (binary runables) here:

http://www.itscovarr.com/storage/qgears/


Some ideas about what would be useful skill knowledge wise:

-Gimp/Photoshop/Blender/3d modeling/animation (if you want to do art stuff)
-LUA/C++ or any other language (LUA is simple while C++ is harder, but most of the code will end up being in LUA)
-Git/github
-Someone with a mac to test mac builds/help get the build working
-Being able to reverse stuff or just general FF7/8/9 knowledge
-Knowing FF7 file formats
-Being able to figure out why stuff doesn't work (debugging)


116
Team Avalanche / Re: [HD Remake] Sector 6 Slums
« on: 2015-01-19 21:04:07 »
Nooooooo why didn't he upload the source :(

117
Team Avalanche / Re: [HD Remake] WIP Sector 5 slums
« on: 2015-01-19 00:38:17 »
No, it's the big plaza of the Sector 5 slums with a cluster of shops in the middle, and the rusting bus turned into a weapon shop. And all related indoor scenes. In other words, mds5_1, 5min1, 5min_2, mds5_i, mds5_dk, mds5_i, and mds5_m.
I do not intend to model the Wall Market afterwards.

From your last progress on that scene I thought it looked completed :)

118
Team Avalanche / Re: [HD Remake] WIP Sector 5 slums
« on: 2015-01-18 00:33:06 »
Hi folks,

I've released eals_1, the files are on the repo. I'll upload a picture tonight to show you how that looks. Again, if someone happens to be interested in trying out the field, while not having access to the repo, you can PM me so that I can email the files to you. 3 notes about that release:
- Given there's no simple way to get the waterfall to work properly, I've released this scene without the waterfall.
- I changed the color of the crepuscular rays (yellow to emulate a winter sun)
- The default character size (512 in Makou Reactor) works well.

That wraps up Elmya and Aerith's house. Now, onto the Sector 5 slum market.


This means wall market is next?

119
Decompiler update:

Code: [Select]
00000602: class zizizi {
00000602:   void init() {
00000602:     return;
00000602:   }
00000603:
00000603:   void main() {
00000603:     return;
00000603:   }
00000604:
00000604:   void script_1() {
00000604:     temp5_25 = 0;
00000608:     temp5_26 = rand();
0000060B:     temp5_26 = temp5_26 % 4;
0000060B:     if (temp5_26 == 0) {
00000615:       temp5_26 = 1;
00000619:     }
00000619:     while (temp5_25 < temp5_26) {
0000061F:       backgroundOn(temp5_27, 1);
00000623:       wait(1);
00000626:       backgroundOff(temp5_27, 1);
0000062A:       wait(1);
0000062D:       backgroundOn(3, 1);
00000631:       wait(1);
00000634:       backgroundOff(3, 1);
00000638:       wait(1);
0000063B:       temp5_25++;
00000640:     }
00000640:     return;
00000640:   }
00000640: };

Still a lot to do before the output is usable.

Edit: And now almost valid LUA being generated:

Code: [Select]
EntityContainer[ "dir" ] = {
  dir = nil

  init = function( self )
    self.dir = entity_manager:get_entity("dir")
    BTLMD(32)
    MUSIC(0)
    setMapName(2)
  end,

  main = function( self )
    repeat
      getEntityTriangleId(temp6_0, 1);
    until (true)
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "cl" ] = {
  cl = nil

  init = function( self )
    self.cl = entity_manager:get_entity("cl")
    Char(0)
    setPlayableChar(0)
  end,

  main = function( self )
  end,

  script_1 = function( self )
  end,
}

EntityContainer[ "av_b" ] = {
  av_b = nil

  init = function( self )
    self.av_b = entity_manager:get_entity("av_b")
    Char(1)
    placeObject(0, 0, 3437, 31524, 642)
    self.av_b:set_solid(true)
    if (2_0 >= 8) {
      self.av_b:set_talkable(true)
      self.av_b:set_solid(true)
      self.av_b:set_visible(false)
    }
  end,

  main = function( self )
    if (2_0 < 8) {
      self.av_b:set_move_auto_speed(0, 4096)
      move(0, 3646, 31219)
      2_0 = 8;
      playBlockingAnimation(3, 1)
      move(0, 4277, 31259)
      move(0, 4364, 32052)
      move(0, 3381, 32313)
      move(0, 3010, 32350)
      self.av_b:set_talkable(true)
      self.av_b:set_solid(true)
      self.av_b:set_visible(false)
    }
  end,

  script_1 = function( self )
  end,
}

120
Ah the bug is mine - the IFSW is longer than the IFUB, thats what I get for using the same logic for both.

121
Field md1_2 script av_b Init is:

This group is a field model (ID=1)
Place field Model (X=3437, Y=31524, Z=642, triangle ID=47)
Deactivate contact with field model
If $GameMoment >= 8 (else go to label 1)
   Deactivate talk script for the current field model
   Deactivate contact with field model
   Hide field model
Label 1
Return

My QGears tool for conversion outputs:

0000036F: void script_av_b_2_0_init() {
0000036F:   Char(1);
00000371:   placeObject(0, 0, 3437, 31524, 642);
0000037C:   setSolid(1);
0000037C:   if (game:variable_get(2_0) >= 8) {
00000386:     setTalkable(1);
00000388:     setSolid(1);
0000038A:   }
0000038A:   setVisible(0);
0000038C:   return;
0000038C: }


From:

0000036f: CHAR 1
00000371: XYZI 0, 0, 3437, 31524, 642, 47
0000037c: SOLID 1
0000037e: IFSW 2, 0, 0, 8, 4, 7 (False target address: 0x38a)
00000386: TLKON 1
00000388: SOLID 1
0000038a: VISI 0
0000038c: RET

It seems that VISI 0 should be outside of the if statement, but your tool is including it inside of the if statement? Is this a bug in your tool or mine? I think its yours because 0x37e+7+5 = 0x38A which is the VISI 0 meaning this will be executed when the if block is not entered.

122
Team Avalanche / Re: [HD Remake] WIP Sector 5 slums
« on: 2015-01-14 20:48:15 »
Going by the field script above, the issue is that the palette is being changed through code: it's not like the file contains 3 different palettes that get switched between (so you could just have 3 PNG files, one for each version). Instead, some script code changes part of each palette (and because it's script, in theory it could change it by a different amount based on variables, so there could be hundreds, or thousands of different possible palettes that get generated.)

In practice I guess that actually there are a limited number of variations of the palette that actually get set up by the script, but that's why there's no simple solution, if I understand it correctly.

(If I were coding a solution to this - which I'm not - then I'd probably set up the fragment shader to effectively emulate a paletted texture; have the actual data as an integer texture, and send a lookup table to the shader containing the palette data for it to translate. Would have reasonable performance on anything even semi-modern. Certainly a little complex though.)

QGears will have the same issue, I was thinking about building some meta data table that stores which tiles/pallet's are changed. Then it should be possible to generate "normal" texture based animations. But it would also mean rewriting some of the script opcodes so that they simply change the current animation frame rather than changing pixel data.


123
Team Avalanche / Re: [HD Remake] WIP Sector 5 slums
« on: 2015-01-11 16:12:43 »
The animation is done via field script, some set "parameter" states which seem to just swap tiles around, and some do it by changing the pallets of tiles at runtime. The waterfall appears to be done via the pallet method.

From Makuo reactor tool I think its this script:

Load the palette #8 in the position 0 (color count=256)
Label 1
Copy palette (sourcePal=0, targetPal=16, color count=256)
Multiply RGB(130, 130, 130) on the colors in a palette (sourcePal=0, targetPal=16, first color=Var[5][0], color count=10+1)
Multiply RGB(162, 162, 162) on the colors in a palette (sourcePal=0, targetPal=16, first color=Var[5][3], color count=10+1)
Load the position 16 in the palette #8 (color count=256)
Var[5][0] = Var[5][0] + 12 (8-bit)
Var[5][3] = Var[5][3] + 9 (8-bit)
If Var[5][0] > 100 (else go to label 2)
   Var[5][0] = 0 (8-bit)
Label 2
If Var[5][3] > 138 (else go to label 3)
   Var[5][3] = 0 (8-bit)
Label 3
Wait 1 frame
Go to label 1
Return

Seems like there is another script in that field related to this kind of animation too, I'd have a try with this tool? Perhaps you could add more layers/states and update the animation to use that instead?


124
Team Avalanche / Re: [HD Remake] WIP Sector 5 slums
« on: 2015-01-01 01:45:29 »
I can try to send you the older version with Blender internal shaders.
By the way, I have a question: do you know how the lighting and shading works? Mostly, I would like to know if there are ways to do better than what Blender internal engine can do - physical lighting (i.e. with light bouncing on objects to provide indirect light sources) and the kinds of shaders which can be used are important.

By the way, I'm into the layering process of ealin_2, and it's a pain in the butt. The way the layers are pre-cut is very annoying: the doors are glitchy, I even had to redesign them. For that matter, the original field has glitchy doors, if you pay attention (namely when the doors are open). I think I may have a workaround, but it's not straightforward (meaning, I have to deviate from how the scenes are originally pre cut for it to look decent).

I'm not sure what you're asking? The lighting and shading in ogre/qgears? I think there is a material editor: http://www.ogre3d.org/forums/viewtopic.php?f=11&t=48774

125
Team Avalanche / Re: [HD Remake] WIP Sector 5 slums
« on: 2014-12-31 16:24:18 »
They would probably look better - in qgears at least with updated models too and real time shadows. And more future proof, one day even the best we can do now will look low res (say when 4k is the norm) at least polygons tend to scale better.

Pages: 1 2 3 4 [5] 6 7