ฉันสามารถใช้คุณสมบัติการคืบเพื่อประโยชน์ของฉันได้หรือไม่? [ปิด]


16

ฉันสามารถใช้คุณสมบัติการคืบเพื่อประโยชน์ของฉันได้หรือไม่?

ทุกครั้งที่ฉันสร้างเกมขึ้นมาคุณสมบัติจะถูกเพิ่มเข้ามาโดยไม่ตั้งใจ สิ่งนี้เกิดขึ้นไม่ว่าจะโดยบังเอิญหรือเป็นการง่ายที่จะเพิ่มตามเนื้อหาที่มีอยู่

หากฉันรู้ประเภทของเกมฉันจะเริ่มสร้างกลไกพื้นฐานและเพิ่มคุณสมบัติตามที่เห็นได้ชัดหรือไม่?

ตัวอย่างเช่นถ้าฉันต้องการสร้าง platformer 2d ตลอดระยะเวลา 6 เดือนฉันจะเริ่มวิ่งกระโดดยิงและอื่น ๆ และเพิ่มกลไกหลักเมื่อฉันค้นหามันโดยไม่ตั้งใจได้หรือไม่? หรือมีความเสี่ยงต่อการลงทุนครั้งโดยไม่มีการวางแผนล่วงหน้าหรือไม่?

ตรรกะของฉันที่อยู่เบื้องหลังสิ่งนี้คือการออกแบบจะมีผลมากกว่าสำหรับเจ้าชู้ ตัวเลือกการออกแบบจะสร้างขึ้นได้ง่ายขึ้นในสิ่งที่ง่ายต่อการทำ (เวลาที่เหมาะสม)

โดยสรุปมีอะไรผิดปกติในการสร้างเกมก่อนที่ฉันจะออกแบบหรือไม่


5
ไม่มีอะไรผิดปกติกับการออกแบบเกม ad-hoc รหัสที่คุณไป ทำงานให้ฉันด้วยความสำเร็จที่ยิ่งใหญ่ ท้ายที่สุดแล้วผู้บริโภคทั่วไปโดยเฉลี่ยต้องการที่จะเล่นสนุกและเรื่องราวของวิธีที่คุณได้ส่งมอบผลิตภัณฑ์สุดท้ายจะแตกต่างกันไปจากผู้พัฒนารายหนึ่งไปยังอีกราย ลองเลยไปเลย แนวคิดบนกระดาษนั้นยอดเยี่ยม แต่ข้อความจริงที่ทำให้เกมของคุณทำงานได้ในโค้ด หากคุณมีความคิดที่สนุกสนานให้ใส่รหัสหากเป็นสิ่งที่สนุกสนานให้เก็บไว้ ถ้ามันดูดเอามันออกมา ใช้รหัสและโครงสร้างคลาสของคุณเป็นเอกสารการออกแบบที่อยู่อาศัยของคุณ เปลี่ยนตามที่คุณต้องการ
Chris McFarland

3
อย่าสร้างต้นแบบตั้งแต่แรก โดยทั่วไปแล้วต้นแบบจะถูกโยนทิ้งเพราะพวกเขาทำ "เพื่อทดสอบอะไรบางอย่าง" - ขยะ ดังนั้นสร้างสิ่งของของคุณให้แข็งแกร่งตั้งแต่เริ่มต้นและทำให้มันยืดหยุ่น
Vaillancourt

สิ่งที่คุณกำลังพูดถึงคือIterative Designจริง ๆ - "วิธีการออกแบบตามกระบวนการวนรอบการทดสอบการวิเคราะห์และการปรับแต่งผลิตภัณฑ์หรือกระบวนการตามผลของการทดสอบการทำซ้ำการออกแบบล่าสุดการเปลี่ยนแปลง และมีการปรับแต่ง "
Tim Holt

คำตอบ:


17

นั่นเป็นคำถามที่น่าสนใจ สาเหตุหลักมาจากการตอบคำถามมันทำให้เกิดเฉดสีเทาและสีดำดำ vs สีขาว

มีอะไรผิดปกติในการสร้างเกมก่อนที่ฉันจะออกแบบหรือไม่

