約 4,951,803 件
https://w.atwiki.jp/varon/pages/45.html
準備したマップ画像に描かれたグリッドと、VASSALで準備されているグリッドを合わせ込む方法です。 まずはマップ画像を準備します。スキャナなどで画像を取り込む場合は、できるだけ垂直・水平方向を合わせるようにしてください。大きい画像では、微妙な角度のズレでも全体のズレが大きくなるので、スキャンした画像を画像加工ツールで回転させ角度を調整すると良いでしょう。なお、サンプル画像ではベルゴルツ作戦.modを使っています。 準備したマップ画像をVASSALに取り込みます。画像の取り込み方法はマップ定義編を御覧ください。 ベルゴルツ作戦のマップ画像は、グリッドを描く範囲が限定されているので、Multi-zone Gridで描く範囲を指定します。Multi-zone Gridの詳しい設定方法はマップ定義編を御覧ください。 続いて、VASSAL側のグリッドを準備します。ベルゴルツ作戦のグリッドは六角形なので、向きを合わせたHex Gridを設定します。グリッドが見えるよう、Show Gridにチェックを入れます。グリッド線の色は、マップ画像のグリッド線とは異なる目立つ色にします。数値は変えなくて構いません。準備ができたら、Edit Gridで細かい調整をします。 まずはグリッドの大きさを合わせます。画面下部の「Set Grid Shape」ボタンを押すと、 何やらメッセージが表示されます。「3つの頂点をクリックすれば、その位置に合わせたグリッドを作成します」的なことが書いてあります(←いい加減)。 グリッドの頂点を3ヶ所クリックします。すると、 クリックした頂点を基準にグリッドが描かれました。 先ほど描いたグリッドは大きさが微妙に合っていないので、大きさを調整します。CTRL + カーソルキーを押すと、押したカーソルキーの方向に応じて、グリッドの大きさも変わります。 グリッドの大きさを合わせたら、続いてグリッドの位置を合わせます。カーソルキーのみを押すと、押したカーソルキーの方向に応じて、グリッドが移動します。 マップ画像全体を確認して、グリッドの位置や大きさが合っていなければ、更に調整します。グリッドの位置を合わせ終えたら、この設定を「Save」で保存します。 グリッドの大きさや位置の調整は、もちろん、数値入力でも可能です。 最後にShow Gridのチェックを外し、グリッドを透明にします。これでグリッドは見えなくなりますが、PieceやCardはグリッド設定に沿って配置されます。 グリッドを合わせ込んだマップにユニットを配置した例です。グリッド設定の範囲外ではユニットは何処にでも置けますが、グリッド設定の範囲内ではグリッドの中心にしかユニットを置けなくなっています。
https://w.atwiki.jp/danevo/pages/29.html
DanceEvolution in DDR! 好きな曲の振り付けを、DDRのパネル上で踊ってみませんか? その為には、通常収録されている譜面では、振り付けと合わないことがあります。 そこで、現在までに発売されたPlayStation/PlayStation2版DDRのEDIT機能を使用して、 振り付けを踊りやすい譜面を作ることが必要となります。 作成したEDIT譜面を家庭用DDRでそのまま遊ぶも良し。 アーケードに持って行ってゲームセンターで楽しむも良し。 稼働を開始したDanceEvolution ARCADEとともに、DDRと組み合わせて、ダンエボをもっと楽しみましょう! 概要 2013/6/12より、全国で順次稼働している(新)DDRでもEDIT機能が使用可能になりました。稼働を継続しているDDR X、DDR X2、DDR X3vs2ndMIXでもプレイ可能です。 DDR上のEDIT機能については以下のサイトに詳しく記述されています。DanceDanceRevolution EDIT まとめwiki AC版DDRで、作成したEDIT DATAをプレイする為には・PS2版「Dance Dance Revolution X」・USBメモリが必須となります。 PS版やX以前に発売されたPS2版DDRだけを購入しても、AC版DDRでプレイすることはできません。 収録タイトル表 ※日本で発売されたPS/PS2版のDDRを対象としています。海外版・PS以外の機種のもの、該当曲が収録されていないタイトル(1st, STRIKE)は含まれていません。 ※DanceEvolution ARCADEに収録されていない楽曲は太字で表記しています。2013/11/20現在、YESTERDAY以外の楽曲は全てACへ収録済みです。 ※略称について Best BEST HITS EXM EXTRA MIX EXT EXTREME PTC Party Collection FES FESTIVAL 曲名 2nd 3rd Best 4th EXM 5th MAX MAX2 EXT PTC NOV NOV2 X FES A Geisha s Dream ○ L amour et la liberté(Darwin DJ Silver remix) ○ HYSTERIA 2001 ○ Keep on movin (旧音源) ○ ○ Keep on movin (DMX Mix) ○ ○ exotic ethnic ○ Let the beat hit em!(CLASSIC R B STYLE) ○ ○ SAKURA ○ ○ Brilliant 2U (旧音源) ○ ○ ○ ○ ○ ○ Secret Rendez-vous ○ MY SUMMER LOVE ○ ○ ○ AFRONOVA PRIMEVAL ○ ○ ○ CAN T STOP FALLIN IN LOVE-super euro version- ○ STILL IN MY HEART ○ ○ ○ BURNIN THE FLOOR ○ ○ HIGHER ○ ○ ○ Every Day, Every Night(NM STYLE) ○ My Only Shining Star ○ BABY BABY GIMME YOUR LOVE ○ ○ ○ INTO YOUR HEART(Ruffage remix) PS/PS2版未収録 La receta KIMONO♥PRINCESS Crazy Control SUPER SAMURAI We Can Win the Fight AC版未収録 Unity Open Your Eyes Lover s High Mess With My Emotions NIGHT OF FIRE ParaParaParadiseに収録 YESTERDAY CAN T STOP FALLIN IN LOVE-super euro version- 備考 購入するならEXTREMEかParty Collectionがおススメ。過去作に収録された曲もかなり入っており、DanceEvolution収録曲も多いです。ただし、出回っている数は少ないので値段は高めです。 再録の Keep on movin は、旧音源 Keep on movin (DMX Mix) をアレンジした物となっているので、完全に再現する場合はこちらをEDITする必要ありKeep on movin (旧音源)でもダンスの再現は出来ますが、イントロから後の部分がカットされています。 Keep on movin と Brilliant 2U はいずれも旧音源となっていますが、曲構成は殆ど変わらないので再現する分には問題ありません。 半分近くの曲が他タイトルに収録されず、1作のみでしかEDITできません。 NIGHT OF FIRE と YESTERDAY は、ParaParaParadiseの全バージョンに収録されており、同じ振り付けで踊ることが可能。ただし、PS2版・AC版共に希少なので注意。また、CAN T STOP FALLIN LOVE-super euro version-も同じ振り付けで踊ることが可能。ただしこちらはAC1stMIXには収録されていない。1stPlus以降と家庭用PS2版には収録されている。 DDR SuperNOVA版のCAN T STOP FALLIN IN LOVE -super euro version-は曲頭が4小節分削られ短くなっている。曲開始と同時に腕を振り上げで踊ることはできる。 一例 CAN T STOP FALLIN IN LOVE -super euro version-の場合、SuperNOVAのEDITモードで06小節目から2分のリズムで→、←、→、←と、最後まで。66小節目の→で曲尾。お好みでフリーズアローにしても良し、下矢印を混ぜてみても良し。 (新)DDRには公式振り付け譜面として、Wow Wow VENUS(家庭用DanceEvolution未収録曲)のBEGINNER譜面・BASIC譜面がある。
https://w.atwiki.jp/arma3editor/pages/8.html
Arma 3 Weapon Config Guidelines Arma 3 Weapon Config Guidelines Contents 1 Intro 2 Additional functionality compared to A2/OA 3 Model requirements {p3d} 4 Model config changes {model.cfg} 5 New config parameters {config.cpp} 5.1 Slotable weapons 5.1.1 Muzzle accessories 5.1.2 Optics 5.1.3 Side Accessory 5.2 Custom reload animations 5.3 Underwater weapons 5.4 Ammo changes on fly and on hit 5.5 Explosion shielding 6 Reference Intro 101 - How to set up a weapon for Arma 3 Please be aware of our Arma 3 modding license http //community.bistudio.com/wiki/Arma_3_Modding_License Additional functionality compared to A2/OA Slotable weapon accessories Custom reload animations Adjustable sights Underwater weapons Ammo changes on fly and on hit Rotating muzzle-flash Explosion shielding Model requirements {p3d} proxies for slotable accessories muzzle accessory should be on proxy \A3\data_f\proxies\weapon_slots\MUZZLE optics should be on proxy \A3\data_f\proxies\weapon_slots\TOP side accessory should be on proxy \A3\data_f\proxies\weapon_slots\SIDE all these proxies could be redefined in cfgWeapons Weapon WeaponSlotsInfo XXX linkProxy parameter where XXX is the slot name selections for folding iron sights You need to create selections and axes for iron sights if You want them folded once the optics is put on the weapon Front part should be named ForeSight with ForeSight_axis in memory lod Rear part should be named BackSight with BackSight_axis in memory lod adjustable sights for grenade launchers there needs to be a selection that is going to rotate (in case of collimator sights), default naming is OP this selection needs to have an axis in memory lod, default naming is OP_axis there needs to be a focus point, the best place is the red dot of collimator, with memory point OP_look by default and several points for eye, usually OP_eyeX where X is the number of the point. Good practice is to place them in same distance form focus point Model config changes {model.cfg} custom reload animation have a good use of newly added parameter unHideValue for hide type of animations - you are now able to make asymmetrical animations eg. for hiding of magazine {model.cfg} class magazine_hide { type = "hide"; source = "reloadMagazine"; selection = "magazine"; minValue = 0.000000; maxValue = 1.00000; hideValue = 0.220; unhideValue = 0.550; }; the animations could look a bit better by simply adding a translation for the magazine and adding an axis for that in model - magazine should translate at first, then disappear, appear and translate back {model.cfg} class magazine_reload_move_1 { type = "translation"; source = "reloadMagazine"; selection = "magazine"; axis = "magazine_axis"; minValue = 0.145; maxValue = 0.170; offset0 = 0.0; offset1 = 0.5; }; foldable iron sights use hasOptics controller {model.cfg} class BackSight_optic { type = "rotation"; source = "hasOptics"; selection = "BackSight"; axis = "BackSight_axis"; memory = 1; minValue = 0.0000000; maxValue = 1.0000000; angle0 = 0.000000; angle1 = (rad 90); }; new animation controllers zeroing and zeroing2 take values from discreteDistance[] of first and second muzzle of the weapon. The value is index number of current zeroing in the array starting with zero (that means the first value is 0, second is 1, the last is number of discrete distances plus one). It might be used for iron sights of the weapon if desired but better use is for UGL collimator sights rotation {model.cfg} class OP_ROT { type="rotation"; source="zeroing2"; // use second muzzle zeroing for rotation sourceAddress="loop"; // loop when phase out of bounds selection="OP"; // selection we want to rotate axis="OP_axis"; // has its own axis minValue=0; maxValue=3; // this weapon has array with 4 distances angle0="rad 0"; angle1="rad 65"; }; rotating muzzle flashes are done using a new animation source ammoRandom which changes it's value every time weapon is fired. Various degrees of rotation may be set up by using correct muzzle flash shape and minValue maxValue combination. {model.cfg} class MuzzleFlashROT { type="rotationX"; source="ammoRandom"; //use ammo count as phase for animation sourceAddress="loop"; //loop when phase out of bounds selection="zasleh"; //selection we want to rotate axis=""; //no own axis - center of rotation is computed from selection centerFirstVertex=true; //use first vertex of selection as center of rotation minValue=0; maxValue=4; //rotation angle will be 360/4 = 90 degrees angle0="rad 0"; angle1="rad 360"; }; New config parameters {config.cpp} Slotable weapons Available slots are defined in each weapon but are usually inherited from a parent weapon. They are stored as classes in class WeaponSlotsInfo which contains the slots and parameters for inventory Mass is a new unit used to describe weight and volume of an object used. Each container has a set capacity in the same units. allowedSlots[] is an array of slot numbers where you may put the weapon. 701 stands for vest, 801 stands for uniform, 901 stands for backpack each weapon slot is a separate subclass in class WeaponSlotsInfo parameter linkProxy defines a proxy in weapon model for said slot (see standard names on [[top]]) parameter displayName describes a mouse-over name of slot in Inventory array compatibleItems[] lists possible accessory placeable into that slot. Most weapons are able to have any RIS equipment, but eg. muzzle accessory differs according to caliber. external classes CowsSlot and PointerSlot are used for standard optics and side accessory. That means these classes are outside cfgWeapons and changeable for all weapons at once. class SlotInfo; class CowsSlot SlotInfo { // targetProxy linkProxy = "\A3\data_f\proxies\weapon_slots\TOP"; // display name displayName = $STR_A3_CowsSlot0; // class names with items supported by weapon compatibleItems[] = {"optic_Arco","optic_aco", "optic_ACO_grn","optic_hamr","optic_Holosight"}; }; class PointerSlot SlotInfo { // targetProxy linkProxy = "\A3\data_f\proxies\weapon_slots\SIDE"; // display name displayName = $STR_A3_PointerSlot0; // class names with items supported by weapon compatibleItems[] = {"acc_flashlight","acc_pointer_IR"}; }; class cfgWeapons { class myWeapon { class WeaponSlotsInfo { mass = 4; /// default mass of a weapon class MuzzleSlot SlotInfo { // targetProxy linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; // display name displayName = "Muzzle Slot"; // class names with items supported by weapon compatibleItems[] = {}; // moved to each weapon }; class CowsSlot CowsSlot {}; class PointerSlot PointerSlot {}; allowedSlots[] = {901}; // you simply cannot put this into your pants }; }; }; Muzzle accessories suppressors are configured as a weapon inheriting some item abilities from class ItemCore the class itself consists only from scope, displayName, picture and model, there is a separate subclass ItemInfo with all the required parameters there is subclass MagazineCoef inside class ItemInfo with parameter initSpeed - this is just a multiplier of initSpeed of weapon's magazine subclass AmmoCoef of class ItemInfo has more parameters for the ammo shoot through the suppressor hit is the coefficient of hit of original ammo visibleFire, audibleFire, visibleFireTime and audibleFireTime are coefficients for detection upon shooting the weapon higher cost coefficient should make AI think more about shooting the suppressed weapon typicalSpeed and airFriction coefficients change the ballistic characteristics of the ammo there are alternate muzzleEnd and alternativeFire directly inside class ItemInfo to have different muzzle effects origin and muzzle flashes you may set up modes[] and specific fire modes for the suppressed weapon directly in class ItemInfo class Mode_SemiAuto; class cfgWeapons { class ItemCore; class InventoryMuzzleItem_Base_F; class myMuzzleAccessory { scope = 2; displayName="My Muzzle Accessory"; picture="\A3\weapons_F\Data\UI\myMuzzleAccessory_CA.paa"; model = "\A3\weapons_f\acc\myMuzzleAccessory"; class ItemInfo InventoryMuzzleItem_Base_F { class MagazineCoef { initSpeed = 0.8; }; class AmmoCoef { hit=0.8; visibleFire=0.3; audibleFire=0.8; visibleFireTime=0.5; audibleFireTime=1.0; cost = 1.0; typicalSpeed= 0.8; airFriction = 1.0; }; muzzleEnd = "zaslehPoint"; // memory point in muzzle supressor's model alternativeFire = "Zasleh2"; // class in cfgWeapons with model of muzzle flash modes[] = {"Single"}; class Single Mode_SemiAuto { begin1[]={"A3\sounds_f\weapons\silenced\silent-25.wav", db0, 1,600}; begin2[]={"A3\sounds_f\weapons\silenced\silent-26.wav", db0, 1,600}; soundBegin[]={begin1,0.5, begin2,0.5}; closure1[]={"A3\sounds_f\weapons\closure\closure_rifle_2.wav", db0, 1,300}; closure2[]={"A3\sounds_f\weapons\closure\closure_rifle_3.wav", db0, 1,300}; soundClosure[]={closure1,0.5, closure2,0.5}; weaponSoundEffect = "DefaultRifle"; }; }; }; }; Optics in addition to default parameters mentioned in muzzle accessories class, there is weaponInfoType to choose a correct resource for weapon info directly inside optic class there is the same ItemInfo subclass but with different parameters don't forget that ItemInfo inherits some parameters from InventoryOpticsItem_Base_F (eg. muzzlePos and muzzleEnd) in case you rename the memory points parameter opticType is used for balancing the optics for specific fire modes (should be further described by balancing crew) modelOptics is the 2D model for selected optics subclass OpticsModes works the same way it used to work in A2/OA class cfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; class myOpticsAccessory { scope = 2; displayName="My Optics Accessory"; picture="\A3\weapons_F\Data\UI\myOpticsAccessory_CA.paa"; model = "\A3\weapons_f\acc\myOpticsAccessory"; weaponInfoType = "RscOptics_myOptics"; class ItemInfo InventoryOpticsItem_Base_F { mass = 7; modelOptics="\A3\Weapons_f\acc\reticle_MyOptics_F"; class OpticsModes { class MyOptics { opticsID = 1; useModelOptics = true; opticsPPEffects[]={"OpticsCHAbera1","OpticsBlur1"}; opticsZoomMin = 0.0555; opticsZoomMax = 0.1300; opticsZoomInit= 0.1300; discreteDistance[] = {100,300,400,500,600,700,800,900,1000}; discreteDistanceInitIndex = 1; distanceZoomMin = 100; distanceZoomMax = 1000; nFovLimit = 0.07; discretefov[] = {0.1300,0.0555}; discreteInitIndex = 0; modelOptics[] = {"\A3\Weapons_f\acc\reticle_MyOptics_F", "\A3\Weapons_f\acc\reticle_MyOptics_z_F"}; memoryPointCamera = "opticView"; visionMode[] = {"Normal","NVG"}; opticsFlare = true; opticsDisablePeripherialVision = true; cameraDir = ""; }; class IronOnTopOfMyOptics MyOptics { opticsID = 2; useModelOptics = false; opticsFlare = false; opticsDisablePeripherialVision = false; opticsZoomMin=0.375; opticsZoomMax=1.1; opticsZoomInit=0.75; memoryPointCamera = "eye"; visionMode[] = {}; discretefov[] = {}; }; }; }; }; }; Side Accessory the class of side accessory is made the same way as for muzzle accessory subclass ItemInfo contains some specific parameters, but they work the same way as they did in A2/OA class cfgWeapons { class ItemCore; class InventoryFlashLightItem_Base_F; class mySidesAccessory { scope = 2; displayName="My Sides Accessory"; picture="\A3\weapons_F\Data\UI\mySidesAccessory_CA.paa"; model = "\A3\weapons_f\acc\mySidesAccessory"; class ItemInfo InventoryFlashLightItem_Base_F { mass = 9; class Pointer { irLaserPos="laser pos"; irLaserEnd="laser dir"; }; class FlashLight{}; }; }; }; Custom reload animations parameter reloadAction is now for both a magazine and the weapon. if it is not defined for any of them, default reload is played. if the parameter is defined for the weapon but isn't defined for a magazine, reloadAction for weapon is played upon reloading said weapon if the magazine has reloadAction defined, the action selected by this parameter is played every time (not depending on weapon). This ensures different reloads for different magazines of one weapon (eg. UGLs) the action chosen by reloadAction is played according to config of animations for said soldier (action in CfgMovesMaleSdr leads to a state in CfgGesturesMale for default soldier), different target states could be defined for different action maps (eg. there could be a different reload gesture for crouch and prone with rifle) class CfgMovesBasic { class DefaultDie; class ManActions { reloadMyWeapon = "reloadMyWeapon"; }; }; class CfgGesturesMale { class Default; class States { class reloadMyWeapon Default { file="\A3\anims_f\Data\Anim\Sdr\wop\erc\stp\rld\rfl\reloadMyWeapon.rtm"; looped=0; speed=0.400000; mask="handsWeapon"; headBobStrength=0.200000; headBobMode=2; rightHandIKBeg=1; rightHandIKEnd=1; leftHandIKCurve[]={0,1,0.050000,0,0.950000,0,1,1}; }; }; }; class cfgWeapons { class myWeapon { reloadAction = "reloadMyWeapon"; }; }; Underwater weapons weapons with canShootInWater set to 1 are able to shoot under water parameter soundBeginWater[] has the same use as soundBegin[] and defines what sounds and with what probability is going to be played while shooting under the water surface, both of them are defined per fire mode class Mode_SemiAuto; class cfgWeapons { class myWeapon { modes[] = {"Single"}; // this example weapon has just one fire mode canShootInWater = 1; // allows to shoot under water class Single Mode_SemiAuto { begin1[]={"A3\sounds_f\weapons\myWeapon\myWeapon_st_1b.wav", db5, 1,900}; begin2[]={"A3\sounds_f\weapons\myWeapon\myWeapon_st_2b.wav", db5, 1,900}; begin3[]={"A3\sounds_f\weapons\myWeapon\myWeapon_st_3b.wav", db5, 1,900}; soundBegin[]={begin1,0.33, begin2,0.33, begin3,0.34}; // all three sounds have roughly the same probablity beginwater1[]={"A3\sounds_f\weapons\myWeapon\underwater_myWeapon_st_1b.wav", db0, 1,200}; beginwater2[]={"A3\sounds_f\weapons\myWeapon\underwater_myWeapon_st_2b.wav", db5, 1,200}; beginwater3[]={"A3\sounds_f\weapons\myWeapon\underwater_myWeapon_st_3b.wav", db5, 1,200}; soundBeginWater[]={beginwater1,0.33, beginwater2,0.33, beginwater3,0.34}; // all three sounds have roughly the same probablity }; }; }; underwater ammo has some different characteristics waterFriction is underwater equivalent of airFriction and supercavitating ammunition has this close to zero. Standard ammo doesn't have this set and that means it is set to -0.4 by default (ie. stops nearly right after entering water) timeToLive for underwater ammo is rather low to let it be harmless after some 40 meters the fancy bubble effect is done by having effectFly set to AmmoUnderwater, you'll try to modify it to work even on ground and we all know it class cfgAmmo { class BulletBase; class myAmmo BulletBase // For myWeapon { waterFriction = -0.00096; // nearly direct line underwater timeToLive = 0.12; // that's enough for 45 meters underwater effectFly = "AmmoUnderwater"; }; }; Ammo changes on fly and on hit there are two new simulations of ammo available mainly for artillery, but usable for many other means simulation shotSubmunition allows to deploy multiple ammo from the parent one upon meeting certain conditions parameter submunitionAmmo defines class of newly created ammo and this could be used multiple times you could set the inherited ammo and it would spread in cone according to submunitionConeAngle (and it is in degrees) submunitionConeType[] describes pattern of ammo in detail, first part is a distribution function ("random", "randomcenter", "poissondisc", "poissondisccenter", "custom"), second parameter is number of ammo except of custom one, where it is another array of pairs for specific locations submunitionConeType[] = {"random", 10}; submunitionConeType[] = {"randomcenter", 10}; submunitionConeType[] = {"poissondisc", 10}; submunitionConeType[] = {"poissondisccenter", 10}; submunitionConeType[] = {"custom", {{0,0}, {-1,0}, {1,0}, {0,-1}, {0,1}} }; parameter triggerDistance is used to deploy ammo in set 3D distance before expected target parameter triggerTime is used to deploy ammo in set time after being fired parameter triggerSpeedCoef is a coefficient of speed of inherited ammo relative to speed of parent ammo for Artillery computer use array aimAboveTarget[] and aimAboveDefault as a index of the array to set different heights to change the ammo to something different (eg. flare) class cfgAmmo { class SubmunitionBase; class MyAmmo SubmunitionBase { submunitionAmmo = "MySubmunitionAmmo"; submunitionConeType[] = {"poissondisc", 10}; submunitionConeAngle = 10; triggerDistance = 100; }; }; simulation shotDeploy is used to change ammo upon impact (eg. change to a mine) it uses the same submunitionAmmo parameter as described above class cfgAmmo { class ShotDeployBase; class Mo_ClassicMineRange ShotDeployBase { submunitionAmmo = "APERSMine_Range_Ammo"; // some random mine deployable by a mortar airFriction = 0; // artillery ammo works better without friction EffectFly = "ArtilleryTrails"; // some funky effect of smoke trails and stuff }; }; Explosion shielding class hitpoints in configuration of all vehicles (including soldiers) has got a new parameter called explosionShielding this parameter simply multiplies inidrectHit taken from explosives (that makes it explosion vulnerability in an effective way) - the higher it is the more damage would selected hitpoint get from the hit class cfgVehicles { class myVehicle { class HitPoints { class HitLFWheel {armor=0.12; explosionShielding = 0.8;}; }; }; }; Reference You may want to see Arma 2 Weapon to Arma 3 for correct icons and other stuff. This page is discussed on the BI forums
https://w.atwiki.jp/wicky/pages/50.html
save …データを保存する。
https://w.atwiki.jp/winningeleven2011/pages/42.html
はじめに 基本 Q A AFSexplorer編 Kitserver編①最新のキットサーバーと最新のパッチをダウンロードして解凍 ②最新のキットサーバー中のimgフォルダとnamesフォルダを最新のパッチのものと入れ替える。 ③自分のPES2009フォルダに"②で作ったkitserverフォルダ"を移動なりコピーなりして置く。 ④マイドキュメントにあるセーブフォルダに入ってるファイルをコピー はじめに パッチを当てる方法はAFSexplorerとKitserverの2種類の方法があります。 Kitserverのほうが簡単なので、初めての方はまずKitserver編をみてみましょう。 パッチに関してはいろいろな種類があります。自分の好みのものをみつけてください。 なかにはKitserverでは当てられないものもあるので、その場合はAFSexplorer編を参考にして 頑張ってみてください。 何をあてたらいいのかわからないって方は"BURGUM PATCH for PES 2009"をおすすめします。 Kitserverを使ってできます。 基本 だいたいどのパッチもフォルダ名が対象のパッチをあてる先のファイル名になっている。 例えばフォルダ名「cv01」だったらPES2009インスト先のフォルダ「img」内のcv01.imgファイルへあてるって感じ。 Q A Q "rv0c_x.img"ってやつがみつかりません。 "rv0c_x.img"の「x」に当たる部分は各言語の英語頭文字だから通常Englishなので、"rv0c_e.img"ファイルの事。 AFSexplorer編 パッチをあてる作業には「AFSexplorer」というツールを使う。 パッチのReadMe通りにこのツールを使って各パッチ入れていく。 まずAFSexplorerの基本的な使い方。 ツールを立ち上げたら上のメニューから FILEをクリック そのなかの「IMPORT AFS File」をクリック 2. 表示ファイルの種類を全てのファイル(all~)にする。 (旧PESは全て拡張子がafsだったのでデフォでは今のPESの形式の拡張子imgファイルが表示されない。) 3.表示されたimgファイルの中からファイルを選択(要バックアップ)→上の(例)だとcv01.img 4.次にYES・NOと言うダイアログが表示された場合はとにかく「NO」を選ぶ。 →デフォのimgだとこのダイアログ表示され次回から表示されない。 5.メニューより「Action」をクリック 「Import Folder」をクリックして入れたいパッチを選ぶ。上の(例)だとcv01フォルダ 6.「YES]を選択してファイルが開かれる。 7.ダイアログが出るのでOKを一度押して上記例でcv01.imgnew と言うように適当にファイル名をつけて保存ボタンを押す。 8.ファイルの再構成という作業が始まるので終わるまで何もせず待つ。 9.終わったら、ひとまず完了でそのままそこへパッチを追加して行くならYES そうじゃないなら、NO。 そして閉じればOK。 10.再び(例)で行くと、今パッチを入れたcv01.imgnewをデフォのcv01.imgと入れ替える。 (cv01.imgnew→cv01.imgとnewの部分を消して差し替え) 注意:VISTA使用してる場合? 7.の"cv01.imgnew"のように保存したimgがどっかにいっちゃったって人は マイドキュメント→AppDATE→Local→VirtualStore→Program Files→KONAMI →Pro Evolution Soccer 2009→img内を探してみてください。 Kitserver編 Kitserver 2011-Version 10.0.1- fixed issues with No-DVD exes. Now both original and No-DVD exes should be properly supported for 1.0 and 1.01 game versions. http //www.speedyshare.com/files/24580054/kitserver-10.0.1.zip キットサーバーの機能は現段階では二つ。 一つ目がconfig.exeからいじれるデフォでは出来ない画質調整。 二つ目が素材を自分のPES2009データ内へ入れ込むパッチ化機能。 今必要なのはこの2番目。 仕組みとしては簡潔に言うとimg、namesと二つのフォルダに 素材を入れ込んでセットアップ、ポンッ!終わりって感じw パッチの内包物。 kitserver(Ver8.0.7) save info.txt まぁ、パッチの基本としてたいていのこういった素材集合型パッチは中に説明書きが入ってるので ReadmeとかInstallationとか 何かしら入ってる。 この場合info.txtがそれにあたるわけだけど そのインストールの仕方を読むと Installation Copy and install kitserver in your game folder. Copy and overwrite option file in your My Documents/KONAMI folder. (自分のPES2009フォルダにkitserverフォルダをコピーしましょう。 マイドキュメントにあるセーブフォルダに入ってるファイルをコピーしましょう。) とある。 ①最新のキットサーバーと最新のパッチをダウンロードして解凍 ②最新のキットサーバー中のimgフォルダとnamesフォルダを最新のパッチのものと入れ替える。 ③自分のPES2009フォルダに"②で作ったkitserverフォルダ"を移動なりコピーなりして置く。 setup.exeを実行すると上下二段に選択式BOXが現れ PES2009フォルダにキットサーバーを適正に置いてあれば 自動で上にPES2009、下にsetting.exeが選べるようになってるはず。 そうしてパッチをあてこむ対象の上記二つのexeファイルを指定する事が出来たら いよいよ下のInstallボタンを押そう。それでパッチあて完了。 ④マイドキュメントにあるセーブフォルダに入ってるファイルをコピー my document→ KONAMI→"PRO EVOLUTION SOccer 2009"内の"SAVE"フォルダに"PES2009_EDIT01.bin"をいれる。
https://w.atwiki.jp/usbportable/pages/157.html
https://w.atwiki.jp/lineeditor/pages/31.html
#include stdio.h #include stdlib.h #include string.h #define LINE_SIZE 256 #define CMD_SIZE 100 void temporary_save(FILE *txtfile , FILE *temp); void execmd(FILE *txt, FILE *temp, FILE *undo, char *txtname, char *undo_text, char *temp_cmd, int *p); void display_all(FILE *txt); void make_undofile(FILE *txt, FILE *temp, FILE *undo, char *txtname, char *undo_text, char *temp_cmd, int *p); void one_row_edit(FILE *original, FILE *temp, FILE *undo, int row, char *original_name, char *undo_text, int *p); void save_end(int *p); void not_save(FILE *txt, FILE *temp, char *txtname, int *p); void un_do(FILE *txt, FILE *undo, char *txtname, char *undo_text); void word_search(FILE *txt, char *txtname); void word_replace1(FILE *txt, char *txtname); void line_delete(FILE *txt, char *txtname); void line_insert(FILE *txt, char *txtname); int main(int argc, char *argv[]){ FILE *txtfile, *temp, *undo; int start = 0; int coe = 1;//終了条件(Condition Of End) int *p_coe = coe; //coeへのポインタ char cmd[CMD_SIZE]; //コマンド char temp_text[L_tmpnam],undo_text[L_tmpnam];//一時的ファイルのファイル名(編集前とundo用のデータ保存用) tmpnam(temp_text); //一時的ファイルのファイル名の決定 tmpnam(undo_text);//undo用ファイル名の決定 //ファイルの引数を調べる。 if(argc != 2){ printf("引数にはファイルのパスを指定してください\n"); exit(1); } //終了するまで無限ループ while(coe){ //ファイルが開けるかどうかを調べる。 if((txtfile = fopen(argv[1], "r")) == NULL){ printf("ファイルを開くことが出来ません"); exit(1); } //*を表示する if(start) printf("*"); else{ //変更せずに終了するときに使用する変更前のファイルの保存 temp = fopen(temp_text, "w"); temporary_save(txtfile,temp); temp = freopen(temp_text,"r",temp); //w→rに切り替える txtfile = fopen(argv[1], "r"); //もう一回txtfileと読み込んだファイルを結びつける。 printf("ファイルを終わりまで読み込みました\n*"); start++; } //コマンドを入力 fgets(cmd, CMD_SIZE, stdin); //コマンドの実行 execmd(txtfile, temp, undo, argv[1], undo_text, cmd, p_coe); //ファイルを閉じる fclose(txtfile); } fclose(temp); remove(temp_text);//一時的ファイルを削除する remove(undo_text);//undo用ファイルを削除する return 0; } //一時的ファイルの保存 void temporary_save(FILE *txtfile,FILE *temp){ int c; /* 文字を読み込む */ /* ファイルから EOFが現れるまで1字読み込む */ while ((c = getc(txtfile)) != EOF) { fputc(c,temp); } /* この時点でtxtfileに結びつけられたファイルは最後まで読み込まれてしまったので閉じる */ fclose(txtfile); } //機能はここに追加 void execmd(FILE *txt, FILE *temp, FILE *undo, char *txtname, char *undo_text, char *temp_cmd, int *p){ if(strcmp(temp_cmd, "l\n") == 0 || strcmp(temp_cmd, "L\n") == 0) display_all(txt); //すべて表示 if(atoi(temp_cmd) != 0) make_undofile(txt, temp, undo, txtname, undo_text, temp_cmd, p); //一行編集に入る前にundo用ファイルに記録 if(strcmp(temp_cmd, "e\n") == 0 || strcmp(temp_cmd, "E\n") == 0) save_end(p); //保存して終了 if(strcmp(temp_cmd, "n\n") == 0 || strcmp(temp_cmd, "N\n") == 0) not_save(txt,temp,txtname,p); //保存しないで終了 if(strcmp(temp_cmd, "u\n") == 0 || strcmp(temp_cmd, "U\n") == 0) un_do(txt,undo,txtname,undo_text);//前回の編集前の状態に戻す(undo) if(strcmp(temp_cmd, "s\n") == 0 || strcmp(temp_cmd, "S\n") == 0) word_search(txt,txtname);//単語検索 if(strcmp(temp_cmd, "r\n") == 0 || strcmp(temp_cmd, "R\n") == 0) make_undofile(txt, temp, undo, txtname, undo_text, temp_cmd, p);//置換に入る前にundo用ファイルに記録 if(strcmp(temp_cmd, "d\n") == 0 || strcmp(temp_cmd, "D\n") == 0) make_undofile(txt, temp, undo, txtname, undo_text, temp_cmd, p);//行削除に入る前にundo用ファイルに記録 if(strcmp(temp_cmd, "i\n") == 0 || strcmp(temp_cmd, "I\n") == 0) make_undofile(txt, temp, undo, txtname, undo_text, temp_cmd, p);//行挿入に入る前にundo用ファイルに記録 return; } //以下は拡張した関数群 //すべての行を表示 void display_all(FILE *txt){ char str[LINE_SIZE]; //行保存用の配列 int i = 1; //行番号 while(!feof(txt)){ if(fgets(str, LINE_SIZE - 1, txt) == NULL) strcpy(str, "\n"); if(ferror(txt)){ printf("ファイルの読み込み失敗\n"); break; } if(!feof(txt)) printf("%8d %s", i, str); else{ if(strcmp(str, "\n") != 0) printf("%8d %s\n", i, str); } i++; } return; } //undo用ファイルの保存 void make_undofile(FILE *txt, FILE *temp, FILE *undo, char *txtname, char *undo_text, char *temp_cmd, int *p){ char c;//txt→undoファイル用 undo = fopen(undo_text,"w"); while( (c = fgetc(txt)) != EOF )//編集直前の状態を保存する { fputc(c,undo); } txt = freopen(txtname,"r",txt);//もう一度txtをオープンしておく fclose(undo);//undoは閉じておく。 if(atoi(temp_cmd) != 0) one_row_edit(txt, temp, undo, atoi(temp_cmd), txtname, undo_text, p);//一行編集 if(strcmp(temp_cmd, "r\n") == 0 || strcmp(temp_cmd, "R\n") == 0) word_replace1(txt,txtname);//置換 if(strcmp(temp_cmd, "d\n") == 0 || strcmp(temp_cmd, "D\n") == 0) line_delete(txt,txtname);//行削除 if(strcmp(temp_cmd, "i\n") == 0 || strcmp(temp_cmd, "I\n") == 0) line_insert(txt,txtname);//行挿入 } //一行編集 void one_row_edit(FILE *original, FILE *temp, FILE *undo, int row, char *original_name, char *undo_text, int *p){ FILE *shadow; //実際に行を追加していくファイル(あとで元ファイルと入れ替える) char shadow_name[L_tmpnam]; //一行編集時のデータ保存用 char str[LINE_SIZE]; //行保存用の配列 char c; //shadow→original用 int i; //for用の変数 tmpnam(shadow_name); //一時的ファイルのファイル名の決定 //rowが0以下のとき if(row = 0){ printf("行番号が不正です。\n"); return; } shadow = fopen(shadow_name, "w"); //目的の行の手前まで読み込み書き込む for(i = 1; i row; i++){ fgets(str, LINE_SIZE - 1, original); if(ferror(original)){ printf("行読み込みエラー\n"); fclose(shadow); remove(shadow_name); return; } if(feof(original)){ printf("行番号が不正です。\n"); fclose(shadow); remove(shadow_name); return; } fputs(str, shadow); } //行番号と行を表示 fgets(str, LINE_SIZE - 1, original); if(feof(original)) printf("%8d %s\n", row, str); else printf("%8d %s", row, str); //新たな行の書き込み printf("%8d ", row); fgets(str, LINE_SIZE - 1, stdin); fputs(str, shadow); //終わりまで読み込む(display_allと同じように) while(!feof(original)){ if(fgets(str, LINE_SIZE - 1, original) == NULL) strcpy(str, "\n"); if(ferror(original)){ printf("行読み込みエラー\n"); return; } if(!feof(original)) fputs(str, shadow); else{ if(strcmp(str, "\n") != 0) fputs(str, shadow); } } //shadowをoriginalに置き換える /*fclose(original); fclose(shadow); if(remove(original_name) == -1){ printf("ファイルの削除に失敗しました。終了します。\n"); execmd(original, temp, undo, original_name, undo_text, "n\n", p); return; } if(rename(shadow_name, original_name) == -1){ printf("ファイルのリネームに失敗しました。終了します。\n"); execmd(original, temp, undo, original_name, undo_text, "n\n", p); return; } //main関数でfcloseをしているため、もう一度開く if((original = fopen(original_name, "r")) == NULL){ printf("ファイルを開くことが出来ません"); exit(1); }*/ //shadow→original freopen(original_name, "w", original); freopen(shadow_name, "r", shadow); while(!feof(shadow)){ c = fgetc(shadow); if(ferror(shadow)){ fclose(shadow); printf("一行編集shadow→original読み込みエラー\n"); execmd(original, temp, undo, original_name, undo_text, "n\n", p); return; } if(!feof(shadow)) fputc(c, original); if(ferror(original)){ fclose(shadow); printf("一行編集shadow→original書き込みエラー\n"); execmd(original, temp, undo, original_name, undo_text, "n\n", p); return; } } fclose(shadow); if(remove(shadow_name) == -1) printf("一行編集shadow削除エラー\n"); return; } //セーブして終了 void save_end(int *p){ *p = 0; return; } //セーブしないで終了 void not_save(FILE *txt, FILE *temp,char *txtname, int *p){ int c; /* 文字を読み込む */ txt = freopen(txtname,"w",txt);//読み込みから書き込みへ /* ファイルから EOFが現れるまで1字読み込む */ while ((c = fgetc(temp)) != EOF) {//最初に保存してた内容を読み込み fputc(c,txt);//元のファイルに戻す } *p = 0; return; } //一つ前の状態に戻す(undo) void un_do(FILE *txt, FILE *undo, char *txtname, char *undo_text){ char c;// 文字を読み込む if((undo = fopen(undo_text,"r"))==NULL) { printf("まだ編集は行われておりません\n"); return; } txt = freopen(txtname,"w",txt);//読み込みから書き込みへ /* ファイルから EOFが現れるまで1字読み込む */ while((c = fgetc(undo)) != EOF){//一つ前の状態の内容を読み込み fputc(c,txt);//ファイルに入れて戻す } fclose(undo); freopen(txtname,"r",txt); return; } //単語検索 void word_search(FILE *txt, char *txtname) { int i , j , k , l = 0 ; int line[1000] ;//単語出現数は1000回まで char str[LINE_SIZE], word[CMD_SIZE]; fgets(word, CMD_SIZE, stdin);//単語のサイズは99まで for(i=1;!feof(txt);i++)//1行読み込む毎にiをカウント { fgets(str,LINE_SIZE,txt);//まず一行全部読み込む for(j=0;str[j]!= \n ;j++)//読み込んだ行の中に単語が含まれていないか探す { if( str[j] == EOF ) break; for(k=j;word[k-j]==str[k];k++) { if(word[k-j+1]== \n )//含まれていたら { line[l] = i ;//その行番号をline[]に入れる l++; } } } for(k=0;k j;k++) { str[k] = \0 ; } } txt = freopen(txtname,"r",txt); //line[]に入れた行番号からその行を出力する for(i=0;i l;i++) { if( i == 0 ) { for(j=1;j =line[0];j++) fgets(str,LINE_SIZE,txt); k = line[0]; printf("%d %s",line[0],str); if( feof(txt) ) { printf("\n"); } } else if( line[i] != line[i-1] )//1行にいくつもある場合はとばす { for(j=k+1;j =line[i];j++) fgets(str,LINE_SIZE,txt); k = line[i]; printf("%d %s",line[i],str); if( feof(txt) ) { printf("\n"); } } } } //置換 void word_replace1(FILE *txt, char *txtname) { int i , j , k , l = 0 , h , n , m , g , LAST_EOF_LINE = 0; int line[1000] ;//単語出現数は1000回まで char str[LINE_SIZE], word[CMD_SIZE], word2[CMD_SIZE], c=1, shadow_name[L_tmpnam]; FILE *shadow ; tmpnam(shadow_name); fgets(word, CMD_SIZE, stdin);//単語のサイズは99まで for(i=1;c != EOF;i++)//1行読み込む毎にiをカウント { if((c = fgetc(txt)) == EOF )//その行の一文字目がEOFなら { break ;//終了 } else if( c == \n )//その行が単なる改行なら { j = 0 ; str[j] = \n ;//改行をstrにおさめて goto input1 ;//読み込み作業は飛ばす } str[0] = c ;//一文字目がEOFでも改行でもなかったら for(j=1;(c = fgetc(txt)) != \n ;j++)//改行するまでその行を読み込む { str[j] = c ; if( c == EOF )//ファイルの最後が改行せずに終わっていたら { goto input1;//改行を入れることなく飛ばす } } str[j] = \n ;//改行をstrに入れる input1 ; str[++j] = \0 ;//最後にNULL文字を入れる for(j=0;str[j]!= \n ;j++)//読み込んだ行の中に単語が含まれていないか探す { if( str[j] == EOF ) break; for(k=j;word[k-j]==str[k];k++) { if(word[k-j+1]== \n )//含まれていたら { line[l] = i ;//その行番号をline[]に入れる l++; } } } for(k=0;k j;k++) { str[k] = \0 ; } } txt = freopen(txtname,"r",txt); //ここから、ファイル内容をshadowに置き換える fgets(word2,CMD_SIZE,stdin); shadow = fopen(shadow_name,"w"); for(i=0;i l;i++)//置換する前の単語のある行の手前まで { if( i == 0 ) { for(j=1;j line[0];j++) { fgets(str,LINE_SIZE,txt); fputs(str,shadow);//内容をshadowにコピー } m = line[0] ; } else if( line[i] != line[i-1] )//1行に複数ある場合は一度だけ { for(j=m+1;j line[i];j++) { fgets(str,LINE_SIZE,txt); fputs(str,shadow); } m = line[i] ; } else { goto END1 ; } //置換する前の単語のある行にきたら fgets(str,LINE_SIZE,txt);//strにその行をコピー for(j=0,h=0;str[h+j]!= \n ;j++)//行の中の単語が含まれてる位置を探す { if( str[h+j] == EOF ) break; for(k=h+j;word[k-(h+j)]==str[k];k++) { if(word[k-(h+j)+1]== \n )//含まれていたら { for(g=h;g h+j;g++)//その単語の手前までshadowにコピー { fputc(str[g],shadow); } for(n=0;word2[n]!= \n ;n++)//置換した後の単語をshadowにコピー { fputc(word2[n],shadow); } h = k + 1; j = -1 ; break ; } } } //もうその行に置換する前の単語が無ければ for(k=h;str[k]!= \n str[k]!=EOF;k++)//残りをshadowにコピー { fputc(str[k],shadow); } if(str[k] == EOF )//もし行の最後が改行でなくEOFで終わっていたら { LAST_EOF_LINE = 1 ;//最後の行は改行でなくEOFで終わっていることをマークし goto END2 ;//飛ぶ } fputc( \n ,shadow);//そうでなければ行の最後は改行を入れる END1 ; } //もうファイル中のそれ以降の行に置換する前の単語が無ければ c = 1 ;//最初のc == EOF を避けるため for(;c != EOF;) { if((c = fgetc(txt)) == EOF )//その行の一文字目がEOFなら { break ;//終了 } else if( c == \n )//その行が単なる改行なら { j = 0 ; str[j] = \n ;//改行をstrにおさめて goto input2 ;//読み込み作業は飛ばす } str[0] = c ;//一文字目がEOFでも改行でもなかったら for(j=1;(c = fgetc(txt)) != \n ;j++)//改行するまでその行を読み込む { str[j] = c ; if( c == EOF )//ファイルの最後が改行せずに終わっていたら { goto input2;//改行を入れることなく飛ばす } } str[j] = \n ;//改行をstrに入れる input2 ; str[++j] = \0 ;//最後にNULL文字を入れる fputs(str,shadow); } END2 ; txt = freopen(txtname,"w",txt);//両方のファイルをオープンし直して shadow = freopen(shadow_name,"r",shadow); /*今回の行編集プログラミングにおいて最も問題となったのがファイルの終わり方で 改行せずにファイルが終了する場合に多くの注意が必要となった。 すなわち new\n \n old\n というファイルは改行の後にファイルが終了しているが new\n \n old では行末にEOFが来ることになる。こうした場合単にfgetsで行を読み取ると、最後にEOFの部分が記号で表示されてしまう という問題が生じた。そのため多くの場合一文字ずつ読み込んで書き込みを行う手法を取ってきたが、この置換関数では行末に EOFがあるファイルで、更にその最後の行を置換する場合、一文字ずつ読み込んで書き込みを行おうとすると何故かshadowファイル に謎の記号が後に続いてしまい書き込む元のファイルデータにそれを写してしまうことになった。ところがこのケースでfgetsに よる読み込みを行うと今度はEOFを記号として書き込むことなくうまく写し取ることに成功できるようになった。そこで今回は 最後の写しを行う段階で場合分けを行っている (説明が無いとあまりにも無駄な行動をしてるとしか思えないのでわざわざ記しておくことにしました) */ if( LAST_EOF_LINE == 0 ) { for(;(c = fgetc(shadow)) != EOF;)//shadowの中身をtxtにコピー { for(;c != \n c != EOF ;c = fgetc(shadow)) { fputc(c,txt); } fputc( \n ,txt); } } else { for(;fgets(str,LINE_SIZE - 1,shadow) != NULL;)//shadowの中身をコピー { fputs(str,txt); } } fclose(shadow); remove(shadow_name); return; } //行削除 void line_delete(FILE *txt, char *txtname) { int i , j ; FILE *shadow; char c = 1, line[10], str[LINE_SIZE], shadow_name[L_tmpnam] ; tmpnam(shadow_name); fgets(line,9,stdin);//削除したい行を入力してもらう if( atoi(line) 1 ) { printf("行番号が不正です。\n"); return; } shadow = fopen(shadow_name,"w"); for(i=1;c != EOF;i++) { if((c = fgetc(txt)) == EOF )//その行の一文字目がEOFなら { break ;//終了 } else if( c == \n )//その行が単なる改行なら { j = 0 ; str[j] = \n ;//改行をstrにおさめて goto input ;//読み込み作業は飛ばす } str[0] = c ;//一文字目がEOFでも改行でもなかったら for(j=1;(c = fgetc(txt)) != \n ;j++)//改行するまでその行を読み込む { str[j] = c ; if( c == EOF )//ファイルの最後が改行せずに終わっていたら { goto input;//改行を入れることなく飛ばす } } str[j] = \n ;//改行をstrに入れる input ; str[++j] = \0 ;//最後にNULL文字を入れる if( i != atoi(line) )//削除しない行はshadowにコピー { fputs(str,shadow); } //削除する行はコピーせずに読み飛ばす } if( atoi(line) = i ) { printf("行番号が不正です。\n"); } txt = freopen(txtname,"w",txt);//両方のファイルをオープンし直して shadow = freopen(shadow_name,"r",shadow); for(;(c = fgetc(shadow)) != EOF;)//shadowの中身をtxtにコピー { for(;c != \n c != EOF ;c = fgetc(shadow)) { fputc(c,txt); } fputc( \n ,txt); } fclose(shadow); remove(shadow_name); return; } //行挿入 void line_insert(FILE *txt, char *txtname) { //ほぼ行削除と同じ構造 int i , j ; FILE *shadow; char c = 1, line[10], str[LINE_SIZE], shadow_name[L_tmpnam] ; tmpnam(shadow_name); fgets(line,9,stdin);//挿入したい行の手前の行を入力してもらう。 if( atoi(line) 0 ) { printf("行番号が不正です。\n"); return; } shadow = fopen(shadow_name,"w"); if( atoi(line) == 0 )//もし1行目に挿入したい場合は先に入力をする { fgets(str,LINE_SIZE,stdin);//挿入する内容を入力 fputs(str,shadow);//それをコピー }//あとは2行目以降に挿入したい場合と同じ動きをする for(i=1;c != EOF;i++) { if((c = fgetc(txt)) == EOF )//その行の一文字目がEOFなら { break ;//終了 } else if( c == \n )//その行が単なる改行なら { j = 0 ; str[j] = \n ;//改行をstrにおさめて goto input ;//読み込み作業は飛ばす } str[0] = c ;//一文字目がEOFでも改行でもなかったら for(j=1;(c = fgetc(txt)) != \n ;j++)//改行するまでその行を読み込む { str[j] = c ; if( c == EOF )//ファイルの最後が改行せずに終わっていたら { goto input;//改行を入れることなく飛ばす } } str[j] = \n ;//改行をstrに入れる input ; str[++j] = \0 ;//最後にNULL文字を入れる if( i != atoi(line) )//挿入する手前以外の行は普通にshadowにコピー { fputs(str,shadow); } else//挿入する手前の行は { fputs(str,shadow);//まず手前の行の内容をコピー fgets(str,LINE_SIZE,stdin);//挿入する内容を入力 fputs(str,shadow);//それをコピー //通常の動きに戻る } } if( atoi(line) = i ) { printf("行番号が不正です。\n"); } txt = freopen(txtname,"w",txt);//両方のファイルをオープンし直して shadow = freopen(shadow_name,"r",shadow); for(;(c = fgetc(shadow)) != EOF;)//shadowの中身をtxtにコピー { for(;c != \n c != EOF;c = fgetc(shadow)) { fputc(c,txt); } fputc( \n ,txt); } fclose(shadow); remove(shadow_name); return; }
https://w.atwiki.jp/save_editor/pages/11.html
関連ブログ @wikiのwikiモードでは #bf(興味のある単語) と入力することで、あるキーワードに関連するブログ一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_161_ja.html たとえば、#bf(ゲーム)と入力すると以下のように表示されます。 #bf
https://w.atwiki.jp/theforestwiki/pages/15.html
2014/07/1 Ver0.3 改善 敵がいない“veganmode”モードを追加(タイトル画面でveganmodeと打つと背景が変わり、スタートすると敵がいなくなります。) Player head added! And held items now correctly cast shadows New suprise item added to plane ヨットの場所はランダム コウモリがちゃんと洞窟の入り口の外に飛ぶ Partially built structures are now saved Fixed water not accumulating on terrain when raining Cassette player can now be turned off by clicking it a second time if it’s already playing Log Cabin now has a floor, a door with hinge and a sleeping/saving spot Birds will now land on window ledge of your built log cabin Molotov will extinguish if in contact with water Improved sunset/sunrise lighting Two new effigies buildable, simple head on stick and arms pointing to sky House boat buildable (Warning buggy!! – especially with sharks. Also, may sink) Stick marker added to custom building, quickly build yourself waypoints 水の下にサンゴと海藻を追加(雑) New buildable item Stick holder 避難所の建設を容易にするため、木の枝を1本多く持てる。 小さいテクスチャの改善 影距離がハイとミッド設定の増加 設定で影距離を高い(High)と普通(Mid)を選ぶ事が出来る。 Improved motion blur on held items Hanging rope pick ups added to deep in caves 洞窟の照明に、ノートPCを追加 11 new filmic inspired grade options added to graphic options menu ベンチを追加 Single bat prefab added to parts of caves Improved lilypad pop-in Med pickups now go direct to inventory instead of being eaten on pickup サウンド Improved cannibal village track implementation 湖にガチョウの音を追加 Bash pass at all ambient sound implementation, better transitions, better positioning, fall off and ranges Thunder and rain sounds randomized Cave audio pass, adding reverb and echo, better balancing 水中音響を追加 Water footsteps sounds now play when you walk into water Performance More memory optimizations should improve stability Lowered memory usage further if 32bit windows is detected, should fix crash on opening if less than 4gbs of usable memory is available (note 4gb usable is still recommended) Bugs Head no longer pokes through collision! Fixed some items missing from inventory when game was loaded Fixed collision where you could wall walk out of plane Fixed can’t carry more raw fish message that would appear when you had too many rocks. Fixed pond covered in logs Fixed left hand held conflicts between lighter, torch walkman etc Removed gleam on inventory coins and flares Fixed floating garden Fixed leaf vertex colors on small leaf hut Fixed flare gun falling through yacht Fixed log going to -1 if you died whilst holding a log Fixed small effigy construction shader being too faint Removed grass cutting from opening inventory (was causing crashes on some pc’s) 2014/6/15 ver0.2 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/wnt0/pages/37.html
http //www.dofactory.com/Patterns/PatternMediator.aspx のC#コードをC++にした Structural example #include iostream #include string using namespace std; class Colleague; class ConcreteColleague1; class ConcreteColleague2; // 仲介者 class Mediator { public virtual void Send(const string message, Colleague *colleague) = 0; }; class ConcreteMediator public Mediator { private ConcreteColleague1 *_colleague1; ConcreteColleague2 *_colleague2; public void SetColleague1(ConcreteColleague1 *value) { _colleague1 = value; } void SetColleague2(ConcreteColleague2 *value) { _colleague2 = value; } virtual void Send(const string message, Colleague *colleague); }; // 同業者 class Colleague { protected Mediator *mediator; public Colleague(Mediator *mediator) { this- mediator = mediator; } }; class ConcreteColleague1 public Colleague { public ConcreteColleague1(Mediator *mediator) Colleague(mediator) { } void Send(const string message) { mediator- Send(message, this); } void Notify(const string message) { cout "Colleague1 gets message " message endl; } }; class ConcreteColleague2 public Colleague { public ConcreteColleague2(Mediator *mediator) Colleague(mediator) { } void Send(const string message) { mediator- Send(message, this); } void Notify(const string message) { cout "Colleague2 gets message " message endl; } }; /////// void ConcreteMediator Send(const string message, Colleague *colleague) { if (colleague == _colleague1) { _colleague2- Notify(message); } else { _colleague1- Notify(message); } } /////// int main() { ConcreteMediator *m = new ConcreteMediator(); ConcreteColleague1 *c1 = new ConcreteColleague1(m); ConcreteColleague2 *c2 = new ConcreteColleague2(m); m- SetColleague1(c1); m- SetColleague2(c2); c1- Send("How are you?"); c2- Send("Fine, thanks"); delete c1; delete c2; delete m; return 0; } Real World example #include iostream #include string #include map using namespace std; class Participant; // Mediator class class AbstractChatroom { public virtual void Register(Participant *participant) = 0; virtual void Send(const string from, const string to, const string message) = 0; }; // ConcreteMediator class class Chatroom public AbstractChatroom { private map string, Participant* _participants; public virtual void Register(Participant *participant); virtual void Send(const string from, const string to, const string message); }; // Colleague class class Participant { private Chatroom *_chatroom; string _name; public Participant(const string name) { _name = name; } string getName() { return _name; } void setChatroom(Chatroom *chatroom) { _chatroom = chatroom; } Chatroom* getChatroom() { return _chatroom; } void Send(const string to, const string message) { _chatroom- Send(_name, to, message); } virtual void Receive(const string from, const string message) { cout from " to " _name " \ " message "\ " endl; } }; // ConcreteColleague class class Beatle public Participant { public Beatle(const string name) Participant(name) { } virtual void Receive(const string from, const string message) { cout "To a Beatle "; Participant Receive(from, message); } }; class NonBeatle public Participant { public NonBeatle(const string name) Participant(name) { } virtual void Receive(const string from, const string message) { cout "To a non-Beatle "; Participant Receive(from, message); } }; ///// void Chatroom Register(Participant *participant) { Participant *p = _participants[participant- getName()]; if (p == NULL) { // register participant- setChatroom(this); _participants[participant- getName()] = participant; } } void Chatroom Send(const string from, const string to, const string message) { Participant *participant = _participants[to]; if (participant != NULL) { participant- Receive(from, message); } } /////// int main() { // create chatroom Chatroom *chatroom = new Chatroom; // create participants and register them Participant *George = new Beatle("George"); Participant *Paul = new Beatle("Paul"); Participant *Ringo = new Beatle("Ringo"); Participant *John = new Beatle("John"); Participant *Yoko = new NonBeatle("Yoko"); chatroom- Register(George); chatroom- Register(Paul); chatroom- Register(Ringo); chatroom- Register(John); chatroom- Register(Yoko); // Chatting participants Yoko- Send("John", "Hi John!"); Paul- Send("Ringo", "All you need is Love"); Ringo- Send("George", "My sweet Lord"); Paul- Send("John", "Can t buy me love"); John- Send("Yoko", "My sweet love"); delete George; delete Paul; delete Ringo; delete John; delete Yoke; delete chatroom; return 0; } 参考サイト デザインパターンを“喩え話”で分かり易く理解する http //www.netlaputa.ne.jp/~hijk/study/oo/designpattern.html TECHSCORE http //www.techscore.com/tech/DesignPattern/index.html/ Programing Place http //www.geocities.jp/ky_webid/index_old.html デザインパターンの骸骨たち http //www002.upp.so-net.ne.jp/ys_oota/mdp/ デザインパターンの使い方 Mediator http //japan.internet.com/developer/20090106/26.html