• Announcements

    • JoeW

      [UPDATED] Physical Megapack Disc Issues   04/16/2018

      Update 5/11/2018 We do not have any more information at this time. The last we spoke to 505 indicated that the discs should be ready very soon. We will likely have more information next week; hopefully with full explanation of when and how to get new discs.    Updated: 4/27/2018

      On April 17th, the Don't Starve Megapack was released. Almost immediately, it was discovered that the wrong content was printed on the PS4 retail version of Don’t Starve Mega Pack (the Xbox One version is not affected). The disc contained Don't Starve Together, but was without Don't Starve, Reign of Giants and Shipwrecked. As soon as we confirmed the problem we contacted our retail publisher to find out how this happened and what could be done. It's taken some time to get this far, but this is all the information we have at this time. The current status of the issue is as follows: New copies are currently in print and will be on shelves ASAP, hopefully within a few weeks.  When the new discs arrive in stores, players who already purchased misprinted discs will be able to exchange the disc for a new one in store. Details will follow as we figure out the exact timing, the procedures with specific retailers and what the exchange will entail.  Players who already purchased the faulty disc previous to 4/26/2018 can now contact Klei support HERE for a Playstation Store voucher code that includes Don't Starve Together, Don't Starve, Shipwrecked and the Reign of Giants DLC that you can play now. Please specify your country as certain vouchers only work in certain regions.  New purchasers of the Megapack in store as of 4/26/2018 should be given a voucher at the time of purchase on your receipt. If you do not get a code, contact us ALL purchasers will have a path to get a new disc when they are ready. We do not have details at this time, but we are comitted to ensuring that all players get what they purchased.  We are hearing from some players that some retailers are telling players that they will not be exchanging discs. We believe this to be incorrect and that particular person or location is just misinformed. 505 has ensured us that they are doing their best to make sure these discs are being replaced for all players. We will not allow anybody to fall through the cracks here. We will buy and ship the discs ourselves if we have too.   This was our first major retail release and we're extremely disappointed that our players have been let down with their purchase of the Don't Starve Megapack. We're doing our best to make sure this issue gets resolved as quickly as possible. Thanks everybody for your support and patience. We'll keep you updated.    UPDATE: (4/26/2018) We are now ready to send out vouchers to players who purchased the physical version of the Don't Starve Megapack - These codes will allow players to download and play Don't Starve and DLC as well as Don't Starve Together To get a voucher players can contact as at our support site: http://support.kleientertainment.com/customer/portal/emails/new  For the subject, choose "PS4 Megapack" and fill in the form and we'll get you fixed up as soon as possible.  We will require a picture of your receipt, your Klei account ID and the region you are located in (so we can give you the proper voucher).  UPDATE: (4/24/2018) Earlier this week, we discovered that the wrong content was printed on the PS4 retail version of Don’t Starve Mega Pack (the Xbox One version is not affected). It’s a really unfortunate situation and we’ve been working hard with 505 to resolve this as soon as possible. Below is the latest information: New copies are currently in print and will be on shelves ASAP, hopefully within a few weeks. When the new discs arrive in stores, players who already purchased misprinted discs will be able to exchange the disc for a new one in store. Details will follow as we figure out the exact timing, the procedures with specific retailers and what the exchange will entail.  Players who already purchased the faulty disc will also be able to contact Klei support for a voucher code that includes Don't Starve, Shipwrecked and the Reign of Giants DLC until the new disc is ready. Please specify your country as certain vouchers only work in certain regions.  We will have more details when they become available including details on contacting us and what information we might need.  Once again, thanks to everybody for their patience while we work this out. For questions or concerns, the forum discussion can be found below:   

Ryuushu

  • Content count

    111
  • Joined

  • Last visited

Community Reputation

43 Excellent

2 Followers

