Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - TheOrcCorp

Pages: [1]
1
Tournament Archives / Orc's Wars Series 5 (For Real This Time)
« on: October 31, 2020, 06:03:09 PM »
 

Right so after computer issues, crash patches and lack of motivation: we're REBOOTing Orc's Wars Series 5!

RULESET:
https://docs.google.com/document/d/1DVpgLadgG2l9BxwuycujsRLUE_qp7AJINEakg7BnWsk/edit?usp=sharing
QUALIFICATION:
FORMAT:
SEEDS:

OW5 will be using DSL 2.4 alongside using Coloured Slipperbottoms and Robot X Caster Colours....PLUS a NEW ARENA! Keep your eyes peeled.

SUBMISSIONS START ON THE 23RD OF NOVEMBER. Good luck and ask me any questions you have. :mrgreen:

2
Tutorials and Tips / Orc's Simple(ish) Guide to AI'ing DSL Bots
« on: August 26, 2020, 05:49:11 PM »
Right, time for the AI'ing part of my tutorial series. Don't run away, I promise everything will be explained clearly as possible!
 

AI is the code robots use in Robot Arena 2 to work as opposed to you manually driving your robot to test it or play in Parsec. Supplying your own AI code for your robot(s) to hosts for AI Tournaments makes for an easier time for us and we'll appreciate you a lot more! (If you think about it, if everyone AI'ed their bots then tournaments would happen A LOT quicker...) AI is not hard, just a bit fiddly and requires messing around with...besides it makes for better testing of your robots for things like OW or Deathmatch etc.

EXPORTING/SETTING UP A TEAM
So we've wired our robot(s) up from the last tutorial, time to get them AI'ed up! I'm going to use my bots from the previous tutorials as examples again for consistency! Select your robot, click Export and name your robot Bot0/Bot1/Bot2/Bot3/Bot4/Bot5 - these are the names the game's code recognises when loading in robots and represent the 6 slots in an AI team.
 

When done, we're going to create a new team for our AI creations. Quit your game and go into your AI folder.
 

We have a bunch of Team folders here, you can either replace an existing bot file by dragging your bot files into an existing team folder OR you right click and select New -> Folder. Name this folder to follow the last Team folder you currently have. For example, my current last folder is Team20, so I've named my new folder Team21. Copy your bot files you just exported into this folder.
 

Now go back to the AI folder and open up the Teams file. I use Notepad to do this.
 

