Shop Forum More Submit  Join Login
About Deviant KillerBeer01Male/Lithuania Recent Activity
Deviant for 5 Years
Needs Core Membership
Statistics 31 Deviations 174 Comments 5,455 Pageviews
×

Newest Deviations

Portal Clock for MMD, DL by KillerBeer01 Portal Clock for MMD, DL :iconkillerbeer01:KillerBeer01 1 0 Portal Turret Scanner Kit for MMD, DL by KillerBeer01 Portal Turret Scanner Kit for MMD, DL :iconkillerbeer01:KillerBeer01 4 0 Portal Observation Room + Rifled Glass Effect, DL by KillerBeer01 Portal Observation Room + Rifled Glass Effect, DL :iconkillerbeer01:KillerBeer01 7 2 [YouTube] [MMD] [Portal] [Turret] Bang Bang by KillerBeer01 [YouTube] [MMD] [Portal] [Turret] Bang Bang :iconkillerbeer01:KillerBeer01 9 0 Animated Portal Cleanser for MMD, DL by KillerBeer01 Animated Portal Cleanser for MMD, DL :iconkillerbeer01:KillerBeer01 17 2 Your faithful Companion by KillerBeer01 Your faithful Companion :iconkillerbeer01:KillerBeer01 3 0 [MMD][Portal][Chell] Kill GLaDOS by KillerBeer01 [MMD][Portal][Chell] Kill GLaDOS :iconkillerbeer01:KillerBeer01 3 6 [Request] Desperately Seeking Wheatley (PandaKaii) by KillerBeer01 [Request] Desperately Seeking Wheatley (PandaKaii) :iconkillerbeer01:KillerBeer01 3 0 This is Aperture by KillerBeer01 This is Aperture :iconkillerbeer01:KillerBeer01 3 1 Portal/Portal2 signage panel for MMD, DL by KillerBeer01 Portal/Portal2 signage panel for MMD, DL :iconkillerbeer01:KillerBeer01 13 0 Wait, what? by KillerBeer01 Wait, what? :iconkillerbeer01:KillerBeer01 4 3 Game of CATS by KillerBeer01 Game of CATS :iconkillerbeer01:KillerBeer01 1 2 [SOLVED] Help: Ordering of accessories and effects by KillerBeer01 [SOLVED] Help: Ordering of accessories and effects :iconkillerbeer01:KillerBeer01 2 2 MMD Portal animated model DL: Incinerator by KillerBeer01 MMD Portal animated model DL: Incinerator :iconkillerbeer01:KillerBeer01 6 0 MMD Personality Cores: Spare Eyes accessory, DL by KillerBeer01 MMD Personality Cores: Spare Eyes accessory, DL :iconkillerbeer01:KillerBeer01 20 3 MMD Wheatley2.5, rigged model DL by KillerBeer01 MMD Wheatley2.5, rigged model DL :iconkillerbeer01:KillerBeer01 25 12

Favourites