About Ryuushu

  • Rank
    Member
  1. Asymmetcrical Character Design?

    @MaiTerra I was poking around a bit more and figured out how to make idles work: --Remember to replace esctemplate with your character's prefab namelocal function ChangeAnim(inst) if inst.prefab ~= "esctemplate" or inst:HasTag("playerghost") then return end local dir = inst.Transform:GetRotation() local camera_rot = GLOBAL.TheCamera:GetHeadingTarget() % 360 print("Camera rotation:", camera_rot) print("Direction:", dir) if camera_rot == 0 or camera_rot == 45 then if dir <= -5 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end elseif camera_rot == 90 or camera_rot == 135 then if math.abs(dir) >= 90 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end elseif camera_rot == 180 or camera_rot == 225 then if dir >= -5 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end else--if camera_rot == 270 or camera_rot == 315 then if math.abs(dir) <= 90 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end endendlocal FRAMES = GLOBAL.FRAMESlocal TimeEvent = GLOBAL.TimeEventlocal function sg_postinit(sg) local old_locomote_event = sg.events.locomote.fn sg.events.locomote.fn = function(inst, data) ChangeAnim(inst) return old_locomote_event(inst, data) end if GLOBAL.TheWorld.ismastersim then local old_fishingcancel_event = sg.events.fishingcancel.fn sg.events.fishingcancel.fn = function(inst) ChangeAnim(inst) return old_fishingcancel_event(inst) end end -- Add/Remove TimeEvents as you see fitting. More TimeEvents = more accurate animations. Less TimeEvents = Slightly better performance. table.insert(sg.states["idle"].timeline, TimeEvent(20*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(30*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(40*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(50*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(60*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(70*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(80*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(90*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["idle"].timeline, TimeEvent(100*FRAMES, function(inst) ChangeAnim(inst) end)) if GLOBAL.TheWorld.ismastersim then table.insert(sg.states["funnyidle"].timeline, TimeEvent(20*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["funnyidle"].timeline, TimeEvent(30*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["funnyidle"].timeline, TimeEvent(40*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["funnyidle"].timeline, TimeEvent(50*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["funnyidle"].timeline, TimeEvent(60*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["funnyidle"].timeline, TimeEvent(70*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["funnyidle"].timeline, TimeEvent(80*FRAMES, function(inst) ChangeAnim(inst) end)) end table.insert(sg.states["fishing"].timeline, TimeEvent(20*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["fishing"].timeline, TimeEvent(40*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["fishing"].timeline, TimeEvent(60*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["fishing"].timeline, TimeEvent(80*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["fishing"].timeline, TimeEvent(100*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["fishing"].timeline, TimeEvent(120*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["fishing"].timeline, TimeEvent(140*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["run_start"].timeline, TimeEvent(1*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["run"].timeline, TimeEvent(10*FRAMES, function(inst) ChangeAnim(inst) end)) table.insert(sg.states["run"].timeline, TimeEvent(20*FRAMES, function(inst) ChangeAnim(inst) end))endAddStategraphPostInit("wilson",sg_postinit)AddStategraphPostInit("wilson_client",sg_postinit) -- Haven't tested it in the client yet.It's more or less the same except this time it hooks into the stategraph. This time it changes the animation as it moves instead changing it only at the start (when the event is received). This also means it's a bit more intensive (still better than DoTaskInTime though). With this the idle animation + rotating camera should work. I'm still unsure about how well it works with clients. Haven't been able to test it myself. Also, this time it goes into modmain, put it anywhere inside it.
  2. Asymmetcrical Character Design?

    @MaiTerra It goes in the character's prefab file, inside master_postinit. Did you remember to load the anim assets? Hmm, posting the crash screen/error line helps too.
  3. Asymmetcrical Character Design?

    @MaiTerra After playing around for a while, it's quite possible, no need to remake all animations from scratch. And it's rather easy. Notice the eye color. Anyways, here's how you do it: First, save your current Spriter project as mycharacter_build_right. The side view will be the side that'll show when your character is facing right. Copy-paste your project folder (Spriter project + images) to a new folder. Then in that new Spriter project modify the side view images to your liking. Don't worry about your character facing right. Save your spriter project as mycharacter_build_left. Let the autocompiler do its job and throw your new anims in your mod anim folder. In your character file add the new anim assets. Now comes the fun part; handling which anim build we should use. We want to use mycharacter_build_right when it's facing right, and mycharacter_build_left when it's facing left. So, when do we know the character has started facing a side? We could use the event "locomote". That event will be sent when the character moves. So, we just add a listener to that event and use a bit of trickery to figure out what direction is the character facing: inst:ListenForEvent("locomote", function(inst) if inst:HasTag("playerghost") then return end local dir = inst.Transform:GetRotation() local camera_rot = TheCamera:GetHeadingTarget() print("Camera rotation:", camera_rot) print("Direction:", dir) if camera_rot < 0 then camera_rot = camera_rot + 360 end if camera_rot == 0 or camera_rot == 45 then if dir <= 0 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end elseif camera_rot == 90 or camera_rot == 135 then if math.abs(dir) >= 90 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end elseif camera_rot == 180 or camera_rot == 225 then if dir >= 0 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end else--if camera_rot == 270 or camera_rot == 315 then if math.abs(dir) <= 90 then inst.AnimState:SetBuild("esctemplate_right") else inst.AnimState:SetBuild("esctemplate_left") end end end)endBasically what we do here is change our images depending on what side the character is facing. This should work relatively well. I haven't tested it with multiple players, but it should play along nicely. Also, there is another problem: The camera can keep rotating and go out of our scope. This should be solved by using the modulo operation ( % ) and then comparing. There might be some small problems with doing an action and then rotating the camera (like fishing), but nothing gamebreaking.