หากคุณคิดว่าคำถามนั้นเป็นแบบใช่หรือไม่ใช่คำตอบก็คือ: ใช่เท่านั้น หากคำตอบนั้นเหมาะสมยิ่งกว่านั้นก็จะเปลี่ยนไป เหตุผล: คุณไม่ควรสร้างเกมก่อนที่บางการออกแบบ แต่คุณสามารถบันทึกชิ้นส่วนของการออกแบบได้ในภายหลัง

หมายความว่าฉันไม่คิดว่าคุณควรเห็นปัญหานี้เป็นเรื่องที่ควรทำหรือไม่ทำ ค่อนข้างเป็นสิ่งที่คุณควรคิดในแง่ขององศา คุณสมบัติกำลังคืบคลานเข้ามาอาจเป็นรากเหง้าที่สองของความชั่วร้ายทั้งหมดในเรื่องที่เกี่ยวกับการพัฒนาเกม (ครั้งแรกที่โดนัลด์นูทมีท่านเป็นพวกเรานั่นคือ "การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากของความชั่วร้ายทั้งหมด" ) อย่างไรก็ตามจากประสบการณ์ของฉันการไม่คิดถึงคุณสมบัติหลักใด ๆ นั่นคืออย่างน้อยก็ไม่มีการออกแบบพื้นฐานที่คุณต้องการไปกับกลไกพื้นฐานของคุณ

เหตุผลหลักประการแรกคือการใช้ทรัพยากรอย่างชาญฉลาด (รวมถึงเวลาในการใช้ทรัพยากร) เพื่อวางแผนที่จะนำคุณสู่เส้นทาง - เนื่องจากการเข้าถึงจุดสิ้นสุดสิ้นตลอดเวลาเนื่องจากความพยายามและข้อผิดพลาดที่มากเกินไปอาจเป็นเรื่องเสียเปล่า ทรัพยากรที่ต้องมีคุณสมบัติที่ไม่คาดคิด

เหตุผลหลักที่สองการออกแบบเกมที่ฉลาดคือการเชื่อมโยงกัน การออกแบบเกมที่ดีนั้นมีความเชื่อมโยงกันทางความคิดหรือความมั่นคงถ้าคุณต้องการ มันหมายถึงการเล่นเกมโดยรวม, ประวัติ, การใช้งาน, แม้แต่กราฟฟิค, ควรจะปรับให้เข้ากันได้อย่างราบรื่นที่สุด มันไม่น่าเป็นไปได้มากนักที่การออกแบบเกมจะประสบความสำเร็จเช่นนั้นหากคุณสมบัติหลัก ๆ เพิ่งค้นพบในระหว่างการเดินทาง ถ้าไม่ได้สำหรับสิ่งอื่นเพราะในระหว่างการเดินทางที่มีจำนวนมากของการสุ่มเป็นมัน: สิ่งที่คุณจะก้าวบนอาจมีผลกระทบที่แตกต่างกันมากขึ้นอยู่กับเมื่อกระบวนการพัฒนาคุณไม่พบพวกเขา

ฉันไม่ได้หมายความว่าคุณไม่ควรทำในสิ่งที่คุณพูดเลย ฉันแค่อ้างว่าคุณต้องหายอดเงิน

ตัวอย่างเช่นถ้าฉันต้องการสร้าง platformer 2d ตลอดระยะเวลา 6 เดือนฉันจะเริ่มวิ่งกระโดดยิงและอื่น ๆ และเพิ่มกลไกหลักเมื่อฉันค้นหามันโดยไม่ตั้งใจได้หรือไม่? หรือมีความเสี่ยงต่อการลงทุนครั้งโดยไม่มีการวางแผนล่วงหน้าหรือไม่?

ฉันจะเริ่มต้นด้วยการแนะนำการปรับเปลี่ยนเล็กน้อยในประโยคของคุณ ด้วยการทำให้การวิ่งการกระโดดการยิงและอื่น ๆ คุณกำลังนำกลไกหลักไปใช้แล้ว สิ่งที่คุณจะเพิ่มในการเดินทางในตัวอย่างของคุณคือคุณสมบัติการเล่นเกมที่เฉพาะเจาะจง