You want to copy ALL of the text in this red square and paste it at the very bottom of the document. The following things are what you need to change:
index 0 (change 0 to your new Team folder number, in my case 21)
Red Zone (I'd suggest changing this so you know what you're looking for)
"That's where your bot will be after ten seconds with ours!" (You don't have to change this but...eh.)
AI\red_zone.bmp (Again, don't have to change this but...eh.)
Robots: 0 1 2 3 4 5 (If you have 6 robots then leave this as is, if NOT then remove the numbers to compensate. For example, I only have 4 robots so will remove 4 and 5.)
 

Save your document when you have made your changes...now we move onto AI! Open the Bindings file in your AI folder.

AI:
 

Good lord, that's a lot of text...HEY, DON'T RUN OFF! RA2 AI is compromised of smaller segments that tell a robot how to act. Here are the basic ones you need for your robots (with definitions taken from the AI-Chart)
nose - the front of the robot. Tends to be either math.pi or math.pi*2 but if you build your robot facing the side then it might be math.pi*0.5.
topspeed - speed in meters/second AI will attempt not to exceed (default 4.0).
throttle - maximum analog value AI will attempt not to exceed (default 100)
turnspeed - turning in radians/second AI will attempt not to exceed (default 2.5)
turn - maximum analog value AI will attempt not to exceed (default 60)
radius - bot radius to used to check distances to hazards, walls, and other bots. (default 1.0). With a high value, your bot will avoid hazards, with a null value, it will ignore them (but hazards will not ignore your bot!).  Low value may be useful for high speed bots like pusher or rammer that rely more on their speed than maneuver.
weapons – Id of the weapon. Once all the components with theses Id are broken, the strategy of the bot may change to pusher. You could put a number for each weapon you have. As example: ,'weapons':(1,2,3,4,5,6) You DO NOT need to exact component number.

SPINNERS also use:
range - This determines the distance for when a spinner will start spinning it's weapon.

A bonus but IMPORTANT segment is:
'invertible':True, - This allows a robot to run upside down. You may see some robots with 'invertible':False, but I tend to omit this from when I do AI as I feel it's pointless. Lets take a look at Highschool Ex II's AI line:
    list.append(("Highschool Ex II","Omni",{'nose':math.pi,'radius':0.2,'range':100,'topspeed':200,'throttle':200,'turn':60,'turnspeed':2.5,'weapons':(1,2,)}))
As you can see Highschool Ex uses the 8 basic AI parts with values that Sev has spent time on to adjust. You're gonna have to test your AI a lot to make sure your bot is running how you want it to! You can AI your bots by copying another bot's AI line and adjusting the values accordingly with trial and error! (including changing the name to your own robot otherwise you'll keep crashing your game) DSL 2.4 comes with a DSL Bindings Templates file for your convenience.

You may notice a lot of files called PY files in your AI folder...these are different commands for each robot and why you need to wire/name your buttons correctly. Let's look at some basic py types with our four example bots applied to them!
Omni.py - The jack of all trades, Omni can be used for almost anything, great for weapon combinations. Flippers with a seperate srimech, spinners with a srimech, axes, pistons etc. As you can see here, Necky doesn't have anything too fancy with this AI line, just the basics so it can fire it's weapon and self-right.
    list.append(("Necky III","Omni",{'nose':math.pi,'radius':1.4,'topspeed':100,'throttle':250,'turn':80,'turnspeed':2.5,'weapons':(16,17,18,)}))
Flipper.py - Your typical flipper AI, this is good for flippers that self-right using their flippers. VVC's nose is the opposite direction but he functions the same!
    list.append(("Vivacious C","Flipper",{'nose':math.pi*2,'range':99,'radius':0.1,'topspeed':100,'throttle':130,'turn':60,'turnspeed':2,'weapons':(18,19)}))
Spinner.py - Typical spinner AI, not much to be said really. Deadgnaws here can somewhat drive upside down but relies on invertibility more to help the spinner turn it back over.
    list.append(("Deadgnaws III","Spinner",{'invertible':True,'nose':math.pi*2,'radius':0.1,'range':500,'topspeed':100,'throttle':130,'turn':60,'turnspeed':2,'weapons':(29,30)}))
There are plenty of other binding types but these are the most used in my opinion. Now let's look at Judge.py.

JUDGE.PY
Judge.py is for robots that use Beta/Overkill motors and as such have some added commands. Before we get into these, you'll need Notepad++ (at least that's what I use) https://notepad-plus-plus.org/downloads/ - download this and then carry on reading below.
MotorID - This is the number that represents your Beta/Overkill Motor. Right click your bot file and select "Edit with Notepad++"
 

Good lord, looks like a mess right? Don't worry, scroll down till you find these parts.
 

You will have to count each component (tedious, I know) until you find your Beta/Overkill motor. As we can see here, Miles the Marauder's first component is the betaburst so his MotorID is 'MotorID':1, - adjust accordingly to whatever number your component is!
StartAngle - This is where your weapon starts, most of the time it's either math.pi*0.6 or -math.pi*0.6
Reload - This is a unit for how long your weapon takes between firing.
    list.append(("G-funk F","Judge",{'nose':math.pi,'MotorID':38,'StartAngle':-math.pi*0.6,'reload':10,'radius':0.1,'topspeed':1000,'throttle':100,'turn':50,'turnspeed':2,'weapons':(32,)}))
As we can see here, G-Funk's motor was component number 38 so it's MotorID is 38, aside from the two added segments needed for a judge.py bot, the rest is similar to other robots.

FINAL WORDS:
All you need to do to make an AI line work is:
- Make sure it's on a fresh line
- Make sure everything is spelt case sensitive and correctly
- If the game crashes, you've spelt something wrong or removed an important part such as a comma,apostrophe or bracket.
 

I set it up like this simply for consistency...yes I keep the old AI too for reference. So I did some AI testing...
 

Necky didn't self-right with it's head so I'm gonna wire up it's head to the Srimech button (sometimes you have to go back to the Bot Lab to make changes but that's just bot building!) and I'm going to increase it's speed too!
 

Miles is facing the wrong way so I'm going to change his nose to 'nose':math.pi*2, ...
 

He's facing the right way and he fires his weapon pretty quickly thanks to messing with his Reload. I'm gonna alter the AI lines a bit more but this is basically it! Anyone can AI, it's not hard, just fiddly and takes time. Bear in mind that more tournaments might enforce your own AI in the future...I'm looking at it for OW5. With these tutorials you should have no excuse now!

If you have any questions, please ask away and if you think anything needs changing/adding then let me know! Hope this helps!

3
Tutorials and Tips / Orc's Simple(ish) Guide to Wiring Up DSL Bots
« on: August 17, 2020, 01:15:24 PM »
Right, ol Orc has heard enough bitching about AI that he's decided to make a tutorial series so that NONE of you have an excuse. Grab a snack/drink and read thoroughly!

Wiring involves naming your controls and adding smartzones so that the AI knows what kind of robot it is as well as when to fire it's weapons. We need to check our controller and make sure everything is named/wired correctly. You MUST name your controls precisely or they will not work. Button and smartzone names are in bold.

DRIVE
Forward - This makes the robot drive forward and backwards. For drive on the left side of your robot, the positive axis is Counter-Clockwise while the negative axis is Clockwise. For drive on the right side of your robot, it's the opposite: the positive axis is Clockwise while the negative axis is Counter-Clockwise.
 

LeftRight - This makes the robot turn to the side. No matter what side of drive you're wiring up, positive axis is Clockwise and negative axis is Counter-Clockwise.
 

Apparently, if you attach a wheel with the attachment point on the other side then you'll need to reverse your Clockwise/Counter-Clockwise settings (so Clockwise becomes Counter-Clockwise and vice versa). That's the drive done! Now we'll look at a few different bot types and what buttons/extras they need. I'm going to use a few examples of my own robots here.
FLIPPERS
Vivacious C is a flipper (a terrible one but he'll do for this tutorial). He needs a button as well as a smartzone to function properly.
Flip - this enables the flipper to fire up AS WELL as function as a srimech. Wire this button up to your flipping motors and make sure they have "Fire" selected so that they work.
 

Smartzones are found at the end of the Power section in Bot Construction. If you hit F12, you'll be able to see your selected smartzone and place it. You want to pick a smartzone suitable for your flipper's size and place it down accordingly. You'll need to experiment to find the best spot for your smartzone and name it flip . This combined with the button will make the flipper work!
 

 

SPINNERS
It's my boi, Deadgnaws! Spinners are extremely easy, requiring no smartzones: just one button (YES BUTTON, NOT SWITCH) for the spinner to work.
Spin - This enables your spinning motor to work. You'll have to adjust what direction it spins (Counter-Clockwise or Clockwise) to suit your robot.
 

Do NOT wire your spinners to a switch as the AI constantly turns them on and off during the battle. Wire it to a button and you're good to go.
AXES/PISTONS/FLAMETHROWERS ETC
Axes/piston spikes/flamethrowers etc all use the same base controls. I'll use Necky as my example here.
Fire - This enables your weapon to attack when a robot is in your smartzone.
 

You'll need a smartzone for these bots called weapon , again placed appropriately which will take some experimenting. Flamethrowers can also be assigned to your Forward button so that they are on when your robot drives but the choice is up to you.
 

SRIMECHS
Srimechs are easy.
Srimech - This enables your srimech to function when the robot is upside down.
 

BETA/OVERKILL MOTORS
These can be tricky buggers but the base settings are:
Hammer - This enables the motor to swing down. You will have to possibly mess with the axis settings when it comes to AI'ing but we'll come to that in the AI tutorial.
 

You'll need a smartzone named weapon and placed where you want it like the other smartzones
 


Right, think that's everything. Feel free to poke me if I missed anything but as far as I'm aware this has all the most used basic AI wiring needed. I've never done anything like this before so I HOPE it's helpful. Stay tuned for the next part which will focus on AI'ing!

4
Tournament Archives / Robotic Combat 2004
« on: July 21, 2020, 03:02:38 PM »
What if Robot Wars had another series in 2004? What if Battlebots had returned after a brief break for Season 6.0? Well Orc took his Time-Space-Transporty-Whatsit to a universe where both shows hadn't been taken off the air AND had joined forces to become...
 

(Great name I know)

GENERAL RULES:
- So the idea behind this tournament is simple: participants must take a robot and design it as if it was entering Series 8 of RW/Season 6.0 of BB. You can take any robot from these franchises...I will also allow you to pick MODERN robots but you must downgrade them to being Series 8/Season 6.0 quality.
- 32 Bot Tournament. Robots will be seperated into 4 heats of 8 in 1 on 1 battles.. All Heat Finalists will advance to the Grand Final but they still fight to confirm their place in the Grand Final. The Grand Final itself features Heat Winners taking on other Heat Runners-Up (So Heat A Winner fights Heat B Runner-Up, Heat B fights Heat C Runner-Up and so on.)
- Robot Wars 2016 Arena.
- Supplying your own AI is appreciated but not required
- Crash Patch is being used (as with all tournaments I run now)
- I shall be entering. I will open up 2nd entries if entries run dry.

BUILDING RULES: (basically OW5 rules)

ENTRIES:
1. Gammatron Returns by Plerco
2. Trimangle 2004 by MrMatthews
3. Comically Large by Cringey
4. Garm by NeonCalypso
5. Iron Awe 3 by Botbuster
6. Sniper by MrBK
7. Mega Deadblow by ForceOfWill
8. Wipe Out #2 by Gulden
9. Deadman's Hand by Superbomb
10. Raging Knightmare: The Return by Double00Rhys
11. Thorak Nemesis by Primeval
12. Barber-Ous 3 by SM
13. Witch Doctor 2004 by Nightraven
14. Facet Evo by IBD
15. Kill-O-Amp 4.0 by Hard Bot
16. Orac's Reboot by MrBK
17. Village Idiot by Superbomb
18. Complete Control by RedAce
19. Frostbite 5.0 by Nicky
20. ORBY by Botbuster
21. Black and Blue by SM
22. Hypershock by Autobot Jazz
23. Rotator by Cringey
24. Tazbot by Neon
25. Bloody Eclipse by Mattiator
26. Greenwave by NH
27. The Matador by NH
28. Ultraviolence 2004 by Double00
29. Stinger The Killer Bee by Nightraven
30. Terror Bull 2 by Orc
31. Hammerhead Evo by Plerco
32. Supernova by Captain Mantine


Final note, have fun, be creative but DON'T TAKE THE PISS. (Looking at you Sagaris...with your bloody Mighty Mouse with an overhead bar...I'M WATCHING YOU)

5
Tournament Archives / Anonymous Assault!
« on: July 04, 2020, 05:25:58 PM »
Don't worry, Sunday Night Showdown will be happening...after OW5! But for now...
 


GENERAL RULES:
- Idea behind this tournament is that the builders that take part aren't revealed TILL THE END OF THE TOURNAMENT. Trying this out for an experiment.
- 16 bot tournament (ideally new builds, maybe 32 depending on how much interest there is.) Single knock-out tournament.
- RoboGames Arena for a change of pace!
- Supplying your own AI is appreciated but not required

BUILDING RULES: (basically OW5 rules)

Last note: if you do enter...DO NOT TELL OTHERS/SHOW YOUR ENTRIES, it goes against the point of this tournament.


7
Contests / BOTM December 2019.
« on: December 04, 2019, 07:09:59 AM »
Hello folks, yes BOTM is alive for this month and we're going oldschool with the format.

Entrants must build a robot based on the theme "WINTER" and then create a splash for it to submit to the BOTM account. You can use whatever game/meta you like with no weight limit. Only other rules I will add are: BE CREATIVE and HAVE FUN! :mrgreen:

Splashes must:
- Be sent to the BOTM account by 11.59 pm, GMT Time, 27th December 2019.
- One splash per member.
- Contain images of the robot (add insides if you wish)
- Contain information (weight/weaponry etc)
- Images must be no wider than 700px and no taller than 800px. (Going by old BOTM here so let's stick with it for now)

Apologies for no BOTM last month but we were trying to think of ways to gather interest back in it after seeing people opposed to it being on Discord. If you want BOTM to remain on the forum then this is your time to take part and make it happen: as admins we can put ideas forward to try and keep things fresh/consistent but it's up to everyone as a community to keep things going.

Best of luck all! :dance:

8
Contests / BOTM Changes going forward
« on: September 29, 2019, 05:10:19 AM »
Hello all!

Thanks again for your feedback about BOTM! Starting onwards, BOTM will mostly remain the same apart from that entries for it must now be SHOWCASED alongside being messaged to the BOTM account. Hopefully, this will provide a bit of a burst in showcases and encourages feedback/talk. Kix will host this month again but we're planning on alternating hosts monthly to stop people getting bored/burning out.

Also if you haven't voted for BOTM October then GO AND DO IT AAAAAAAAAAAAH
https://gametechmods.com/forums/contests/vote-botm-october-custom/
https://gametechmods.com/forums/contests/vote-botm-october-irl/

Thank you!

9
Off-Topic Discussion / Looking For: Dedicated BOTM/Challenge Belt Staff!
« on: September 22, 2019, 03:28:36 PM »
Yes indeed: we're looking for dedicated members who will be happy to host BOTM/Challenge Belt. If current hosts wish to stay on then they can let me know below!

BOTM Host (CodeSilver, Sickle, Dark-AL, Bildschirm,
Stock Challenge Belt Host (+ possible Parsec Host) Nicky
Ironforge Challenge Belt Host (+ possible Parsec Host)
DSL-S Challenge Belt Host (+ possible Parsec Host) 8bean (non-Parsec),
DSL-IRL Challenge Belt Host (+ possible Parsec Host) Bildschirm, Orc

If interested, please detail what host role(s) you would like to take on. I will be discussing the future of these events with those who get the roles.

Thank you!

10
Off-Topic Discussion / IDEA: RA2 2020 Tournament Season
« on: September 17, 2019, 05:24:06 AM »
Okay so this idea is the most experimental and if it went live wouldn't start until 2020. I was inspired by how the Roblox robot events were run and I did briefly talk with Sevalent about this a while ago.

The RA2 2020 TOURNAMENT SEASON (name WIP)
- To try and encourage people to host/take part in tournaments, this Season would be a topic of some sort showing a list/calender of official tournaments.
- Hosts would have to sign their tournament up to be added to the official list/calender. New/unreliable hosts would probably have to commit to finishing a tournament first before having tournaments accepted.
- Every tournament winner heads to the "End of Year Celebration" to battle it out in a fun tournament where we crown the best of the best but also celebrate a year of tournaments/GTM/RA2 etc etc. These winners will of course be seperated by their meta and weightclass.
- I'm also thinking of adding BOTM and Challenge Belt into this somehow. BOTM is a lot easier of an idea (The 11/12 BOTM winners would be voted on, robot with the most votes wins Bot Of The Year) but Challenge Belt will require some thinking.

I am more than happy to discuss this with all of you as it's a very experimental idea that would require a lot of elbow grease but could be a lot of fun. I'm hoping with this, we can get more Stock/IF tournaments and have more variety in weightclass/arena etc as I feel we've been missing that for a long time. Of course for this to work, it would require EVERYONE to work together.

Looking forward to hearing your opinions and ideas.

Cheers! :mrgreen:

11
Site News and Feedback / RA2 Central Discord
« on: September 16, 2019, 07:14:37 AM »
Hello folks!

Geese has been talking about this for a while and yesterday we finally made it a thing: a new Discord for RA2 players from all backgrounds. It is NOT a GTM discord, it is NOT a private discord, this is to try and be a central point for all communities to converge and socialise over RA2 with links to other community discords/websites to build a web, if you will. We have Garry's Wars involved already (massive thanks to Yugitom and Croga for their help here) and plan on getting other robotic communities involved to try and mend/build bridges!

Hope you consider joining this community. :mrgreen:
https://discord.gg/kJYR7wX

12
Off-Topic Discussion / BOTM and Challenge Belt Feedback
« on: September 15, 2019, 12:21:52 PM »
Hello all,
             short and sweet: I want to know your thoughts on Bot Of The Month and Challenge Belt as they currently stand. Do you like the current formats they have? Do you think they need to be reverted back to older ways/different ideas?  What would make these events better or worse in your eyes?

This might seem like a small issue to start with but I figured I may as well lend you all my ears while I work on the bigger issues.

Cheers!

13
Tournament Archives / Orc's Wars Series 4
« on: July 03, 2019, 01:29:03 PM »
Did someone say..."Showtime"?
 

Oh yes, we're back for Series 4! A fair amount has changed so let's take a look!

QUALIFICATION:
FORMAT:
RULES:
Components used for OW4:
SEEDS:
Sign-ups start the 1ST OF AUGUST! I hope you're excited for this series. :heart_smiley: Feel free to ask any questions!


14
DSL-IRL HW
CF allowed
BFE allowed
Flats and Overkill motors only from CB2
Best of 3
RW2016 arena
Hoppin host

Time to try and get the belt back and teach this lad some respect. :cool:

15
Tournament Archives / Orc's Wars Series 3!
« on: December 24, 2018, 07:33:38 PM »
Welcome to the Orc's Wars Series 3 SBV!

Splashes:
Full Splash!
 

Individual Splashes coming soon!

Bracket: https://docs.google.com/spreadsheets/d/1EMe0fmT2VaxJ9Nuazoo1rDkpmQFX-i2A--tOk2eL8E4/edit?usp=sharing (You should probably watch qualifying first if you want to see WHO got through.) Every bot has three 1 on 1 fights and a melee.

Videos:
QUALIFYING:
INTRO:

Congrats to all those who qualified! Splashes are my next focus and then OW3 may slowly begin! :mrgreen:

16
Tournament Archives / Orc's Wars: Series 3
« on: November 09, 2018, 05:02:05 PM »
 

IT'S SHOWTIME...and we're finally going OFFICIAL baby! Many thanks to Hoppin for once again helping to make the logo for this tournament! :heart_smiley:

FORMAT AND RULES:
112 robot places for Qualifiers, only 56 will qualify for the main series of OW3! If more than 112 bots are submitted then I will be choosing what gets entered. No robot is automatically guaranteed access.
Qualifiers will be 4 way rumbles with 2 bots advancing from each one. Main series format is based on Battlebots 2018, ending with a 32 bot bracket!
SEEDS FOR OW3:
DSL-IRL
Reskinned RW 2016 Arena
3 entries (not counting seeds) per person
Rules:
I reserve the right to deny your robot for any reason!
Signups will open for a maximum of a month. If 168 bots (yeah I doubt this will happen but putting it here in case) then sign-ups will last for one more week from that point. Basically: signups will end either in a month or a week after it hits 168 robots...whichever comes first.

Entries so far: 128/112 - Main Goal Reached!
                     128/168 - Extra Goal
https://docs.google.com/spreadsheets/d/198FLQVxPDQl8fT8K0ZHCHb3DwioyIh_RuOscy68taDY/edit?usp=sharing

17
Challenge Board / Hoppin vs TheOrcCorp [IRL Challenge belt] (Hoppin Wins)
« on: October 24, 2018, 04:23:44 PM »
Research my bots all you want, boy: I'm going to reclaim the belt I never truly lost. ;)

DSL-IRL
HW
Robot wars 2016 Arena
Bo3
RA2CF, BFE, and OBJRA2 allowed
DSC's IRL Packs, Badnik Recolors, Geese's NPC fixes, etc, are allowed
CB2 components are allowed as long as they are not too abusive (like stronger version of non CB2 components, etc)

Bild hosting (Thank you, you're a gem, should be the challenger next!)

18
Tournament Archives / Orc's Wars
« on: September 12, 2017, 08:34:22 AM »
Orc's Wars is a series created by me, hey there! If you scroll through the pages you can have a look through the history of Orc's Wars so far: this post will be dedicated to keeping track of whatever is currently going on in the latest series (robot entries, tournaments etc)!

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Orc's Wars Series 2 entrants so far!

19
DSL TC Showcases / Orc's DSL Showcase
« on: April 01, 2017, 08:28:56 AM »
So I've been getting into DSL more recently (thanks to Demon's latest tournament for really kicking my motivation into gear!) They are probably not the best designs as I'm still learning, some have quite a bit of open space/areas but hey, I'm welcome to feedback!  :bigsmile:


20
Stock Showcases / TheOrcCorp's Stock Showcase
« on: March 19, 2017, 08:07:45 AM »
Hello everyone, new to the forums here but have been playing Robot Arena 2 for about a year or so now...here are some of my robots! Any advice/thoughts etc are very appreciated!


Pages: [1]