Vectored Portal Icons by Zeptozephyr Vectored Portal Icons :iconzeptozephyr:Zeptozephyr 797 76 [MMD 100 Watchers Gift] Couple Dance Pose Pack DL! by AimeeSa [MMD 100 Watchers Gift] Couple Dance Pose Pack DL! :iconaimeesa:AimeeSa 154 11 Apartment Stage by XxMinishaxX Apartment Stage :iconxxminishaxx:XxMinishaxX 491 41 MMD big bedroom edit DOWNLOAD by ShootingStarBlue MMD big bedroom edit DOWNLOAD :iconshootingstarblue:ShootingStarBlue 577 193 MMD Stone Lookout Stage - PMX/X by mbarnesMMD MMD Stone Lookout Stage - PMX/X :iconmbarnesmmd:mbarnesMMD 26 0 Tropical Paradise Stage dl by Kalvici Tropical Paradise Stage dl :iconkalvici:Kalvici 395 5 MMD stage download High class Western style by Hack-Girl MMD stage download High class Western style :iconhack-girl:Hack-Girl 202 3 moron by Smachiefish moron :iconsmachiefish:Smachiefish 40 12 [mmd] Glados Model DL by Skobree [mmd] Glados Model DL :iconskobree:Skobree 28 4 [MMD] Acoustic guitar [download] by Wampa842 [MMD] Acoustic guitar [download] :iconwampa842:Wampa842 420 34 I only want to kill you by SandraGH I only want to kill you :iconsandragh:SandraGH 364 43 Aperture Turrets by Alice0fSpades Aperture Turrets :iconalice0fspades:Alice0fSpades 275 23 There You Are - Portal 2 by LaggyCreations There You Are - Portal 2 :iconlaggycreations:LaggyCreations 142 16 Thinking with Portals by Unique-4-life Thinking with Portals :iconunique-4-life:Unique-4-life 68 4 [Portal] Turret girl. by ProtoRC [Portal] Turret girl. :iconprotorc:ProtoRC 35 6 Portal 2: Chell and GLaDOS japanese version by NatashaFenik Portal 2: Chell and GLaDOS japanese version :iconnatashafenik:NatashaFenik 216 21

Groups

Activity


Portal Clock for MMD, DL
This is an animated model of a clock/timer device you can see in the beginning of the first Portal game. I extracted it from game files when I needed a counter model for my video.

How to use it:

Main mode - set up individual clock's digits by "Digit 1-8" sliders (upper left group). Use sharp numeric values of a slider - 0.1 for "1", 0.2 for "2", etc.

Blurred mode - beside normal digit textures, game files also included "blurred" versions of them, so I adopted those as well. Instead of individual digits, they are grouped by pairs.To use them, first switch any pair of digits into blurred mode with a respective "Dim on" slider (lower left group), then set up the value using a respective "Dim" slider (upper right group).

Additional settings (lower right group) - "Shift digits" slider removes gaps between digit pairs,  transforming the "clock" data format into regular "integer" counter. "Clean background" removes colons between digit pairs and other residues. "Flash digits" makes digits fade to transparency.

============================

The picture uses Chell model by MahoAshley: www.youtube.com/watch?v=rCkeWg… Also, various clock models by: Black-Bladen, O-dsv-o. and Onimau619.
Loading...
Ok, first, scratch what I've been saying before in comments - it's *not* safe to edit NXName method to return NameE instead of Name. Looks like it is used for more than just forming displayable names, and some of its uses may require specifically Japanese versions. We'll have to use our own methods, so if you actually did something already to PmxLib.dll, restore it to a previous version.

1) Edit basic classes.

\PmxLib\ PmxBody, PmxBone,  PmxMaterial, PmxMorph, PmxNode, PmxSoftBody: update each class with two methods:

          public static bool lang { get; set; } = false;

        public string NameC
        
{
            
get
            {     //  substitute correct class name for each version
                
if (PmxBody.lang)
                
{
                    
return this.Name;
                
}
                
return this.NameE;
            
}
            
set
            
{
                
if (PmxBody.lang)
                
{
                    
this.Name = value;
                    
return;
                
}
                
this.NameE = value;
            
}
        }
(when editing PmxNode, you may get an error message; that's a decompilation glitch. Double-click on it, and when it redirects you to the specific code line, replace "1 : 0" with "(byte)1 : (byte)0", and hit Compile again, it should work then)

2) Edit \PmxEditorLib\PmxEditor\PmxListFormat

Basically, you just replace *every* instance of Name or NXName you meet there with NameC... but there's one exception.
       public static string NXName(INXName n, int index)
       {
          string arg = "";
          if (n != null)
          {
             arg = n.NXName;
          }
          return $"{index} : {arg}";
       }
