Difference between revisions of "JPC file"

From Pikmin Technical Knowledge Base
Jump to navigation Jump to search
(Moving list of particles to its own article (this one should cover the file format). Also, minor cleanup.)
Tag: Replaced
 
(110 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
{{note|The information on this page was gathered from eff2d_world_map.jpc and game.jpc. This page is not finished.}}
 
{{note|The information on this page was gathered from eff2d_world_map.jpc and game.jpc. This page is not finished.}}
  
'''JPC files''' represent an indexed collection of [[JPA file]]s, and contain information on particle systems and store [[BTI file|BTI images]].
+
'''JPC files''' represent an indexed collection of [[JPA file]]s, and contain information on the particle systems of ''Pikmin 2'', as well as [[BTI file|BTI images]] for the particles. A list of particle emitters and textures can be found [[Pikmin 2 particle list|here]].
  
 
== File header ==
 
== File header ==
Line 7: Line 7:
 
! Data type || Description
 
! Data type || Description
 
|-
 
|-
|  0x0 (8 char) || String, <code>JPAC2-10</code>.
+
|  0x0 (8 char) || Magic word string, <code>JPAC2-10</code>.
 
|-
 
|-
|  0x8 (uint16) || Number of BEM1 headers, total number of defined emitters.
+
|  0x8 (uint16) || Number of BEM1 blocks, total number of defined emitters.
 
|-
 
|-
 
|  0xA (uint16) || Number of BTI format textures (TEX1).
 
|  0xA (uint16) || Number of BTI format textures (TEX1).
Line 19: Line 19:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Data type || Description
+
! Offset || Data type || Description
 
|-
 
|-
|  0x0 (uint16)|| Identifier.
+
|  0x0 || uint16 || Identifier.
 
|-
 
|-
|  0x2 (uint16)|| {{unsure|Unknown - Always set to 5.}}
+
|  0x2 || uint16 || {{unsure|Unknown - Always set to 5.}}
 
|-
 
|-
|  0x4 (uint8)|| {{unsure|Unknown - Crash handler mentions something about JPAWorkData.}}
+
|  0x4 || uint8 || {{unsure|Unknown - Crash handler mentions something about JPAWorkData.}}
 
|-
 
|-
|  0x5 (uint8)|| {{unsure|Unknown - Crash handler mentions JPAKeyBlock? Related to alpha? [https://i.gyazo.com/5507d06343f68515f91c630545947f87.pngCrashes when changed to something else].}}
+
|  0x5 || uint8 || {{unsure|Unknown - Crash handler mentions JPAKeyBlock? Related to alpha?}} [https://i.gyazo.com/5507d06343f68515f91c630545947f87.png Crashes when changed to something else].
 
|}
 
|}
  
== BEM1 ==
+
== BEM1 block ==
 
{| class="wikitable"
 
{| class="wikitable"
! Data type || Description
+
! Offset || Data type || Description
|-
 
|  0x0 (4 char)|| String, <code>BEM1</code>.
 
|-
 
|  0x4 (uint32)|| Value is always <code>0x7C</code> since the data size of this section is static (124 bytes).
 
|-
 
|  0x8 (uint16)|| {{unsure|Unknown - Doesn't seem to do anything. Changing doesn't crash.}}
 
|-
 
|  0xA (uint8)|| {{unsure|Purpose unknown.}} Can be set from 0-7. Crashes resulted when set to 7. Crash handler mentions JPADyanmicBlocks? Setting numbers higher than 7 will wrap around to represent 0-7.
 
|-
 
|  0xB (uint8)|| Bit flags. {{unsure|Upper 4 bits not used? Going right to left the 1st bit doesn't seem to do anything noticeable. 2nd seems to turn off particle cap. 3rd seems to determine if the particle system should fire continuously or once. 4th makes the particles parented to the emitter.}}
 
|-
 
|  0x10 (float)|| Scale X, these scale values may be used for the shape that particles can spawn within.
 
|-
 
|  0x14 (float)|| Scale Y.
 
|-
 
|  0x18 (float)|| Scale Z.
 
|-
 
|  0x1C (float)|| Emitter's X offset from origin.
 
|-
 
|  0x20 (float)|| Emitter's Y offset from origin.
 
|-
 
|  0x24 (float)|| Emitter's Z offset from origin.
 
|}
 
 
 
== Game.JPC Particle List ==
 
{| class="wikitable"
 
! ID || Description || Internal name
 
|-
 
|  0000|| Flies from Doodlebug || Enemy_Fart_TBabyFly_ver01
 
|-
 
|  0001|| Fart from Doodlebug || Enemy_Fart_TBabaHe_1
 
|-
 
|  0002|| - || Enemy_Fart_TBabaHe_2
 
|-
 
|  0003|| - || Enemy_Baby_TBabyBecha
 
|-
 
|  0004|| - || Enemy_Baby_TBabyBorn
 
|-
 
|  0005|| - || Item_Barrel_TBarrelDead_1
 
|-
 
|  0006|| - || Item_Barrel_TBarrelDead_2
 
|-
 
|  0007|| - || Item_Barrel_TBarrelDead_3
 
|-
 
|  0008|| - || Enemy_Bomb_TBombrockABCD_1
 
|-
 
|  0009|| - || Enemy_Bomb_TBombrockABCD_2
 
|-
 
|  000a|| - || Enemy_Bomb_TBombrockABCD_3
 
|-
 
|  000b|| - || Enemy_Bomb_TBombrockABCD_4
 
|-
 
|  000c|| - || Enemy_Bomb_TBombrockEFGH_1
 
|-
 
|  000d|| - || Enemy_Bomb_TBombrockEFGH_2
 
|-
 
|  000e|| - || Enemy_Bomb_TBombrockEFGH_3
 
|-
 
|  000f|| - || Enemy_Bomb_TBombrockEFGH_4
 
|-
 
|  0010|| - || Piki_TBridgeAttack
 
|-
 
|  0011|| - || Item_Bridge_TBridgeSet
 
|-
 
|  0012|| - || Enemy_BombSarai_TBsaraiDead_1
 
|-
 
|  0013|| - || Enemy_BombSarai_TBsaraiDead_2
 
|-
 
|  0014|| - || Enemy_BombSarai_TBsaraiSupli
 
|-
 
|  0015|| - || Enemy_ImoMushi_TChouDown_1
 
|-
 
|  0016|| - || Enemy_ImoMushi_TChouDown_2
 
|-
 
|  0017|| - || Enemy_ImoMushi_TChouDown_3
 
|-
 
|  0018|| - || Enemy_ShijimiChou_TChouHit
 
|-
 
|  0019|| - || Cursor1
 
|-
 
|  001a|| - || Cursor2
 
|-
 
|  001b|| - || Cursor3
 
|-
 
|  001c|| - || Enemy_DamaGumo_TDamaDeadBomb
 
|-
 
|  001d|| - || Enemy_DamaGumo_TDamaDeadElecA
 
|-
 
|  001e|| - || Enemy_DamaGumo_TDamaDeadElecB
 
|-
 
|  001f|| - || Enemy_DamaGumo_TDamaDeadHahenA
 
|-
 
|  0020|| - || Enemy_DamaGumo_TDamaDeadHahenB
 
|-
 
|  0021|| - || Enemy_DamaGumo_TDamaDeadHahenC1
 
|-
 
|  0022|| - || Enemy_DamaGumo_TDamaDeadHahenC2
 
|-
 
|  0023|| - || Enemy_DamaGumo_TDamaFootw
 
|-
 
|  0024|| - || Enemy_DamaGumo_TDamaFoot_1
 
|-
 
|  0025|| - || Enemy_DamaGumo_TDamaFoot_2
 
|-
 
|  0026|| - || Enemy_DamaGumo_TDamaHahen
 
|-
 
|  0027|| - || Enemy_DamaGumo_TDamaSmoke
 
|-
 
|  0028|| - || Enemy_DamaGumo_TDamaWalkw_1
 
|-
 
|  0029|| - || Enemy_DamaGumo_TDamaWalkw_2
 
|-
 
|  002a|| - || Enemy_DamaGumo_TDamaWalkw_3
 
|-
 
|  002b|| - || Enemy_DamaGumo_TDamaWalk_1
 
|-
 
|  002c|| - || Enemy_DamaGumo_TDamaWalk_2
 
|-
 
|  002d|| - || Enemy_ElecHiba_TDenkiHiba_1
 
|-
 
|  002e|| - || Enemy_ElecHiba_TDenkiHiba_2
 
|-
 
|  002f|| - || Enemy_ElecHiba_TDenkiHiba_3
 
|-
 
|  0030|| - || Enemy_ElecHiba_TDenkiPole_1
 
|-
 
|  0031|| - || Enemy_ElecHiba_TDenkiPole_2
 
|-
 
|  0032|| - || Enemy_ElecHiba_TDenkipoleSign
 
|-
 
|  0033|| - || Enemy_ElecBug_TDnkmsHoudenA
 
|-
 
|  0034|| - || Enemy_ElecBug_TDnkmsHoudenB
 
|-
 
|  0035|| - || Enemy_ElecBug_TDnkmsThunderA
 
|-
 
|  0036|| - || Enemy_ElecBug_TDnkmsThunderB
 
|-
 
|  0037|| - || Item_DownFloor_TDownf1On
 
|-
 
|  0038|| - || Item_DownFloor_TDownf1Updown
 
|-
 
|  0039|| - || Item_DownFloor_TDownf1WOn
 
|-
 
|  003a|| - || Item_DownFloor_TDownf1WUpdown
 
|-
 
|  003b|| - || Item_DownFloor_TDownf2On
 
|-
 
|  003c|| - || Item_DownFloor_TDownf2Updown
 
|-
 
|  003d|| - || Item_DownFloor_TDownf2WOn
 
|-
 
|  003e|| - || Item_DownFloor_TDownf2WUpdown
 
|-
 
|  003f|| - || {{Unknown Might be Item_DownFloor_TDownf3On}}
 
|-
 
|  0040|| - || Item_DownFloor_TDownf3Updown
 
|-
 
|  0041|| - || Item_DownFloor_TDownf3WOn
 
|-
 
|  0042|| - || Item_DownFloor_TDownf3WUpdown
 
|-
 
|  0043|| - || Navi_TDopingSmoke_1
 
|-
 
|  0044|| - || Navi_TDopingSmoke_2
 
|-
 
|  0045|| - || Navi_TDopingSmoke_3
 
|-
 
|  0046|| - || Item_ElecGate_TEgateA
 
|-
 
|  0047|| - || Item_ElecGate_TEgateBC_1
 
|-
 
|  0048|| - || Item_ElecGate_TEgateBC_2
 
|-
 
|  0049|| - || Enemy_Egg_TEggdown
 
|-
 
|  004a|| - || Enemy_TEnemyBombM_1
 
|-
 
|  004b|| - || Enemy_TEnemyBombM_2
 
|-
 
|  004c|| - || Enemy_TEnemyBombM_3
 
|-
 
|  004d|| - || Enemy_TEnemyBombM_4
 
|-
 
|  004e|| - || Enemy_TEnemyBombS_1
 
|-
 
|  004f|| - || Enemy_TEnemyBombS_2
 
|-
 
|  0050|| - || Enemy_TEnemyBombS_3
 
|-
 
|  0051|| - || Enemy_TEnemyBombS_4
 
|-
 
|  0052|| - || Enemy_TEnemyDead
 
|-
 
|  0053|| - || Enemy_TEnemyDownSmoke
 
|-
 
|  0054|| - || Enemy_TEnemyDownWat_1
 
|-
 
|  0055|| - || Enemy_TEnemyDownWat_2
 
|-
 
|  0056|| - || Enemy_TEnemyDownWat_3
 
|-
 
|  0057|| - || Enemy_TEnemyHamonM
 
|-
 
|  0058|| - || Enemy_TEnemyHamonMInd
 
|-
 
|  0059|| - || Enemy_TEnemyWalkSmokeS
 
|-
 
|  005a|| - || Enemy_TEnemyWalkSmokeM
 
|-
 
|  005b|| - || TForestSakura
 
|-
 
|  005c|| - || Enemy_Frog_TFrogDive_1
 
|-
 
|  005d|| - || Enemy_Frog_TFrogDive_2
 
|-
 
|  005e|| - || Enemy_Frog_TFrogDive_3
 
|-
 
|  005f|| - || Enemy_Frog_TFrogDive_4
 
|-
 
|  0060|| - || Enemy_Frog_TFrogLanddrop_1
 
|-
 
|  0061|| - || Enemy_Frog_TFrogLanddrop_2
 
|-
 
|  0062|| - || Enemy_Frog_TFrogPota
 
|-
 
|  0063|| - || Pellet_TFruitsDownP_1
 
|-
 
|  0064|| - || Pellet_TFruitsDownP_2
 
|-
 
|  0065|| - || Pellet_TFruitsDownR_1
 
|-
 
|  0066|| - || Pellet_TFruitsDownR_2
 
|-
 
|  0067|| - || Cursor_TFueactBiriBase_1
 
|-
 
|  0068|| - || Cursor_TFueactBiriBase_2
 
|-
 
|  0069|| - || TFueactCircle
 
|-
 
|  006a|| - || Cursor4
 
|-
 
|  006b|| - || Enemy_FueFuki_TFuebugOnpa
 
|-
 
|  006c|| - || Enemy_Mar_TFusenAirhit_1
 
|-
 
|  006d|| - || Enemy_Mar_TFusenAirhit_2
 
|-
 
|  006e|| - || Enemy_Mar_TFusenAir_1
 
|-
 
|  006f|| - || Enemy_Mar_TFusenAir_2
 
|-
 
|  0070|| - || Enemy_Mar_TFusenAir_3
 
|-
 
|  0071|| - || Enemy_Mar_TFusenDead_1
 
|-
 
|  0072|| - || Enemy_Mar_TFusenDead_2
 
|-
 
|  0073|| - || Enemy_Mar_TFusenSui
 
|-
 
|  0074|| - || Enemy_GasHiba_TGasuHiba_1
 
|-
 
|  0075|| - || Enemy_GasHiba_TGasuHiba_2
 
|-
 
|  0076|| - || Piki_TGate1Attack_1
 
|-
 
|  0077|| - || Piki_TGate1Attack_2
 
|-
 
|  0078|| - || Item_Gate_TGate1Down_1
 
|-
 
|  0079|| - || Item_Gate_TGate1Down_2
 
|-
 
|  007a|| - || Piki_TGate2Attack_1
 
|-
 
|  007b|| - || Piki_TGate2Attack_2
 
|-
 
|  007c|| - || Item_Gate_TGate2Down_1
 
|-
 
|  007d|| - || Item_Gate_TGate2Down_2
 
|-
 
|  007e|| - || Piki_TPkS_Gate3Attack
 
|-
 
|  007f|| - || Item_BigFountain_TGeyserAct_1
 
|-
 
|  0080|| - || Item_BigFountain_TGeyserAct_2
 
|-
 
|  0081|| - || Item_BigFountain_TGeyserAct_3
 
|-
 
|  0082|| - || Item_BigFountain_TGeyserSet_1
 
|-
 
|  0083|| - || Item_BigFountain_TGeyserSet_2
 
|-
 
|  0084|| {{Unknown}} || {{Unknown}}
 
|-
 
|  0085|| {{Unknown}} || {{Unknown}}
 
|-
 
|  0086|| {{Unknown}} || {{Unknown}}
 
|-
 
|  0087|| {{Unknown}} || {{Unknown}}
 
|-
 
|  0088|| {{Unknown}} || {{Unknown}}
 
|-
 
|  0089|| {{Unknown}} || {{Unknown}}
 
|-
 
|  008a|| {{Unknown}} || {{Unknown}}
 
|-
 
|  008b|| - || Enemy_ChappyBase_THanachoN
 
|-
 
|  008c|| - || Enemy_ChappyBase_THanachoY
 
|-
 
|  008d|| - || Enemy_Houdai_THdamaHit1_1
 
|-
 
|  008e|| - || Enemy_Houdai_THdamaHit1_2
 
|-
 
|  008f|| - || Enemy_Houdai_THdamaHit1_3
 
|-
 
| - || - ||
 
|-
 
| - || - ||
 
|-
 
| - || - ||
 
|-
 
| - || - ||
 
|-
 
| - || - ||
 
|-
 
| - || - ||
 
|-
 
|  00de|| - || Navi_TOrimaLight_loozy_1
 
|-
 
|  00df|| - || Navi_TOrimaLightAct_loozy_1
 
|-
 
|  00e0|| - || Navi_TOrimaLightAct_loozy_2
 
|-
 
|  00e1|| - || Navi_TOrimaLight_loozy_2
 
|-
 
| - || - ||
 
|-
 
|  00f8|| Blue Onion || Onyon_ContainerAct_blue_1
 
|-
 
|  00f9|| Blue Onion || Onyon_ContainerAct_blue_2
 
|-
 
|  00fa|| Red Onion || Onyon_ContainerAct_red_1
 
|-
 
|  00fb|| Red Onion || Onyon_ContainerAct_red_2
 
|-
 
|  00fc|| Yellow Onion || Onyon_ContainerAct_yellow_1
 
|-
 
|  00fd|| Yellow Onion || Onyon_ContainerAct_yellow_2
 
|-
 
|  00fe|| - || Onyon_TOnyonEatAB_1
 
|-
 
|  00ff|| - || Onyon_TOnyonEatAB_2
 
|-
 
|  0100|| - || Onyon_TOnyonEatC
 
|-
 
|  0101|| - || Onyon_TOnyonLay_1
 
|-
 
|  0102|| - || Onyon_TOnyonLay_2
 
|-
 
|  0103|| - || Onyon_TOnyonPuffKira
 
|-
 
|  0104|| - || Onyon_TOnyonPuffPuff
 
|-
 
|  0105|| Blue Onion || Onyon_Container_Blue
 
|-
 
|  0106|| Red Onion || Onyon_Container_Red
 
|-
 
|  0107|| Yellow Onion || Onyon_Container_Yellow
 
|-
 
| - || - ||
 
|-
 
|  0153|| Purple Pikmin ghost || Piki_TPkS_Dead_purple
 
|-
 
|  0154|| Blue Pikmin ghost || Piki_TPkS_Dead_blue
 
|-
 
|  0155|| Red Pikmin ghost || Piki_TPkS_Dead_red
 
|-
 
|  0156|| White Pikmin ghost || Piki_TPkS_Dead_white
 
|-
 
|  0157|| Yellow Pikmin ghost || Piki_TPkS_Dead_yellow
 
|-
 
| - || - ||
 
|-
 
| - || - ||
 
|-
 
|  0169|| Purple Pikmin idle halo || Piki_TPkToeKourin_purple
 
|-
 
|  016A|| Blue Pikmin idle halo || Piki_TPkToeKourin_blue
 
|-
 
|  016B|| Red Pikmin idle halo || Piki_TPkToeKourin_red
 
|-
 
|  016C|| White Pikmin idle halo || Piki_TPkToeKourin_white
 
 
|-
 
|-
016D|| Yellow Pikmin idle halo || Piki_TPkToeKourin_yellow
+
0x0 || 4 char || Magic word string, <code>BEM1</code>.
 
|-
 
|-
| - || - ||  
+
| 0x4 || uint32 || Value is always <code>0x7C</code> since the data size of this section is static (124 bytes).
 
|-
 
|-
| - || - ||  
+
| 0x8 || uint16 || {{unsure|Unknown - Doesn't seem to do anything. Changing doesn't crash.}}
 
|-
 
|-
01E0|| Ranging Bloyster blue tail glow ||  
+
0xA || uint8 || {{unsure|Purpose unknown.}} Can be set from 0-7. Crashes resulted when set to 7. Crash handler mentions JPADyanmicBlocks? Setting numbers higher than 7 will wrap around to represent 0-7.
 
|-
 
|-
01E1|| Ranging Bloyster... ||
+
0xB || uint8 || Bit flags. {{unsure|Upper 4 bits not used? Going right to left the 1st bit doesn't seem to do anything noticeable. 2nd seems to turn off particle cap. 3rd seems to determine if the particle system should fire continuously or once. 4th makes the particles parented to the emitter.}}
 
|-
 
|-
01E2|| Ranging Bloyster red tail glow ||  
+
0x10 || float || Scale X, these scale values may be used for the shape that particles can spawn within.
 
|-
 
|-
01E3|| Ranging Bloyster... ||
+
0x14 || float || Scale Y.
 
|-
 
|-
| - || - ||  
+
| 0x18 || float || Scale Z.
 
|-
 
|-
0281|| Green (Bulbmin) idle halo || Piki_TPkToeKourin_green
+
0x1C || float || Emitter's X offset from origin.
 
|-
 
|-
| - || - ||  
+
| 0x20 || float || Emitter's Y offset from origin.
 
|-
 
|-
| - || - ||  
+
| 0x24 || float || Emitter's Z offset from origin.
 
|}
 
|}
  
 
[[Category:File formats]]
 
[[Category:File formats]]
 
[[Category:Pikmin 2]]
 
[[Category:Pikmin 2]]

Latest revision as of 19:06, 26 August 2021

Editor's note: The information on this page was gathered from eff2d_world_map.jpc and game.jpc. This page is not finished.

JPC files represent an indexed collection of JPA files, and contain information on the particle systems of Pikmin 2, as well as BTI images for the particles. A list of particle emitters and textures can be found here.

File header[edit]

Data type Description
0x0 (8 char) Magic word string, JPAC2-10.
0x8 (uint16) Number of BEM1 blocks, total number of defined emitters.
0xA (uint16) Number of BTI format textures (TEX1).
0xC (uint32) Total size of data excluding the TEX1 sections.

Before the BEM1 section, every particle emitter starts off with 8 bytes of data:

Offset Data type Description
0x0 uint16 Identifier.
0x2 uint16 Unknown - Always set to 5.[unsure]
0x4 uint8 Unknown - Crash handler mentions something about JPAWorkData.[unsure]
0x5 uint8 Unknown - Crash handler mentions JPAKeyBlock? Related to alpha?[unsure] Crashes when changed to something else.

BEM1 block[edit]

Offset Data type Description
0x0 4 char Magic word string, BEM1.
0x4 uint32 Value is always 0x7C since the data size of this section is static (124 bytes).
0x8 uint16 Unknown - Doesn't seem to do anything. Changing doesn't crash.[unsure]
0xA uint8 Purpose unknown.[unsure] Can be set from 0-7. Crashes resulted when set to 7. Crash handler mentions JPADyanmicBlocks? Setting numbers higher than 7 will wrap around to represent 0-7.
0xB uint8 Bit flags. Upper 4 bits not used? Going right to left the 1st bit doesn't seem to do anything noticeable. 2nd seems to turn off particle cap. 3rd seems to determine if the particle system should fire continuously or once. 4th makes the particles parented to the emitter.[unsure]
0x10 float Scale X, these scale values may be used for the shape that particles can spawn within.
0x14 float Scale Y.
0x18 float Scale Z.
0x1C float Emitter's X offset from origin.
0x20 float Emitter's Y offset from origin.
0x24 float Emitter's Z offset from origin.