ไม่ใช่เพราะคุณรู้ว่าเกมจะเป็นแพลตฟอร์ม 2 มิติที่การวิ่งการกระโดดหรือการยิงไม่สามารถแตกต่างกันไปขึ้นอยู่กับการออกแบบเกม ผู้เล่นของคุณสามารถวิ่งบนกำแพงได้หรือไม่? ผู้เล่นของคุณสามารถลอยในอากาศเมื่อกระโดด? แม้กระนั้นผู้เล่นของคุณสามารถยิงขณะวิ่งได้หรือไม่? เครื่องเล่นของคุณถ่ายในทิศทางเชิงเส้นหรือผ่านพาราโบลาเท่านั้น? การตัดสินใจเหล่านี้ขึ้นอยู่กับคุณสมบัติของเกมเป็นอย่างมาก

แต่ฉันเห็นประเด็นของคุณ: กลไกเหล่านี้มักจะมีบางส่วนที่แตกต่างกันเล็กน้อยมาก ดังนั้นถ้าคุณทำบางเกมการออกแบบและการตัดสินใจเกี่ยวกับคุณสมบัติพื้นฐานมากที่สุดเท่าที่จะค่อนข้างแน่ใจว่าวิธีการทำงาน, กระโดด, การถ่ายภาพ ฯลฯ จะทำงานที่เริ่มต้น จากนั้นคุณสามารถไปหากลไกเหล่านี้และสร้างมันต่อไป

แน่นอนว่าคุณยังคงสามารถค้นหาคุณลักษณะใหม่ที่ต้องการให้คุณเปลี่ยนกลไกเหล่านี้ได้ในภายหลัง - ไม่ว่ามันจะพื้นฐานเพียงใดก็ตาม แต่ที่สำคัญคือความน่าจะเป็น ความน่าจะเป็นที่จะเกิดขึ้นบ่อยครั้งจะน้อยลงถ้าอย่างน้อยคุณก็คิดเกี่ยวกับผลของการวิ่งยิงกระโดดและอื่น ๆ สำหรับแนวคิดพื้นฐานที่คุณมีสำหรับเกม


สุดท้ายถ้าคุณต้องการที่จะไปเส้นทางนั้นฉันจะแนะนำต่อไปนี้ คิดว่ามันเป็นกระบวนการซ้ำ คุณเริ่มคิดในการออกแบบระดับกว้าง คุณใช้สิ่งที่ดูเหมือนพื้นฐานและ "เป็นสากล" ภายในเกมของคุณเพื่อให้ประสบความสำเร็จ จากนั้นคุณทำการคิดการออกแบบเพิ่มเติมประเมินสิ่งที่คุณนำไปใช้ใหม่


4

เมื่อทำโครงการที่ซับซ้อนเช่นเกมคุณมักจะไม่สามารถสร้างคุณสมบัติทั้งหมดที่คุณต้องการได้เพราะเวลา / เงินหมดหรือเพราะสิ่งเหล่านั้นไม่ได้ดีเท่าที่คุณคาดหวัง สิ่งนี้เรียกว่าคืบคลานคุณสมบัติ แต่มีด้านพลิกไปนี้ คุณจะพบกับคุณสมบัติที่คุณไม่คิดว่าคุณต้องการ แต่เมื่อโครงการดำเนินการตามความต้องการของพวกเขา

นี่คือสาเหตุที่ผู้คนสร้างต้นแบบ - เพื่อให้พวกเขาสามารถเรียนรู้ว่าอะไรทำงานได้ดีและอะไรที่ไม่ได้ผลดังนั้นพวกเขาจึงสามารถตัดฟีเจอร์ที่ไม่ได้ผลแต่ก็สามารถค้นหาฟีเจอร์ใหม่ๆ หากคุณไม่ได้ทำสิ่งใดสิ่งหนึ่งที่คุณไม่ได้เรียนรู้มาแสดงว่าคุณทำผิด

นี่คือความรู้สึกที่แสดงออกในการพูดคุยที่เรียกว่าAdvanced Prototypingโดย Chris Hecker และ Chaim Gingold ซึ่งรวมถึงตัวอย่างมากมายจากการทำงานของพวกเขาใน Spore ซึ่งพวกเขามักจะประหลาดใจกับสิ่งที่ทำงานและสิ่งที่ไม่ได้เท่าที่ออกแบบใหม่ทั้งหมด ระบบขึ้นอยู่กับข้อเสนอแนะต้นแบบ