This function is made to accept any of the above PmxLib class variables as a parameter, but it's made so by using an abstract class INXName they all are descendants of... and it doesn't see NameE field. We'll have to copypaste it into a set of non-universal functions for each class (actually, only those two that don't already have class-specific functions)
       public static string Bone(PmxBone n, int index)
       {
          string arg = "";
          if (n != null)
          {
             arg = n.NameC;
          }
          return $"{index} : {arg}";
       }
       public static string Material(PmxMaterial n, int index)
       {
          string arg = "";
          if (n != null)
          {
             arg = n.NameC;
          }
          return $"{index} : {arg}";
       }


3) Find and replace all instances of PmxListFormat.NXName


PmxEditorCore.PmxEditor.PmxForm


       private EventHandler PictClicked(PictureBox pict, Action update)
       {
                ....
                   else
                   {
                      System.Windows.Forms.Control control = null;
                      control = ((!flag) ? ((System.Windows.Forms.Control)pict) : ((System.Windows.Forms.Control)chkMaterial_SyncDiffAmb));
                      MultiUpdate_Common(control, ix, LegacyUndoType.Material, delegate(PmxMaterial mat)
                      {
                         mat.FromPmxMaterial(i);
                         return true;
                      }, PmxEdit.UpdateItem_Material, m_pmx.MaterialList, delegate(int ixc0)
                      {
                         lstMaterial.Items[ixc0] = PmxListFormat.Material(m_pmx.MaterialList[ixc0], ixc0);
                      }, delegate
                      {
                         UpdateView();
                         SetSelectedIndices(lstMaterial, ix);
                      });
       private void UpdateList_Material()
       {
          UpdateList_BaseData(Pmx.MaterialList, lstMaterial, lblMaterial_Count, (PmxMaterial m, int ix) => PmxListFormat.Material(m, ix));
       }

       private void UpdateList_Bone()
       {
          if (m_boneColorIcon)
          {
             BoneColorManagerS.Class.UpdateColor(Pmx);
          }
          UpdateList_BaseData(Pmx.BoneList, lstBone, lblBone_Count, (PmxBone b, int ix) => PmxListFormat.Bone(b, ix));
          UpdateCtrl_cmbNodeBone();
       }
       private void MultiUpdate_Material(System.Windows.Forms.Control obj, int[] ix)
       {
          MultiUpdate_Common(obj, ix, LegacyUndoType.Material, UpdateFromCtrl_Material, PmxEdit.UpdateItem_Material, m_pmx.MaterialList, delegate(int ixc)
          {
             lstMaterial.Items[ixc] = PmxListFormat.Material(m_pmx.MaterialList[ixc], ixc);
          }, delegate
          {
             try
             {
                UpdateView();
                m_listEventSkip = true;
                SetSelectedIndices(lstMaterial, ix);
             }
             finally
             {
                m_listEventSkip = false;
             }
             if (ix.Length != 0 && PmxLib.CP.InRange(m_pmx.MaterialList, ix[0]))
             {
                PmxMaterial ctrl_MaterialColor = m_pmx.MaterialList[ix[0]];
                SetCtrl_MaterialColor(ctrl_MaterialColor);
             }
          });
       }

       private void MultiUpdate_Bone(System.Windows.Forms.Control obj, int[] ix)
       {
          MultiUpdate_Common(obj, ix, LegacyUndoType.Bone, UpdateFromCtrl_Bone, PmxEdit.UpdateItem_Bone, m_pmx.BoneList, delegate(int ixc)
          {
             lstBone.Items[ixc] = PmxListFormat.Bone(m_pmx.BoneList[ixc], ixc);
          }, delegate
          {
             try
             {
                UpdateView_Bone();
                m_listEventSkip = true;
                SetSelectedIndices(lstBone, ix);
             }
             finally
             {
                m_listEventSkip = false;
             }
          });
       }
       private PMXDraw.UpdatedEventArgs UndoProc(LegacyUndoBuffer buf, bool updateView, PMXDraw.UpdatedEventArgs updateFlags = null)
       {
             ....
             case LegacyUndoType.Material:
                tabPage = TabPage.Material;
                if (0 <= index && index < lstMaterial.Items.Count)
                {
                   lstMaterial.Items[index] = PmxListFormat.Material(m_pmx.MaterialList[index], index);
                   lstMaterial.SelectedIndex = index;
                   updatedEventArgs.ForcedUpdate = true;
                }
                break;
             case LegacyUndoType.MaterialList:
             case LegacyUndoType.MaterialIndexMap:
                tabPage = TabPage.Material;
                num = lstMaterial.SelectedIndex;
                UpdateList_Material();
                SafeSetSelectedIndices(lstMaterial, num);
                updatedEventArgs.ForcedUpdate = true;
                break;
             case LegacyUndoType.Bone:
             case LegacyUndoType.IK:
                tabPage = TabPage.Bone;
                if (0 <= index && index < lstBone.Items.Count)
                {
                   lstBone.Items[index] = PmxListFormat.Bone(m_pmx.BoneList[index], index);
                   lstBone.SelectedIndex = index;
                }
                updatedEventArgs.Bone = true;
                break;
       private void UpdateFromPage(TabPage page, object sender)
       {
               ....
          case TabPage.Material:
             array = GetSelectedIndices(lstMaterial);
             if (array.Length != 1)
             {
                MultiUpdate_Material(sender as System.Windows.Forms.Control, array);
                return;
             }
             ixc = array[0];
             UpdateFromPage_Proc(() => ixc, m_pmx.MaterialList, LegacyUndoType.Material, UpdateFromCtrl_Material, delegate
             {
                lstMaterial.Items[ixc] = PmxListFormat.Material(m_pmx.MaterialList[ixc], ixc);
             });
             SetCtrl_MaterialColor(m_pmx.MaterialList[ixc]);
             num = 0;
             break;
          case TabPage.Bone:
             array = GetSelectedIndices(lstBone);
             if (array.Length != 1)
             {
                MultiUpdate_Bone(sender as System.Windows.Forms.Control, array);
                return;
             }
             ixc = array[0];
             UpdateFromPage_Proc(() => ixc, m_pmx.BoneList, LegacyUndoType.Bone, UpdateFromCtrl_Bone, delegate
             {
                lstBone.Items[ixc] = PmxListFormat.Bone(m_pmx.BoneList[ixc], ixc);
             });
             num = 2;
             break;

PmxEditorCore.PmxViewForm.PmxViewEditExtension


       private void InitializeMaterialList()
       {
          int selectedIndex = lstMaterial.SelectedIndex;
          lstMaterial.Items.Clear();
          lstMaterial.BeginUpdate();
          for (int i = 0; i < m_pmxDraw.Pmx.MaterialList.Count; i++)
          {
             string item = PmxListFormat.Material(m_pmxDraw.Pmx.MaterialList[i], i);
             lstMaterial.Items.Add(item);
          }
          lstMaterial.EndUpdate();
          int count = lstMaterial.Items.Count;
          if (0 <= count && selectedIndex < count)
          {
             lstMaterial.SelectedIndex = selectedIndex;
          }
          else if (count > 0)
          {
             lstMaterial.SelectedIndex = 0;
          }
       }

PmxEditorCore.PmxViewForm.PmxViewGuide


       private void InitializeList(bool pageMove = false)
       {
          ....
                for (int k = 0; k < m_buf.Bone.Length; k++)
                {
                   int index3 = m_buf.Bone[k];
                   list.Add(PmxListFormat.Bone(m_pmxDraw.Pmx.BoneList[index3], index3));
                }

4) Find and replace occasional instances of Name with NameC

 This list may be updated if I find more:

\PmxEditorCore\PmxEditor\PrimitiveForm\UpdateMaterialList

\PmxEditorCore\PmxEditor\PmxForm\SetEvent_TextLabelName
\PmxEditorCore\PmxEditor\PmxForm\UpdateCtrl_cmbNodeBone
\PmxEditorCore\PmxEditor\PmxForm\UpdateCtrl_cmbNodeMorph
\PmxEditorCore\PmxEditor\PmxForm\SetEvent_TabCtrl

\PmxEditorCore\PmxViewForm\MappingEdit\SetBoneIndex
\PmxEditorCore\PmxViewForm\MappingEdit\GetBoneName
\PmxEditorCore\PmxViewForm\MappingEdit\InitailizeB4BoneList
\PmxEditorCore\PmxViewForm\MappingEdit\SetBoneIndex
\PmxEditorCore\PmxViewForm\MorphEditView\SetCurrentMorph 
\PmxEditorCore\PmxViewForm\PmxSkeletonView\UpdateBoneBox
\PmxEditorCore\PmxViewForm\PmxViewSelector\UpdateList  
\PmxEditorCore\PmxViewForm\TransformView\InitializeObjectList
\PmxEditorCore\PmxViewForm\TransformView\InitializeIKList
\PmxEditorCore\PmxViewForm\TransSendView\InitializeList
\PmxEditorCore\PmxViewForm\UVSkinForm\SetCtrlState
\PmxEditorCore\PmxViewForm\TransMorphSlider\CreateSliderCtrl

5) Make Language Switch affect the whole interface


\PmxEditorCore\PmxEditor\PmxForm


       private void ChangeJECtrl(bool j)
       {
          jeModelInfo.JP.Checked = j;
          jeMaterialName.JP.Checked = j;
          jeBoneName.JP.Checked = j;
          jeMorphName.JP.Checked = j;
          jeNodeName.JP.Checked = j;
          jeBodyName.JP.Checked = j;
          jeJointName.JP.Checked = j;
          jeSoftBodyName.JP.Checked = j;
          jeModelInfo.EN.Checked = !j;
          jeMaterialName.EN.Checked = !j;
          jeBoneName.EN.Checked = !j;
          jeMorphName.EN.Checked = !j;
          jeNodeName.EN.Checked = !j;
          jeBodyName.EN.Checked = !j;
          jeJointName.EN.Checked = !j;
          jeSoftBodyName.EN.Checked = !j;
       PmxBody.lang = j;
         PmxBone.lang = j;
         PmxMaterial.lang = j;
          PmxNode.lang = j;
      PmxMorph.lang = j;
           PmxSoftBody.lang = j;
            UpdateList_All();
        UpdateView();
       }

Journal

No journal entries yet.

Friends

:iconpinali: :iconreggiedentmore: :iconjacky-bunny: :iconvasilnatalie: :iconnashie-c: :iconmmdfakewings18: :iconwampa842: :iconchilkad: :icontrackdancer: :iconlearnmmd:

Comments


Add a Comment:
 
:iconcovianna:
Covianna Featured By Owner Mar 6, 2019
I'm amazed from all your creations and...
ok, to put it easy, keep going on!
Reply
:iconkillerbeer01:
KillerBeer01 Featured By Owner Mar 6, 2019
Thanks!
Reply
:iconvasilnatalie:
vasilnatalie Featured By Owner Sep 20, 2016
I was thinking you and I should team up on a tutorial on how to use search engines to answer commonly encountered problems :)
Reply
:iconkillerbeer01:
KillerBeer01 Featured By Owner Sep 24, 2016
Unfortunately, people who are too lazy to use search engines even to most common questions, wouldn't read that tutorial either. {{{(>_<)}}}
Reply
:iconth00z:
Th00z Featured By Owner Jul 3, 2014
Thanks for watching :iconaddicted2portals:! :)
Reply
:icondevinshadowv:
DevinShadowV Featured By Owner Apr 16, 2014  Hobbyist Digital Artist
Hey thanks for watching the group and just a heads up were are accepting donations of DA Points to get the group to super group class. If you want to you can donate to one of our owners or here would be best orange-box.deviantart.com/ again welcome to group.

Also if you want to member version you will get access to uploading journal through us and if you have valve or gmod related stuff the upload process to us will be faster but that is your choice.

Also we just got a steam page up for the group here steamcommunity.com/groups/OBFC

-DevinShadowV, Moderator/Co-Owner of OBFC
Reply
Add a Comment: