Search Unity

Shmup Baby

Discussion in 'Assets and Asset Store' started by EbalStudios, Sep 18, 2018.

  1. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi WaiFung,

    The animation effect, is an actual animation and not coded or anything (The player ship is even still controllable during the animation.)
    If you click on the player and click on "animated" in the hierarchy you will see the animation controller.

    Just a small reminder. the player in the horizontal level comes from the one saved in the prefabs and is connected in the level controller. if you want any changes to be active on the player, you need to change the prefab. If you change the one located inside the scene you will need to hit apply to make the changes active.
    ShmupBabyTemp.jpg

    Thanks for the tips for the assets, will certainly keep it in mind ;)
    Good luck with everything.
    Ali
     
  2. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    nice! thanks for the tip!
     
  3. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Hi Ebal/Ali,

    I understand I can use Layer Index to assign what goes on top of what. For player missile, as in your youtube tutorial, I can simply assign the missile to the Player Index and set the Layer Index accordingly to ensure it goes on top of enemy.

    How about enemy missiles (3D Model)? I have issues where enemy missiles going throw enemy spaceship 3D models. please see youtube video below

    https://youtu.be/EUuJWC5epns

    What is the proper way to do this with ShumpBaby?

    Thanks,
    Waifung
     
  4. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi Waifung,
    Just to clarify things, the index will set the z position of the player, enemies, etc.. But the missile, will have the same z position of the weapon it is being fired from. to solve your issue, please try to move the weapon turret that is firing the missile to be on top of the ship. (the camera is orthographic, so even if there is empty space between the turret "missile weapon" and spaceship, you will not see it). Just move the turrets up and see how it goes.

    Note: I did receive an earlier message about paths, not sure if you solved the issue, paths are actually 2D and you cannot have depth with them, and the camera is orthographic anyway, so if you need any depth you will need to write your own scripts or play with the scale in the animation to give a "fake" depth.
     
  5. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Thanks for your previous reply Ali. That works very well.

    I found potential bug in the "MissileMover.cs" where you have

    _desireAngle = Math2D.VectorToDegree(tracker.Direction);
    float angleBetween = FollowAngle - _desireAngle;
    if (Mathf.Abs(angleBetween) > 1)
    {
    if (angleBetween > 0)
    FollowAngle -= TurnSpeed * Time.deltaTime;
    else
    FollowAngle += TurnSpeed * Time.deltaTime;
    }

    if you Debug.Log the angleBetween, and try to dodge the missile by going up or down, you will see something like this happening:
    angleBetween -0.3782389
    angleBetween -0.2441164
    angleBetween 355.8538
    angleBetween 351.8288

    all of the sudden that the angleBetween becomes a big number i think because somewhere (maybe Math2D.VectorToDegree) the calculation returns 360 instead of 0 degrees. When this happens, the missile will try to turn around a full circle according to the if-statement. See the youtube video in below link:



    See the console debug.log and watch the space craft dodging the missile you will see what I mean.

    Does this behave the same on your computer? If so, would you have a fix for this?

    Thanks,
    WaiFung
     
  6. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Thank you WaiFung, you really did dig deep into this pack :)
    But man you are confusing the missile! The missile just gives up and leaves the level :D

    I have to look into it, but I believe your assessment is correct, at the moment though I can't give any promise if this will be a priority change.
     
  7. Paul-van-der-Laan

    Paul-van-der-Laan

    Joined:
    Oct 12, 2013
    Posts:
    60
    I maybe found a bug although it could also be caused because I have changed the project code. When using mobile phone touch controls and when starting a new game, sometimes the player object probably overshoots the mouse position after spawning which results in moving outside of the destroy by region area which results in destroying the player object right after starting the game.

    Solving this for now by excluding the Player layer in destroy by region script.
     
  8. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Thanks for the feedback, will look into this one as well and see what might be causing it.
     
  9. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi Paul, I double checked the scripts to try and figure out what's happening, but still no luck. can you just double check this for me:
    -Inside the level controller, can you please increase the offset of the destroy be region, make it really big just to see what happens.

    offset.jpg
    -Also can we just use the default settings for the gamefield

    gamefield.jpg

    I am betting that the destroy by region offset should solve it, because the controls, if using computer or tablet touch only returns direction so in theory it should make no difference if you are using touch or keyboard.
    Anyways please keep me posted on how it goes. Thanks a lot

    Update: Next week I should be uploading the fixed missile weapon issue that WaiFung pointed out. I already fixed the missile mover but I need to test it.
     
  10. Repanon7

    Repanon7

    Joined:
    Nov 5, 2019
    Posts:
    3
    Doing the first tutorial with horizontal. When I want touch play the game screen goes black. I can see the UI, but my player and the background is gone, everything is black.
     
  11. Repanon7

    Repanon7

    Joined:
    Nov 5, 2019
    Posts:
    3
    Never mind. User error. I used my own background, but didnt make it into a prefab.
     
    EbalStudios likes this.
  12. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Just a quick update, we released version 1.21 which only changes the missile mover to fix the issue WaiFung has pointed out earlier.

    The missile mover is now a lot better in finding targets especially at low speeds and it does not get "confused" and go out of the screen like the previous version, but if you still like the old behavior, I have kept the older script commented out inside MissileMover.cs
     
  13. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Great Man!!! Thank you!!

    Another question. There is no detect radius logic for player missile and enemy missile correct?
     
  14. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    You are correct, there is no detect radius logic for the missile, it just picks a random enemy in the game field and heads towards it, which means it could in some cases feel as if it's moving away from the enemy close to it and heading towards a far one.

    When rewriting the current missile mover, I considered revising the tracker system, but really this would be a considerable task since there is quite many options to choose from on how to do the tracking and I left it as is.

    I am still working on version 2, and will take this into consideration when doing the new missile mover.
    And no, no dates or time-line will be given for version 2, but maybe later I will post a quick video on the progress and features.
     
  15. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Great man Ebal/Ali. Thanks for your last reply.

    I looked into your codes abit more. I am about to add/write my own scripts for permanent upgrade-able aircrafts etc.

    I do know that you have weapons upgrade functionalities implemented already. If my understand is correct, the weapon upgrade functionalities you have is mainly for "pick up item" upgrade.

    What I need (and will write my own scripts) is permanent weapon upgrade where player spend IAP and coins etc to permanently upgrade their weapon systems. Before implement my own code, i just want check with you to make sure such functionalities is not in Shumpbaby, Correct?

    Thanks man as always,
    WaiFung
     
  16. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi WaiFung,
    Yes. You are correct, the upgrades inside Shmup Baby is only implemented through pickups and we don't have one which is permanent like what you are looking for.
     
  17. Hibito555

    Hibito555

    Joined:
    May 17, 2019
    Posts:
    18
    Hi My Master,
    What’s wrong?
     
  18. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi,
    It has something to do with the waves you are using inside the level controller. One of them might be empty or you might have used a non wave prefab with it.
    Please just double check the waves you are using inside the level controller.
    Annotation 2020-02-08 105036.jpg
     
  19. Hibito555

    Hibito555

    Joined:
    May 17, 2019
    Posts:
    18
    Nice!
    thank you!
     
  20. Hibito555

    Hibito555

    Joined:
    May 17, 2019
    Posts:
    18
    Does the player weapon have a bomb?
    I need Area of Effect after a bomb hit.
    thank you.
     
  21. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    No, there is no player bomb.
     
  22. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Hi,

    In the PlayerSelect scene / BluePlayerSelectCanvas, I want to change the Y location of the TurnTable, how to do that?

    Thanks,
    WaiFung
     
  23. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    I already answered this in private conversation and sent a modified script, but just if anyone else had a similar question.

    It can be done by translating the _visuals array inside the PlayerSelectUIManager, or by moving the camera, or by playing with the distance from origin value but only in small amounts.

    But please note that if you put the ship up in the screen you will be looking at it from below and this cannot be changed with the system you have. The main menu and player we provided as demos and are not meant to be a complete customizable UI system. Such system is well beyond the scope of this pack.
     
  24. LeftTurnWorkshop

    LeftTurnWorkshop

    Joined:
    Jul 10, 2018
    Posts:
    5
    Hi there. I also have a problem like Hibito555, this one involving an out of range exception for a seamless layer array. Mine is repeated on an infinite level. Perhaps they can only be repeated a finite number of times? Any assistance would be deeply appreciated.
    seamlessLayerError.JPG
     
  25. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi, actually we had the correct safety check in the horizontal version but forgot to add it in the vertical one. This has to do with the speed of the background moving, if the background is moving too fast or you have too many things happening inside the scene, it is possible that there is not enough time to reset the active background.

    to make it short, please open up: "SeamlessLayerControllerVertical"

    and in line 37 inside the update method which states: backgrounds[maxIndex].SetActive(true);
    Add this check:
    Code (CSharp):
    1. if (maxIndex < backgrounds.Length)
    2. {
    3.     backgrounds[maxIndex].SetActive(true);
    4. }
    the (maxIndex < backgrounds.Length) check before setting to active should solve your problem.
    If you have any trouble modifying the script or if it still doesn't solve your issue please do let me know, or I can just send you the modified version via private conversation.
     
  26. LeftTurnWorkshop

    LeftTurnWorkshop

    Joined:
    Jul 10, 2018
    Posts:
    5
    That did the trick. Thanks a million!
     
  27. LeftTurnWorkshop

    LeftTurnWorkshop

    Joined:
    Jul 10, 2018
    Posts:
    5
    Hi there. I have one more (hopefully final) problem. Everything works fine in the editor but when I build to iOS there seems to be an issue. The player's weapon occasionally gets stuck somewhere on the screen and restarting the game (infinite level) seems to work at first but only generates the first stream in the array. After that, the scrolling continues but no new streams or waves are spawned.
    This is what comes up when debugging with Xcode:

    UnloadTime: 1.670583 ms
    2020-04-10 10:18:02.102726+0200 coronablaster[718:461921] [Assert] -[UIApplication setStatusBarOrientation:] and -[UIApplication setStatusBarOrientation:animated:] API have been deprecated on iOS 8.0 and are no-ops on iOS 13.0
    Unloading 19 unused Assets to reduce memory usage. Loaded Objects now: 8842.
    Total: 11.891458 ms (FindLiveObjects: 0.928250 ms CreateObjectMapping: 0.186458 ms MarkObjects: 10.670208 ms DeleteObjects: 0.105708 ms)
    2020-04-10 10:18:12.682393+0200 coronablaster[718:462176] [] tcp_input [C10.1:3] flags=[R] seq=112938228, ack=0, win=0 state=LAST_ACK rcv_nxt=112938228, snd_una=147179667
    2020-04-10 10:18:12.682869+0200 coronablaster[718:462176] [] tcp_input [C10.1:3] flags=[R] seq=112938228, ack=0, win=0 state=CLOSED rcv_nxt=112938228, snd_una=147179667
    2020-04-10 10:18:17.523563+0200 coronablaster[718:462175] [] tcp_input [C8.1:3] flags=[R] seq=3850508030, ack=0, win=0 state=LAST_ACK rcv_nxt=3850508030, snd_una=2383194985
    2020-04-10 10:18:17.523821+0200 coronablaster[718:462175] [] tcp_input [C8.1:3] flags=[R] seq=3850508030, ack=0, win=0 state=CLOSED rcv_nxt=3850508030, snd_una=2383194985
    Uploading Crash Report
    NullReferenceException: Object reference not set to an instance of an object.
    at UnityEngine.Component.get_transform () [0x00000] in <00000000000000000000000000000000>:0
    at ShmupBaby.InputManager.GetDirection () [0x00000] in <00000000000000000000000000000000>:0
    at ShmupBaby.InputManager.Update () [0x00000] in <00000000000000000000000000000000>:0
    (Filename: currently not available on il2cpp Line: -1)​

    The null reference exception repeats until quit. Any assistance or insight you could offer would be deeply appreciated.
     
  28. thebeebub_unity

    thebeebub_unity

    Joined:
    Dec 23, 2019
    Posts:
    4
    I'm currently remaking Star Fox 64 (3DS version) as a horizontal shmup, and I need some help with a couple mechanics. I've provided the timestamps for the following reference video if that helps.

    This is what I have: https://www.dropbox.com/s/7b75xgwmw3wpmwh/StarFoxSHMUP.mov?dl=0
    Here's a video for reference:
    .

    #1: Boosting & Braking (2:21-2:47)
    This would probably require adjusting the ship's backward speed and forward speed independently from up or down and each other. I also need the boost meter (top-right) to fill up when boosting or braking.

    #2: Banking & Barrel-Rolling (0:38-0:52)
    This is pretty similar to the above method. When I move up or down while holding another key (Tab) I need the ship to move faster in that direction, and do an additional sprite swap. If I double-click the Tab key, the ship should perform a Barrel-Roll. This would mean playing the animation and deflecting any projectiles in random directions.

    #3: Bombs (0:53-1:01)
    These can be collected as pickups and display on a counter next to the player's health bar I need to be able to shoot out a bomb with the B key. This detonates 1 second after fired, and can be detonated early by clicking the B key again. When bombs detonate, they immediately scale to their max blast radius (which would be a sprite animation) without any transition. Any agents within a certain distance of the sprite (they don't have to make contact) will take damage.

    #4: Charged Shots (1:02-1:37)
    These would work like missiles, except with 2D sprites instead of models. If the player holds down the fire button for 1 second, they will begin charging their laser. This takes about 0.5 seconds, and if the fire button is released early, it will cancel the charge and despawn the shot. If the fire button is held down for the complete duration, you must let go of the button and click it again to shoot the projectile. These should also be able to lock on to enemies. If there is an enemy directly in front of the ship while you are charging, a square reticle will appear over the enemy and the shot will home in on it after being fired. If the enemy moves out of a specified radius surrounding the shot, it will stop homing.

    #5 Gold Rings (1:47-1:57)
    Collecting these pickups plays a unique sound, while the other pickups don't. They need to be displayed as icons between the health bar and bombs. Collecting three increases your max health and lengthens the health bar, while also restoring HP considerably. Picking up another 3 afterwards will give an extra life. Any gold rings collected and/or additional max health carries over to the next level, but will be reset on death. Your lives are persistent between levels no matter what.

    With all that out of the way, it'd really helpful if anyone could tell me how to implement any of these features. Thanks in advance!
     
  29. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Hey EBAL/Ali,

    Any idea on how to make laser weapon (for both enemy and player) using Shump baby?
    I want to ask you first before I make modifications to your code.

    Thank you man!

    Wai Fung
     
  30. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    I also notice that the EnemyRadioWeapon script / Rotation Speed does not really rotate the direction of the particle system, but instead individual bullets... This is expected? or is it a bug?
     
  31. RK7547

    RK7547

    Joined:
    Jan 12, 2019
    Posts:
    1
    Hi,

    I want the player's speed to be constant, just like in the old shooters.
    I'm wondering if I should rewrite some part of PlayerMover script, but I can't program it.
    Please help me.

    Thank you.
     
  32. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi everyone and apologies for the delay in replying, I didn't get any notifications for all the new posts and no one sent any E-mails so I didn't know there was any new posts.

    I just opened this thread and was surprised to see all the comments, I will start replying to them one by one now.
     
  33. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi,
    From the debug lines, I can only get that something might be wrong with the input manager but I really can't know anything like this.
    Can you please re-import the pack in a new project, make a build of one of the demo scenes for IOs and see if you get any errors? Thanks

    Edit 3/7/2020: This has finally been detected and solved after another user experienced the same issue and I was able to pin point it, I sent you a private message with the new infiniteLevelController and I should be uploading the update to the asset store next week.
     
    Last edited: Jul 3, 2020
  34. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Apologies, but we are unable to guide anyone in customizing their game or building content specific to their needs. It would be practically impossible for us to help each developer build their own game with custom features.
     
  35. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    You can try to make a standard normal path weapon but with a very high firing rate, it won't be a perfect lazer, far from it. But a quick solution.

    Otherwise you would have to build your own.
     
  36. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Yes this is expected and not a bug, rotation speed rotates the particles.
    To rotate any weapon use the "WeaponMod_Rotation.cs" script.
     
  37. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Hi,
    To make it constant, first change the project settings (edit--> project settings), go to horizontal and vertical and change the gravity value to something like 30.

    And if this is still not enough, open up the "InputManager.cs" script and add one word: ".normalized" to the return value of the get direction function
    basically just change return direction; to return direction.normalized;
    InputGravity.jpg normalized.jpg
     
  38. thebeebub_unity

    thebeebub_unity

    Joined:
    Dec 23, 2019
    Posts:
    4
    How would I go about changing weapon positions when my ship does a directional sprite swap?

    Does this package work for 2 player coop or versus? Could I use a ps4 controller for inputs? I want the player to plug in at least 2 controllers to their computer and be able to play locally. Online works too though.

    I can't figure out how to enable controls in the editor and mobile at the same time, even though I read through your manual. I need this so I can test on my mac and also use the Unity Remote app on my iPad without building to it, but I'm not sure what to change in the code.
     
    Last edited: May 16, 2020
  39. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    That feature is not available, if you wish to add it, you will need to add your own custom mover script on the weapon. you can have a quick look on how the directional sprite swap script works and then in a similar fashion create a new mover script for the weapon.

    The input uses standard Unity input (horizontal,vertical, fire1) so you should be able to use it with a ps4 controller but only for a single player, there is no multiplayer controller or mode available in any shape or form (local or online).

    Mobile controls are disabled inside the editor, this was made so that you can play the game when you are not connected to a mobile device. If you want to enable them just go to InputManager.cs and wherever you see this statement:
    #if ((UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR)

    change it to: (UNITY_ANDROID || UNITY_IOS)
     
  40. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    hi EBAL

    i notice that the Enemy Path Weapon script would forces some particle system parameters values to equal something. For example, I want to set to local space, and i think the script would forces the setting to world space every time i changed something. Where and in which script does your code forces this behavior? thank you.
     
  41. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Inside PathWeapon.cs line 177: Collision.type = ParticleSystemCollisionType.World;
    And RadialWeapon.cs line 245: Collision.type = ParticleSystemCollisionType.World;
     
  42. imm-unity

    imm-unity

    Joined:
    Mar 8, 2020
    Posts:
    4
    Hi Ebal team, congrats on making a great pack! A lot of power and flexibility in the setup, plus great videos and documentation. I also really like the focus behaviour, missile targeting and AI mover. Question regarding the AI Mover script; is there a relatively simple refinement that can add some smoothing to the AI movement? By smoothing I mean a gradual increase to full speed at the beginning of an avoidance move. A gradual decrease of speed to zero at the end of an avoidance move would also be great, but I understand that might be more complex. I think such smoothing would add a lot to AI enemies by giving them a more 'organic' feel, especially those with high speed values.
     
    EbalStudios likes this.
  43. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    Thank you for the kind words.
    Absolutely, interpolating the moves (Mathf.Lerp) to make the AI movement smoother can make the AI enemies feel a lot smoother than they currently are. But it's just as we have stated in the description, we really can't make updates and improvements to this pack, there is just so many small and big things that need improvements that we prefer to put the effort in the completely newer version.
    But if while working on the AI mover for the newer version I feel like adding the lerped smooth movement is quite simple and straight forward, I will keep you posted and share anything I have regarding it.
     
    imm-unity likes this.
  44. imm-unity

    imm-unity

    Joined:
    Mar 8, 2020
    Posts:
    4
    Thank you for your fast reply. Yes I understand the pack is not being updated as you did make that clear on the purchase page. Thanks for the Mathf.Lerp tip, I am guessing I would have to make the changes in the mover class itself (not AI mover), but it is a bit beyond my understanding. It's fine, I will use the pack as is for the time being. Thanks again!
     
  45. imm-unity

    imm-unity

    Joined:
    Mar 8, 2020
    Posts:
    4
    Hi Ebal team, are Main Menu scenes intended to be able to access levels within InfiniteLevelController.cs? On a build version a Main Menu scene's UI (based on the Main Menu scene provided with the pack) allows the first level created by InfiniteLevelController to be played, but no further levels appear. Also, selecting higher levels within the Main Menu UI during a running build does not access any of the levels higher than level 1. I have read through the documentation and videos but have not been able to work this out.
     
  46. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    I should have explained this better in the documentation or the tutorials, but for the infinite level controller you can only play one level and there is no way of accessing any other levels, it would probably best if you just delete the select level button from the main menu when building for an infinite level controller.
     
    imm-unity likes this.
  47. imm-unity

    imm-unity

    Joined:
    Mar 8, 2020
    Posts:
    4
    Thanks for the explanation, I will switch to using the alternative level controller. :)
     
    EbalStudios likes this.
  48. Unity3DGameExpert

    Unity3DGameExpert

    Joined:
    Jul 19, 2019
    Posts:
    5
    Hello Ebal. I m using your package for building game. I have some question about space verticle. Can I build space verticle scene on Landscape mode ? Please help me.
     
  49. EbalStudios

    EbalStudios

    Joined:
    Nov 20, 2016
    Posts:
    444
    If you want to build a: Vertical scene in landscape mode for a mobile device you will have to do code adjustments.
    By default, if you are building for mobile. The package will automatically override the device settings, and set it to portrait if it's a vertical level, and to landscape if you are building a horizontal level.

    However, if you are asking about building a vertical level for desktop, then the scene will be built using the forced aspect you set in the camera, with black areas on the sides filling up the gaps.

    If you would like to change the behavior of forcing a mobile device into portrait mode when playing a vertical level, you can look into the "OrthographicCamera.cs" script and change the "InitializeCamera()" method lines 127 to 154.

    Note: In line 127, the statement (#if !UNITY_IOS && !UNITY_ANDROID) means that you can only execute the following block if the device is in desktop,to be more specific: not running IOS or Adnroid (mobile).
     
  50. Hibito555

    Hibito555

    Joined:
    May 17, 2019
    Posts:
    18
    Hi My Master,
    Missile Weapon Options “Random Rotation on Launch: Start each missile launched with a random rotation.”What effect?