อีกตัวอย่างหนึ่งคือขั้นตอนการออกแบบสำหรับ Left 4 Dead ; ในตอนแรกเกมมีซอมบี้พื้นฐานเท่านั้น แต่จากการทดสอบกับผู้เล่นที่มีประสบการณ์ผู้ออกแบบพบว่าผู้เล่นติดกันอย่างมีประสิทธิภาพและเกมนั้นง่ายเกินไปดังนั้นพวกเขาจึงเพิ่มซอมบี้พิเศษเพื่อแยกทีมออกจากกันและทำให้เกมน่าตื่นเต้น

แน่นอนว่านี่ไม่ได้หมายความว่าคุณควรสร้างเกมของคุณโดยไม่ต้องมีการออกแบบมาก่อนเลย คุณควรตรวจสอบให้แน่ใจว่าหลักของเกมของคุณนั้นสนุกก่อนที่จะดำเนินการต่อเพราะมันมักจะเป็นส่วนที่ยากที่สุดในการสร้างเกม


2
ตัวอย่างที่โด่งดังในขณะนี้คือ Crash Course เกมต่อสู้รถถังอาวุธที่ทำโดย Psyonix ในปี 2007 มีคนพยายามวางลูกบอลและสองเป้าหมายและพวกเขาโยนอาวุธทั้งหมดและส่วนที่เหลือทั้งหมดของเกมเพื่อทำให้ Acrobatic Supersonic ปี 2008 Battle-Powered Battle-Cars ซึ่งกลายเป็นเกมยอดฮิตอย่าง Rocket League เมื่อพวกเขาอัพเดทมันสำหรับฮาร์ดแวร์ใหม่ ไปยังจุดที่ความสนุกแสดงออกมา
Almo

2

ฉันจะบอกว่าใช่ไปเลย แต่วางแผนคุณลักษณะ / คลาสทั่วไปบางอย่างล่วงหน้าเพื่อให้มีการทำงานร่วมกันระหว่างส่วนประกอบใหม่แต่ละรายการ

ความเป็นเอกภาพเป็นที่รู้จักกันดีในเรื่ององค์ประกอบของการพัฒนาเกมและจะอนุญาตให้มีการพัฒนารูปแบบนี้ได้อย่างง่ายดาย หากคุณไม่ได้ใช้ Unity คุณสามารถทำซ้ำวิธีแบบกึ่งองค์ประกอบ ฉันไม่คุ้นเคยกับเอ็นจิ้นเกมอื่น ๆ

วัตถุเกม Unity ทั้งหมดมีองค์ประกอบการแปลง สิ่งนี้ระบุตำแหน่งการหมุนและสเกลของวัตถุ ดังนั้นทำคลาส 'แปลง' ทั่วไปเพื่อเก็บค่าเหล่านี้รวมถึงการอ้างอิงถึงวัตถุเกมจริง

ใช้องค์ประกอบ 'กระโดด' ตัวอย่างเช่น ให้ตรรกะทั้งหมดทำงานร่วมกับคลาสการแปลงวัตถุของเกมเพื่อจัดการตำแหน่ง (หรือเอ็นจิ้นของคุณจะมีคลาสในตัวที่คล้ายกันอยู่แล้ว) คุณสามารถแนบคลาส 'Jump' นี้กับวัตถุใดก็ได้และคลาสจะทำให้ตำแหน่งการแปลงเปลี่ยนแปลงเมื่อมีการเรียกใช้การกระทำ (Jump.PerformJump () หรืออะไรก็ตาม) คลาส Jump ไม่จำเป็นต้องรู้อะไรเกี่ยวกับเจ้าของ (หรืออย่างน้อยก็ข้อมูลน้อยที่สุด)

ตอนนี้คุณสามารถสนุกกับการสร้างส่วนประกอบมากมายจากนั้นแนบไปกับเกมวัตถุรวมพวกมันไว้ในวัตถุเดียว ฯลฯ ตัวอย่างเช่น Run, Jump, Crouch, MovingTile, FireWeapon (ระบุ sprite 'bullet' และพฤติกรรมที่จะทำให้ ส่วนประกอบทั่วไป) ฯลฯ

กำหนดให้แต่ละองค์ประกอบเป็นทั่วไปที่สุดเท่าที่จะเป็นไปได้ สำหรับ FireWeapon คุณสามารถระบุสัญลักษณ์แสดงหัวข้อย่อยความเร็วความเสียหาย ฯลฯ คุณสามารถลองทำให้คุณสมบัติเหล่านั้นเป็นมาตรฐานดังนั้นความเร็วและความเสียหายจะถูกระบุระหว่าง 0 ถึง 1 จากนั้นปรับขนาดเหล่านั้นเป็นค่าสูงสุดของเกม ด้วยวิธีนี้คุณเพียงแค่กังวลเกี่ยวกับความแตกต่างสัมพัทธ์ระหว่างอาวุธ นอกจากนี้ยังปรับให้เหมาะกับการตั้งค่าระดับโลกเช่นความยากลำบากที่ความยากลำบากสูงขึ้นมีความเสียหายสูงสุดสูงสุด ฯลฯ

ก่อนที่คุณจะรู้ว่าคุณมีคลังแสงของส่วนประกอบที่จะเสียบและตอนนี้คุณสามารถพัฒนาได้อย่างรวดเร็วสำหรับเกมประเภทใด


1

โดยย่อ: ส่วนใหญ่คุณไม่สามารถมีขั้นตอนการออกแบบเดียวตามด้วยขั้นตอนการเข้ารหัสเดียว คุณจะต้องสลับพวกเขา ตามกฎทั่วไปพยายามเคารพสิ่งที่ออกแบบไว้แล้ว (ไม่ใช่สิ่งที่เข้ารหัสไว้แล้ว)

เกี่ยวกับการไม่มีการออกแบบเริ่มต้น (เพียงภาพร่างหรือภาพจิต): หากคุณไม่มีการออกแบบคุณไม่มีการออกแบบ คุณต้องทำอะไรสักอย่างที่จะมาพร้อมกับมัน แต่ตราบใดที่คุณเริ่มสร้างหนึ่งพยายามที่จะเคารพมันไม่ได้มาพร้อมกับใหม่ทุกครั้ง


ทำการทดลองและรับคุณสมบัติแบบสุ่มอาจหรืออาจไม่เป็นอันตราย มันอาจเป็นประโยชน์หรือหลีกเลี่ยงไม่ได้ ตัวอย่างเช่นคุณรู้ว่าคุณต้องการสนับสนุนการกระโดด (RPG 3D / 2D จำนวนมากไม่อนุญาตให้กระโดด) คุณรู้ได้อย่างไร? เพราะคุณจินตนาการแผนที่เกมที่ต้องกระโดดเพื่อจัดเรียงสิ่งกีดขวาง ดังนั้นการนำกระโดดไปใช้นั้นดีพอตราบใดที่มันอนุญาตให้ผู้เล่นจัดเรียงสิ่งกีดขวางหรือว่ามันต้องสอดคล้องกับลักษณะบางอย่างเช่นระดับความสูงที่เข้าถึงได้สูงสุดสามารถเพิ่มโดยไอเท็มหรือวัตถุเกมในแผนที่ฟิสิกส์ต้องมีการเร่งความเร็วหรือเด้ง เมื่อมาริโอกระโดดเข้าหาศัตรูเขาได้รับแรงกระตุ้นเพื่อยกระดับอีกครั้งและนั่นสำคัญมากสำหรับการเล่นเกม)?

หากคุณสามารถตอบคำถามเหล่านั้นได้แล้วเอกสารการออกแบบของคุณ (จินตภาพหรือจริง) นั้นสมบูรณ์มาก หากคุณไม่สามารถตอบคำถามได้แสดงว่าการออกแบบของคุณไม่สมบูรณ์ ในกรณีนี้คุณจะต้องกลับไปทำงานในการออกแบบหรือทำการทดลองเพื่อเติมเต็มช่องว่าง โอกาสอาจเปิดกว้างหรือ จำกัด มาก หากระดับเกมของคุณบางอย่างจะมีอุปสรรคและคุณเพียงแค่ต้องกระโดดให้กับพวกเขาแล้วก็มีอิสระมากมายในการตัดสินใจระดับความสูงหรือความเร็วสูงสุดที่คุณสามารถเข้าถึงได้หรือบางทีคุณอาจตัดสินใจที่จะแกล้งมีเครื่องยนต์ฟิสิกส์เริ่มทั้งหมด ปรับปรุงภาพเคลื่อนไหวของการกระโดด แต่คุณไม่ต้องการสิ่งอื่นใด (ในเกม RPG 2 มิติหลายเกมคุณไม่สามารถกระโดดได้เมื่อคุณต้องการ แต่ตราบใดที่มีรูไทล์แผ่นเดียวในแผนที่พยายามเข้าสู่เกมโดยอัตโนมัติทริกเกอร์การกระโดดไปที่ไทล์กระเบื้องถัดจากไทล์รู)

ฉันเข้าใจว่ามันเป็นเรื่องดีที่จะไปที่โค้ดโดยไม่มีการออกแบบที่สมบูรณ์ตราบใดที่คุณเคารพสิ่งที่ตัดสินใจแล้ว นอกจากนี้มันอาจหลีกเลี่ยงไม่ได้ในบางสถานการณ์เนื่องจากจักรวาลเกมอาจสร้างขึ้นจากกระบวนการคิดที่หลากหลาย ตัวอย่างเช่นการ์ดเกม: ฉันรู้ว่าฉันต้องการให้ไพ่มี Attack and Defense การ์ดจำนวนหนึ่งในตารางตามเวลาที่กำหนดและผู้เล่นในเทิร์นของเขา / เธอสามารถเลือกได้ว่าจะโจมตีการ์ดใบใด มันอาจดูเหมือนว่าบางอย่างเป็นการออกแบบที่สมบูรณ์อยู่แล้ว แต่มันก็มาพร้อมความสมดุลของเกมเท่านั้นที่เป็นไปได้ผ่านการจำลองหลาย หลังจากการจำลองหลายครั้งฉันตัดสินใจว่าการ์ดที่มีพลังโจมตี 10 มีพลังมากพอฉันสามารถลบมันออกจากเกมได้ แต่ฉันชอบมากเกินไปดังนั้นฉันจะทำสิ่งที่แตกต่างออกไป ฉันจะสร้างกฎใหม่ที่ระบุว่าหากผู้เล่นโจมตีด้วยการ์ดดังกล่าวจะไม่สามารถโจมตีการ์ดอื่นในระหว่างเทิร์นนั้นได้ ตอนนี้ฉันมีกฎใหม่ที่เสริมสร้างกลไกของเกม แต่ใช้กับการ์ดใบเดียวที่ดูแปลก (เหมือนแฮ็คที่สกปรก) ฉันรู้ว่ามันดูแปลกและจากนั้นฉันตัดสินใจที่จะสร้างการ์ดชุดใหม่ที่มีตัวเลขสูง แต่ กฎการ จำกัด ใหม่จะมีผลกับกฎเหล่านั้น ตอนนี้ฉันมีเครื่องมือเกมที่ซับซ้อนมากขึ้นซึ่งสร้างขึ้นเหนือต้นแบบดั้งเดิมที่เรียบง่ายในความคิดของฉันฉันได้เปลี่ยนเป็นข้อได้เปรียบของฉันเพื่อสร้างเกมที่ดีขึ้น

ทีนี้สิ่งหนึ่งที่เกี่ยวกับตัวอย่างสุดท้ายนั้นในตัวอย่างที่เสนอของเกมไพ่การ์ดใหม่อาจส่งผลให้สินทรัพย์ใหม่ (เพิ่มต้นทุนเพิ่มเวลาเพิ่ม) แต่ฉันคิดว่าเป็นตัวอย่างที่ดีของโอกาสที่คุณเห็นเมื่อการเข้ารหัสมีอิทธิพลต่อการตัดสินใจออกแบบของคุณในวิธีที่ดี

ฉันไม่คิดว่าเกมส่วนใหญ่ที่เราเล่นได้รับการออกแบบมาอย่างสมบูรณ์ก่อนการเข้ารหัสฉันแน่ใจว่าพวกเขาต้องทำการตัดสินใจที่ยากลำบากเพื่อให้สอดคล้องกับไทม์ไลน์และอื่น ๆ

เมื่อคนอื่นจ่ายเงินให้ทั้งหมด: อธิบายต่อรอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.